Android PayやPokemon GO(ポケモンGO)など一部のアプリはroot化チェックを行っており、root化された端末では動作しないようになっています。
そのチェックを回避し、アプリを動作させる「Root Switch」の使用方法を説明します。
SafetyNetを使っているアプリの動作時のみ切り替えることで、端末がroot化されていてもアプリを動作させることができるというわけです。
※こちらの記事で既にRoot Switch(+suhide)について書いていますが、今回はRoot Switch単体での方法を説明します。
なお、最初からroot化されているカスタムROMの場合、一旦「/system/bin/su」及び「/system/xbin/su」を削除する必要があります。
詳しくは「Root Switchを導入する―システム領域内の「su」を削除」で述べます。
ファイルはzip形式で圧縮されているので、解凍してapkファイルを取り出してください。
今回は、カスタムリカバリ(TWRP)から導入するタイプのSuperSUを使用します。
そのチェックを回避し、アプリを動作させる「Root Switch」の使用方法を説明します。
システム改変(root化)をチェックする「SafetyNet API」
Android PayやPokémon GOでは「SafetyNet API」という厳しいシステム改変・rootチェック機構が使用されています。
詳しくは下記の記事を参照してください。
SafetyNetは「Root Switch」で回避可能
このSafetyNetを回避する方法として「Root Switch」があります。
Root Switchは、文字通り"Rootをスイッチ"するためのアプリで、簡単に端末を一時的に非root化することができます。
SafetyNetを使っているアプリの動作時のみ切り替えることで、端末がroot化されていてもアプリを動作させることができるというわけです。
※こちらの記事で既にRoot Switch(+suhide)について書いていますが、今回はRoot Switch単体での方法を説明します。
Root Switchの特徴
メリットや利点
- Systemless rootでなくても動作
他の方法ではsystem領域を改変しないsystemless rootである必要がありましたが、Root Switchは通常のroot化でも動作することができます。 - Xposedが導入されていても回避可能
Root Switchはroot/非rootの切り替えの他、Xposedの切り替えも行うことができます。そのため、端末にXposedが導入されていても回避することができます。 - Android 5.0でも動作
Android 5.0での動作報告があります。(Android 4.4以下での動作は不明) - カスタムリカバリが無くても導入可能
必要なものは、Root Switch本体(普通のアプリ(apk))とSuperSUだけなので、カスタムリカバリが無くても導入することができます。
特に、systemless rootでなくても動作する点が一番のメリットではないでしょうか。国内版Xperia等のsystemless rootが不可能な端末でも回避することができます。
また、SuperSUやXposedをFlashFire等でインストールすれば、カスタムリカバリが無くても導入可能です。
デメリットや注意
- root/非rootの切り替えは手動
切り替えは自動ではありません。SafetyNetを使用するアプリを起動する前に、手動で切り替える必要があります。 - root権限を保ったまま回避できるわけではない
非root切り替え中はチェックを回避できますが、端末全体が完全に非root状態となります。その間、root権限が必要なアプリは動作しません。(戻せば再び動作します) - SELinuxが"Enforcing"にできる必要
SafetyNetはSELinuxが"Enforcing"状態でないと回避できません。Enforcingに切り替え不可能な端末・ROMでは動作しません。 - systemless rootだと回避できない
systemless rootだと回避できません。systemless rootで回避したい場合はこちらの手順でroot化を行う必要があります。
※本記事では従来のroot化(system)で説明します。
3点目については、Root SwitchというよりはSafetyNetの仕様の問題です。カスタムカーネルなどでは、SELinuxが"Permissive"で固定されておりEnforcingにできないものがあるため注意が必要です。
Root Switchの導入に必要な準備
今回は、AICP 11(Android 6.0.1)を導入したNexus 6Pを例にして、Root Switchの導入方法を説明します。
※他の環境では表示や操作が一部異なる場合があります。
まずは導入準備として以下の作業を行います。
まずは必ずバックアップを!
Root Switch自体は端末に大きな影響を及ぼしませんが、他に必要となるSuperSUはシステムやカーネルなど端末の重要な部分を変更します。最悪の場合、端末が起動しなくなることも考えられます。
導入する前に、いつでも戻せるように予めカスタムリカバリ等でシステムのフルバックアップを必ず取って下さい。
カスタムリカバリ(TWRP)でバックアップを行う方法はこちらの記事を参照して下さい。
システムを初期状態に戻す
導入する前に一旦端末を非root化し、システムを初期状態(改変されていない状態)にする必要があります。
初期状態に戻す方法をいくつか示します。下記方法を参考に初期状態にしてください。
初期状態に戻す方法をいくつか示します。下記方法を参考に初期状態にしてください。
方法①:ファクトリーイメージを使う
メーカー公式ROMを使用している場合、可能ならばバックアップ後にファクトリーイメージを用いて工場出荷状態に戻して下さい。(システム領域のみ戻せばOK)
カスタムROMを使用している場合、バックアップ後に現在のROMを一旦削除(フルWipe)し、新規インストールし直してください。
なお、最初からroot化されているカスタムROMの場合、一旦「/system/bin/su」及び「/system/xbin/su」を削除する必要があります。
詳しくは「Root Switchを導入する―システム領域内の「su」を削除」で述べます。
方法③:手動で元に戻す
上記2つとも不可能な場合、手動でシステム領域を全て元に戻して下さい。
まず、Xposedを導入している場合はuninstall.zipをカスタムリカバリからインストールし、削除してください。(詳しくはこちら)
まず、Xposedを導入している場合はuninstall.zipをカスタムリカバリからインストールし、削除してください。(詳しくはこちら)
「提供元不明のアプリ」をONにしておく
事前に、「設定」アプリの「セキュリティ」の「提供元不明のアプリ」をONにしておいて下さい。これを行わないとアプリをインストールできません。
必要なファイルを用意
以下のファイルの最新版を端末内部ストレージのわかりやすい場所に配置して下さい。
- Root Switch本体
- root化ファイル(SuperSU)
- 任意:Xposedファイル
Root Switch本体
Root Switchのzipをこちらのページの上から二番目の投稿より「RootSwitch-1.3.3.2.zip」をクリック、ダウンロードし、端末内に配置して下さい。
※より新しいものがある場合は、それをダウンロードしてください
- RootSwitch-1.3.3.2.zip
リンク先の上から二番目の投稿の「RootSwitch-1.3.3.2.zip」をクリックし、ダウンロード
その後、端末内のわかりやすい場所に配置して下さい。
root化ファイル
Root Switch単体ではroot化できないため、別途自分でroot化する必要があります。方法は様々ありますが、「SuperSU 2.78 SR2」以上での動作が確認されています。
今回は、カスタムリカバリ(TWRP)から導入するタイプのSuperSUを使用します。
SuperSUのzipをこちらのページの一番上の投稿「The latest test release is: 」の下にあるリンク「SR3-SuperSU-v2.78-SR3-20161103171345.zip」をクリックしてダウンロードし、端末内に配置して下さい。
※より新しいものがある場合は、それをダウンロードしてください
※より新しいものがある場合は、それをダウンロードしてください
- root化zip:SR3-SuperSU-v2.78-SR3-20161103171345.zip
※更新等によりファイル名が異なる場合あり
Xposedファイル(Xposedを利用する場合)
Xposedもsystemlessである必要はありません。従来のものを導入してください。
下の記事を参考に、使用する端末に合わせて「Xposed Installer」と「必要なファイル(framework)」をダウンロードし、端末内に配置して下さい。
※CPUやOSバージョンによって使用するファイルが異なります。
今回は、「必要なファイル(framework)」として「xposed-v86-sdk23-arm64.zip」を、「Xposed Installer」として「Material Design Xposed Installer」を使用します。
下の記事を参考に、使用する端末に合わせて「Xposed Installer」と「必要なファイル(framework)」をダウンロードし、端末内に配置して下さい。
※CPUやOSバージョンによって使用するファイルが異なります。
今回は、「必要なファイル(framework)」として「xposed-v86-sdk23-arm64.zip」を、「Xposed Installer」として「Material Design Xposed Installer」を使用します。
Root Switchを導入する
それでは実際に導入していきます。導入は以下の様な流れで行います。
- システム領域内の「su」を削除
※最初からroot化されているカスタムROMのみ(CyanogenModやResurrection Remixなど) - root化zipとXposedをインストール
- Root SwitchとXposed Installerをインストール
- Root Switchの設定と使い方
1に関して、「後からroot化するカスタムROM」や「メーカー公式ROM(非root)」を使用している場合は不要です。
また、全体を通してですが、Xposedは必須ではありません。使用しない場合は無視してください。
システム領域内の「su」を削除
※本作業は、「最初からroot化されているカスタムROM」(CyanogenModやResurrection Remixなど)の場合のみ必要です。それ以外の場合は行う必要はありません。
まずは、以下の示すシステム領域内にあるrootファイル「su」を削除します。これにより、カスタムROMであっても端末を完全に非root化します。
- /system/bin/su
- /system/xbin/su
削除はどのような方法でも構いません。OS起動中にroot対応ファイラーアプリ(ESファイルエクスプローラなど)で削除しても良いですし、adbコマンドを使っても良いです。
今回は例として、「システムを初期状態に戻す ― ROMをインストールし直す」に書いた"カスタムROMの新規インストールし直し"の直後を想定し、カスタムリカバリ(TWRP)上で削除します。
- 左下から1つ上の「Mount」をタップする
- 上の「system」をタップし、チェックを付ける
※左下の「Mount system partition read-only」のチェックは外す
- 下中央のホームボタンをタップし、TWRPのメニュー画面に戻る
- 左下の「Advanced」をタップする
- 右上から1つ下の「File Manager」をタップする
- 端末内のフォルダが表示されるので、少し下にスクロールし「system」をタップして開く
- 「system」フォルダが表示されるので、「bin」をタップして開く
- 「bin」フォルダが表示されるので、少し下にスクロールし「su」をタップして選択する
- 左上のファイル名(/system/bin/su)を確認し、左下の「Delete」をタップしてファイルを削除する
- 「Swipe to Confirm」を右にスワイプして削除を実行する
- 上に「Succeful」と表示されていることを確認し、左下の「Back」をタップして戻る
- 「su」ファイルが削除されていることを確認し、一番上までスクロールし「(Up A Level)」をタップして1つ上に戻る
- 「system」フォルダが表示されるので、少し下にスクロールし「xbin」をタップして開く
- 「xbin」フォルダが表示されるので、少し下にスクロールし「su」をタップして選択する
- 左上のファイル名(/system/xbin/su)を確認し、左下の「Delete」をタップしてファイルを削除する
- 上に「Succeful」と表示されていることを確認し、左下の「Back」をタップして戻る
- 「su」ファイルが削除されていることを確認し、下中央のホームボタンをタップしてTWRPのメニュー画面に戻る
これでシステム領域内の「su」を削除し、カスタムROMを完全に非root化することができました。
root化zipとXposedをインストール
カスタムリカバリからroot化zipとXposedをインストールします。
- カスタムリカバリを起動する
※今回はTWRPを使用 - 左上の「Install」をタップする
- フォルダ名をタップし、「必要なファイル」を配置してあるフォルダまで移動する
※今回は「Download」に配置
- root化zip(「SR3-SuperSU-v2.78-SR3-20161103171345.zip」)をタップする
※更新等によりファイル名が異なる場合あり - 下の「Add more zips」をタップする
- Xposedのインストール:Xposedのzip(「
- xposed-v86-sdk23-arm64.zip 」)をタップする※この作業は任意です。Xposedを使用しない場合は手順11へ進んで下さい。
- 下の「Swipe to confirm Flash」を右にスワイプし、インストールする
- 一番下に「Done」と表示されて正しく完了したことを確認し、「Reboot System」をタップして再起動する
これでroot化zipとXposedのインストールが終わりました。
Root SwitchとXposed Installerをインストール
OSが起動したら、Root SwitchとXposed Installerをインストールします。
- ファイラーアプリで端末の内部ストレージを開く
※今回はASUS File Managerを使用
- 「必要なファイル」を配置してあるフォルダまで移動する
- 「RootSwitch-1.3.3.2.apk」を開く
※更新等やAndroidバージョンによりファイル名が異なる場合あり - 右下の「インストール」をタップし、アプリをインストールする
- 左下の「完了」をタップする
- Xposedのインストール:「XposedInstaller_by_dvdandroid.apk」を開く
※更新等やAndroidバージョンによりファイル名が異なる場合あり
- 右下の「インストール」をタップし、アプリをインストールする
- 左下の「完了」をタップする
これで導入が完了しました。
Root Switchの設定と使い方
root/非rootの切り替え
最初はroot化されているはずなので、今回は非rootに切り替えてみます。Xposedを導入していない場合はこれだけで回避可能です。
- 「RootSwitch」を開く
- root権限の使用許可を求められるので「許可」をタップする
- 「Root」欄の「Enabled」をタップして、非rootに切り替える
- 「Disabled」と表示され、切り替えられたことを確認する
※「SELINUX」が「Enforcing」にならない場合は回避できません。ROOTとSELINUXを確認
これで非rootへの切り替えができました。実際にアプリを起動して動作するか確認してみてください。
戻す際は「Disabled」をタップしてください。「Enabled」と表示され、root権限が復活しているはずです。
なお、表示の通りSELinuxが「Enforcing」に切り替えられます。切り替え中はroot権限・SELinuxがPermissiveであることが必要なアプリは動作しないので注意してください。
Xposedの切り替え
Xposedを導入している場合、回避のためにXposed自体を一時的に無効化する必要があります。
- 「RootSwitch」を開く
- 「Xposed」欄の「Restore Xposed when reboot」をタップして、チェックを付ける
- 「Xposed」欄の「Enabled」をタップする
- 再起動の確認画面が表示されるので、「CONTINUE」をタップする
- 自動的に再起動(ソフトリブート)される
※ソフトリブートなので十数秒ほどで完了します - 再起動後、「Disabled」と表示され、切り替えられたことを確認する
これでXposedを一時的に無効化できました。
Rootの切り替えと同じように、戻す際は「Disabled」をタップしてください。自動的に再起動後、「Enabled」と表示されてXposedが復活しているはずです。
補足:通知画面への常駐
Root SwitchやSuperSUを更新するときは
Root SwitchやSuperSUの新しいバージョンがリリースされた際に更新する場合は、ファイルをダウンロードして上書き更新してください。
※カスタムROM等の更新(上書き含む)するとsystem及びboot(カーネル)が初期化されます。その際は、手順に従ってもう一度導入し直して下さい。
※カスタムROM等の更新(上書き含む)するとsystem及びboot(カーネル)が初期化されます。その際は、手順に従ってもう一度導入し直して下さい。
Root Switchを削除するときは
普通のアプリと同じようにアンインストールしてください。
「設定」アプリの「アプリ」から該当のアプリ名をタップすることでアンインストールできます。
まとめ
- Android PayやPokémon GOなどは「SafetyNet API」で端末のシステム改変(root化)をチェック
→チェックに引っかかるとアプリは動作できず - SafetyNetのチェックは「Root Switch」で回避可能
- メリットやデメリット
- Systemless rootでなくても動作
- Xposedが導入されていても回避可能
- Android 5.0でも動作
- root/非rootの切り替えは手動
- root権限を保ったまま回避できるわけではない
- SELinuxが"Enforcing"にできる必要
参考情報
- アプリのroot化端末チェック(SafetyNet)を回避する方法まとめ
同様の仕組みである「Magisk」や「hidesu」に関するまとめ - 暫時 unroot 工具:Root Switch-Root 進階相關應用
Root Switchの配布元 - [Discussion] PokeMon Go Magisk Discussion Thread - Post #1289
Root Switchを使った回避方法について