水たまりは希望を写している

Root 化済み端末 (Magisk) でアプリ・ゲームが動かないときの対処法

1. まずはじめに――Magisk 以外を疑う

まず Magisk 以外の原因を考えた方が良い。Magisk だけが原因ではなく、下記の理由と併せてアプリがブロックしている可能性があるから。

1.1 「USB デバッグ」がオンのまま

開発者向けオプションにある「USB デバッグ」がオンのままだとアプリやゲームが弾くことがある。数えられないほどこの設定項目をチェックして起動をブロックするアプリ・ゲームがある。

おとなしく開発者向けオプションでオフにすれば解決する。もしくは、Tasker でアプリ起動をトリガーにオフにするか、そういう (特定アプリ起動中の USB デバッグを制御する) カスタム ROM を焼くか。

1.2 TWRP / Magisk / Xposed フォルダがある

どれもこれらのツールを使うと、特定の条件で内部ストレージにフォルダを生成する。これをチェックして起動をブロックしている可能性がある。TWRP なんて Android の改造にすら関係ないけど、カスタムリカバリ使っている端末なんてマトモじゃない、みたいなスタンスで弾いているんだろう。

しかし、Android 11 向けにビルドされたアプリは、そもそも内部ストレージにアクセスすることが難しいので、この手法で検知するアプリはどんどん減っていくのではないかと思われる。

1.3 IMEI 番号が正しくない

IMEI がそもそも無かったり適当な番号だったりするとエミュレータだと判定して起動をブロックするアプリ・ゲームがある。僕は MTK 機を使ったことがないから知らないけど MediaTek の SoC を採用している端末は IMEI が飛びやすいらしい (!?)

2. (v24 以降) 対象のアプリを DenyList に追加する

Magisk v24 では、MagiskHide が削除された。代わりに、Zygisk と DenyList が実装された。Zygisk を有効化し DenyList に任意のアプリを追加すると、そのアプリ内では Magisk による改変が効かなくなる。故に Root の検知に反応しなくなる。

そもそも Root 検知を回避したいアプリが Root 権限を要しているはずがないわけなので、積極的に DenyList に突っ込んでも何も問題はないはずだ。Zygisk + DenyList は Better MagiskHide と捉えて OK。

3. Magisk アプリを隠す (パッケージ名の変更)

パッケージ名が com.topjohnwu.magisk なアプリ (つまり Magisk) を検知している可能性がある。これを回避するために、Magisk にはアプリを別のパッケージ名に変更して再インストールするという機能が備わっている。「Magisk を隠す」することで、パッケージ名がランダムに置き換わるため、実質他のアプリから Magisk を検知することができなくなる。

Android 11 向けにビルドされたアプリは、そもそも限定的なパッケージリストしか取得できなくなるので、この手法で検知するアプリはどんどん減っていくはず。例外として、金融・銀行系アプリは依然として完全なパッケージリストを取得できる権限を行使できる可能性が残っているため、パッケージ名を変える必要性がある。

4. (v23 以前) MagiskHide を有効化する

「MagiskHide」をオンにして、あらゆる検知から Magisk を隠せる。専門的なことはともかく、これはオンにしておいて問題ない。

まず設定から、「MagiskHide」のトグルをオンにする、そのあとスーパーユーザーのタブに移動して、MagiskHide から隠したいアプリにチェックを入れる。

こんな感じ。ちなみにウマ娘は MagiskHide するだけで動く (しないと怒られる)。

それでも動かない場合

  • (古いスマホを使ってるなら) 買い替える
    • Android 9 未満の古い OS を使うな (MagiskHide が完璧に動作しない)
  • 一度アプリをアンインストールしてみる
    • 改造を検知した後、その情報を記録している可能性がある
  • SafetyNet が通ってない
    • Google Play ストア、Google Mobile Services、Google Services Framework のデータを削除してみる
    • Universal SafetyNet Fix をインストールしてみる。通るようになるかもしれない、くらいの感じで
    • フルワイプしてゼロから焼き直して改善しなかったら諦める。諦めも肝心

Root 化済みかどうかチェックするアプリは、上記の対策をすれば 9 割 9 分回避できるはず。むしろ僕は弾かれるアプリに遭遇したことがない。ハードウェアベースの Evaluation を採用しているアプリがどのくらいあるかは分からないよね……。

さいごに

どうせ抜け穴があるんだから意味を成さない改造検知を実装するな 😡