ニュース

【追記あり】「Magisk」を使ってアプリのroot化端末チェック(SafetyNet)を回避する方法

Android PayやPokemon GO(ポケモンGO)など一部のアプリはroot化チェックを行っており、root化された端末では動作しないようになっています。
そのチェックを回避し、アプリを動作させる「Magisk」の使用方法を説明します。
2016/10/8…root切り替え機能が無くなったことを追記
2016/9/16…カスタムROM(CM13やRRなど)でもMagiskが使えたことを追記

システム改変(root化)をチェックする「SafetyNet API」

Android PayやPokémon GOでは「SafetyNet API」という厳しいシステム改変・rootチェック機構が使用されています。

詳しくは下記の記事を参照してください。

SafetyNetは「Magisk」で回避可能→v7以降は不可能

~2016/10/8追記~
Magiskがバージョン7に更新され、root/非root切り替え機能が削除されました。これにより、v6までで可能だったSafetyNetの回避が不可能となりました。

作者の方曰く、MagiskではSafetyNet回避とXposed動作が両立できないこと、他のプロジェクト(suhideなど)があることから、v7よりSafetyNet回避機能を削除したとのことでした。

今後は、suhideなど別のツールを使用して欲しいとのことです。他の方法について詳しくはこちらの記事を参照して下さい。
以下の情報は、「v6」以前のものです。「v7」以降はSafetyNetの回避が不可能なのでご注意下さい。

Magiskの制約

非常に便利なMagiskですが、いくつか制約があります。

root権限を保ったまま回避できるわけではない

注意して欲しいのが、「root権限を維持したままチェック回避できるわけでない」という点です。

Magiskはあくまでも「root/非root」を手間なく切り替えるものです。

非rootへ切り替えれば確かにチェックを回避できますが、一方で端末全体が完全に非root状態となります。その間、root権限が必要なアプリは当然動作しません。

再びrootへ切り替えればもちろん動作しますが、Magiskでは「チェック回避が必要なアプリとroot権限が必要なアプリは同時動作できない」ということを覚えておいて下さい。
(チェックの瞬間だけ非rootへ切り替えて、その後すぐにrootへ切り替えるというのも可能)

サポートはAndroid 5.0以上

上記に加えて、Androidバージョンの制約もあります。

MagiskはAndroid 5.0以上をサポートしているので、それ未満のバージョン(Android 4.4など)では動作しません

無理やり導入しようとしても、後述する本体zipインストール時に弾かれてしまうようです。(2016/9/16時点)

"systemless root"が不可能な端末では使えない

Magiskはroot/非rootを切り替えるもので、単体ではroot化出来ません。別途、自分でroot化する必要があります。

しかしながら、単にroot化すればいいわけではなく、"システムを改変しないように"行う必要があります。これを"systemless root"(システムレス ルート)と言います。

systemless rootは、システム領域(/system)ではなくカーネル領域(boot)を利用することでroot化を行います。
そのため、カーネル領域を変更できない端末ではsystemless rootが出来ないため、Magiskを使うことが出来ません。


systemlessが不可能な端末としては、国内版Xperiaが挙げられます。
国内版Xperiaはブートローダーがアンロック出来ないため、いわゆる"prerooted.zip"をカスタムリカバリから導入し、ROMごと入れ替える形でroot化を行います。これ以外でのroot化は不可能なようです。

なお、海外版では使用可能です。(アンロックし、systemless rootを行える状態の場合)

(筆者はXperiaを所有してないため、もしかしたら間違っているかもしれません。その際はコメント欄よりご指摘頂けるとありがたいです。)


※ブートローダーがアンロックできない端末全てがsystemless root不可能なわけではありません!アンロックしていなくてもカーネル領域を変更できれば可能です。(ASUS ZenPad 8.0など)

カスタムリカバリを起動できる必要がある

Magisk導入のためにカスタムリカバリを起動する必要があります。

カスタムリカバリが無い(もしくは、起動できない)端末では導入できません

今回は現在最も一般的に用いられている「TWRP」を例に説明します。

カスタムリカバリについて詳しくはこちらの記事を参照して下さい。

追記:Xposedは使用不可能

Xposedが導入されていると動作しません
Xposedを削除するか、またはそもそも導入しなければ動作することが出来ます。

Xposedを利用したい場合は、こちらの記事で紹介した「suhide」を使用して下さい。

Magisk導入に必要な準備

まずは導入準備として以下の作業を行います。

必ずバックアップを!

Magiskはシステムを改変しませんが、カーネルなど端末の重要な部分を変更します。最悪の場合、環境によっては端末が起動しなくなることも考えられます。
導入する前に、いつでも戻せるように予めカスタムリカバリ等でシステムのフルバックアップを必ず取って下さい。

カスタムリカバリ(TWRP)でバックアップを行う方法はこちらの記事を参照して下さい。

システムを初期状態に戻す

Magiskを導入する前に、一旦端末を非root化し、システムを初期状態(改変されていない状態)にする必要があります。
システムが完全に初期状態でないとMagiskを導入できません。(導入しても機能しない)

初期状態に戻す方法をいくつか示します。下記方法を参考に初期状態にしてください。

~2016/9/17追記~
「参考情報」に書きましたが、初期化せずに「su」ファイル2つとXposedを削除した状態で導入しても動作してしまいました。どうしても初期化できない・初期化が面倒だと言う方は、上記を削除した状態で試してみても良いかもしれません。
※本来は推薦されていないので、どうなるかわかりません。実行前に必ずバックアップして下さい。
※思わぬ不具合防止のため、基本的には初期化することをオススメします。

方法①:ファクトリーイメージを使う

メーカー公式ROMを使用している場合、可能ならばバックアップ後にファクトリーイメージを用いて工場出荷状態に戻して下さい。(システム領域のみ戻せばOK)

Nexus端末へのファクトリーイメージの書き込み方法はこちらの記事を参照して下さい。

方法②:ROMをインストールし直す

カスタムROMを使用している場合、バックアップ後に現在のROMを一旦削除(フルWipe)し、新規インストールし直してください。

なお、最初からroot化されているカスタムROMの場合、一旦「/system/bin/su」及び「/system/xbin/su」を削除する必要があります。
詳しくは「Magiskを導入する―システム領域内の「su」を削除」で述べます。

方法③:手動で元に戻す

上記2つとも不可能な場合、手動でシステム領域を全て元に戻して下さい。

まず、Xposedを導入している場合はuninstall.zipをカスタムリカバリからインストールし、削除してください。(詳しくはこちら

また、既にSuperSUなどでroot化している場合は必ずroot権限を削除(アンルート)してください。
SuperSUを開き、「設定」タップ、少し下にスクロールして「ルート権限を破棄 (アンルート)」をタップして下さい。
「続行」をタップし、bootイメージを復元で「はい」をタップ、recoveryイメージの復元で「いいえ」をタップして下さい。
端末が自動的に再起動され、非root化されているはずです。

必要なファイルを用意

以下のファイルの最新版端末内部ストレージのわかりやすい場所に配置して下さい。
  1. Magisk本体と管理アプリ
  2. root化ファイル
  3. 任意:Xposedファイル

Magisk本体と管理アプリ

Magisk本体のzipファイル(カスタムリカバリから導入)と管理アプリのapkファイル(普通のアプリと同様にインストール)です。
管理アプリ(Magisk Manager)はOS起動中にroot/非rootを切り替えるものです。

こちらのページの一番上の投稿にある「Downloads」よりMagisk中の「v7 Link」Magisk Manager中の「v2.0」をそれぞれクリックし、ダウンロードして下さい。
※最新版をダウンロードして下さい。
  • 本体:Magisk-v7.zip
    ※更新等によりファイル名が異なる可能性あり
  • 管理アプリ:Magisk_Manager_v2.0.apk
    ※更新等によりファイル名が異なる可能性あり
それぞれタップして、ファイルを2つダウンロードする

root化ファイル

Magisk単体ではroot化できないため、別途自分でroot化する必要があります。必ず"systemless"に対応した方法で行ってください。(システムを改変せずにroot化)

systemlessなroot化にはいくつか方法がありますが、今回は「phh's SuperUser」のMagisk対応版を使用します。

root化zipをこちらのページの「Attached Files」より「phh-superuser-magisk-r259.zip」をクリックしてダウンロードし、端末内に配置して下さい。

また、phh's SuperUser専用の管理アプリが必要になります。こちらはGoogle Playストアにて配信されているので、インストールしておいて下さい。(導入前/後どちらでもOK)

なお、通常のroot化でよく用いられているSuperSUのsystemless版も非公式にリリースされていますが、Android 5.0/5.1では動作に制限があるそうです。

Xposedファイル(Magisk導入後にXposedを利用する場合)

Xposedを導入すると起動しないので注意して下さい!Xposedを使用したい場合はこちらの「suhide」を使用して下さい。

Magisk導入後にXposedを利用する場合、非公式版を利用する必要があります。
非公式版の導入により管理アプリの見た目が大きく変わりますが、基本的な機能は公式版と同じです。

Xposedについてはまずはこちらの記事を参照して下さい。その上で、記事中にて使用しているファイルの代わりに以下を使用して下さい。

なお、今回導入したXposedを削除する場合は、必要なファイルと同じページにある「xposed-uninstaller」というzipファイルをカスタムリカバリからインストールして下さい。

Magiskを導入する

それでは実際にMagiskを導入していきます。

導入は以下の様な流れで行います。
  1. システム領域内の「su」を削除
    ※最初からroot化されているカスタムROMのみ(CyanogenModやResurrection Remixなど)
  2. Magisk本体とroot化zip、Xposedをインストール
  3. Magisk ManagerとXposed管理アプリをインストール
  4. root管理アプリをインストール
1に関して、「後からroot化するカスタムROM」や「メーカー公式ROM(非root)」を使用している場合は不要です。

また、全体を通してですが、Xposedは必須ではありません。Magisk導入後に使用しない場合は無視してください。
Pokémon GOについて、Xposedを導入すると起動しないので注意して下さい!Xposedを使用したい場合はこちらの「suhide」を使用して下さい。

システム領域内の「su」を削除

※本作業は、「最初からroot化されているカスタムROM」(CyanogenModやResurrection Remixなど)の場合のみ必要です。それ以外の場合は行う必要はありません。

まずは、以下の示すシステム領域内にあるrootファイル「su」を削除します。これにより、カスタムROMであっても端末を完全に非root化します。
  • /system/bin/su
  • /system/xbin/su
削除はどのような方法でも構いません。OS起動中にroot対応ファイラーアプリ(ESファイルエクスプローラなど)で削除しても良いですし、adbコマンドを使っても良いです。


今回は例として、「システムを初期状態に戻す ― ROMをインストールし直す」に書いた"カスタムROMの新規インストールし直し"の直後を想定し、カスタムリカバリ(TWRP)上で削除します。
  1. 左下から1つ上の「Mount」をタップする
  2. 上の「system」をタップし、チェックを付ける
    ※左下の「Mount system partition read-only」のチェックは外す
  3. 下中央のホームボタンをタップし、TWRPのメニュー画面に戻る
  4. 左下の「Advanced」をタップする
  5. 右上から1つ下の「File Manager」をタップする
  6. 端末内のフォルダが表示されるので、少し下にスクロールし「system」をタップして開く
  7. 「system」フォルダが表示されるので、「bin」をタップして開く
  8. 「bin」フォルダが表示されるので、少し下にスクロールし「su」をタップして選択する
  9. 左上のファイル名(/system/bin/su)を確認し、左下の「Delete」をタップしてファイルを削除する
  10. Swipe to Confirm」を右にスワイプして削除を実行する
  11. 上に「Succeful」と表示されていることを確認し、左下の「Back」をタップして戻る
  12. 「su」ファイルが削除されていることを確認し、一番上までスクロールし「(Up A Level)」をタップして1つ上に戻る
  13. 「system」フォルダが表示されるので、少し下にスクロールし「xbin」をタップして開く
  14. 「xbin」フォルダが表示されるので、少し下にスクロールし「su」をタップして選択する
  15. 左上のファイル名(/system/xbin/su)を確認し、左下の「Delete」をタップしてファイルを削除する
  16. 上に「Succeful」と表示されていることを確認し、左下の「Back」をタップして戻る
  17. 「su」ファイルが削除されていることを確認し、下中央のホームボタンをタップしてTWRPのメニュー画面に戻る
これでシステム領域内の「su」を削除し、カスタムROMを完全に非root化することができました。

Magisk本体とroot化zip、Xposedをインストール

カスタムリカバリからMagisk本体とroot化zip、Xposedをインストールします。
Pokémon GOについて、Xposedを導入すると起動しないので注意して下さい!Xposedを使用したい場合はこちらの「suhide」を使用して下さい。
  1. カスタムリカバリを起動する
    ※今回はTWRPを使用
  2. 左上の「Install」をタップする
  3. フォルダ名をタップし、「必要なファイル」を配置してあるフォルダまで移動する
    ※今回は「Download」に配置
  4. Magisk-v◯.zip」をタップする
    ※◯はファイルのバージョン名。今回は「6」。(2016/9/15時点)
  5. 下の「Add more zips」をタップする
  6. root化zip(「phh-superuser-17-magisk.zip」)をタップする
    ※更新等によりファイル名が異なる場合あり
  7. Xposedのインストール:下の「Add more zips」をタップする
    ※この作業は任意です。Xposedを使用しない場合は手順9へ進んで下さい。
  8. Xposedのインストール:Xposedのzip(「xposed-v86.5-sdk23-topjohnmu.zip」)をタップする
    ※この作業は任意です。Xposedを使用しない場合は手順9へ進んで下さい。
  9. 下の「Swipe to confirm Flash」を右にスワイプし、インストールする
  10. 一番下に「Done」と表示されて正しく完了したことを確認し、「Reboot System」をタップして再起動する
これでMagisk本体とroot化zip、Xposedをインストールの導入が終わりました。

あとはOSを起動し、必要なアプリをインストールするだけです。

「提供元不明のアプリ」をONにしておく

次に進む前に、「設定」アプリの「セキュリティ」の「提供元不明のアプリ」をONにしておいて下さい。
これを行わないと、アプリをインストールできません。
「提供元不明のアプリ」をONにする

Magisk ManagerとXposed管理アプリをインストール

続いて、Magisk Managerとroot管理アプリ、Xposed管理アプリをインストールします。
  1. ファイラーアプリで端末の内部ストレージを開く
    ※今回はASUS File Managerを使用
  2. 「必要なファイル」を配置してあるフォルダまで移動する
  3. Magisk_Manager_v1.2.apk」を開く
    ※更新等によりファイル名が異なる場合あり
  4. 右下の「インストール」をタップし、アプリをインストールする
  5. 左下の「完了」をタップする
  6. Xposedのインストール:「XposedInstaller_by_dvdandroid.apk」を開く
    ※この作業は任意です。Xposedを使用しない場合は手順9へ進んで下さい。
    ※更新等やAndroidバージョンによりファイル名が異なる場合あり
  7. 右下の「インストール」をタップし、アプリをインストールする
    ※この作業は任意です。Xposedを使用しない場合は手順9へ進んで下さい。
  8. 左下の「完了」をタップする
    ※この作業は任意です。Xposedを使用しない場合は手順9へ進んで下さい。
Xposedアプリについてここでは特に説明しませんが、デザインが大きく変更されている以外は従来のアプリと同様の機能・操作です。Xposedについてはこちらの記事を参照して下さい。

root管理アプリのインストールと設定

最後に、root管理アプリをインストールし、設定します。

今回使用した「phh's SuperUser」のsystemless対応版の管理アプリは、Google Playストアに配信されています。
そのため、普通のアプリと同様にインストールします。
  1. 「phh's SuperUser」のGoogle Playストアページを開く
  2. インストール」をタップする
  3. 同意する」をタップする
  4. 「アンインストール」と「開く」が表示され、インストールできたことを確認する
  5. そのまま「開く」をタップし、アプリを起動する
  6. 右上のメニューボタンをタップし、「設定」をタップして開く
  7. 一番上の「スーパーユーザーアクセス」をタップする
  8. 選択肢が表示されるので、「アプリとADB」をタップする
  9. 「アプリとADB」に変更されていることを確認する
これで必要なアプリを全てインストールし、準備が整いました。



ああ

Magiskを使ってみる

実際にMagiskを使って、root/非rootを切り替えてみます。

非rootに切り替える

これまでの手順でMagiskを導入した場合、初期状態では「root」化されています。
それをMagisk Managerで切り替え、「非root」化します。
  1. Magisk Manager」を開く
  2. Root Toggle」がON(右:root化)になっていることと、「Root mounted and enabled. Safety Net (Android Pay) will NOT work」と書かれていることを確認する
  3. Root Toggle」をタップし、OFF(左:非root化)にする
  4. root権限を要求されるので、「選択を記憶する」をタップした後、「許可」をタップする
  5. Root Toggle」がOFF(左:非root)になっていることと、「Safety Net (Android Pay) should work, but no root temporarily」と書かれていることを確認する
これで非root化できました。
実際にAndroid PayやPokémon GOを起動し、正常に動作するかを確認してみてください。

ちなみに「Root Checker」で確認してみると、確かに非root化されています。
非root化されている

rootに切り替える

Magisk Managerで「非root」化した状態では、当然ながらroot権限が必要なアプリは動作しません。
そのため、再度切り替えて「root」化します。

手順は「非rootに切り替える」と全く同じです。
  1. Magisk Manager」を開く
  2. Root Toggle」がOFF(左:非root)になっていることと、「Safety Net (Android Pay) should work, but no root temporarily」と書かれていることを確認する
  3. Root Toggle」をタップし、OFF(左:非root化)にする
  4. Root Toggle」がON(右:root化)になっていることと、「Root mounted and enabled. Safety Net (Android Pay) will NOT work」と書かれていることを確認する
これでroot化できました。
root権限が必要なアプリが再び動作可能になったことを確認して下さい。
ちなみに「Root Checker」で確認してみると、確かにroot化され元に戻っています。
root化されて、元に戻った

追記:AutoMagiskで切り替えを自動化してみる

これまでの手順でMagiskの導入が出来ましたが、切り替え自体は手動で行う必要があり、ちょっと面倒です。

そこで、特定のアプリ起動時に自動的に切り替えてくれる「Auto Magisk」を導入したいと思います。

Auto Magiskのダウンロード

まずはAutoMagiskをダウンロードします。
  • AutoMagisk v1.0.apk
    ※更新等によりファイル名が異なる可能性あり
    ※ダウンロード後、インストールする端末の内部ストレージのわかりやすい場所に移動しておく
こちらのページにアクセスし、1番上の投稿の「Download from Google Drive」をクリックして下さい。
Google ドライブのダウンロードページが開かれるので、「ダウンロード」をクリックして、PCに保存して下さい。

ダウンロードしたら、インストールする端末の内部ストレージのわかりやすい場所に移動して置いて下さい。
※今回は「Download」に移動しました

AutoMagiskのインストール

続いて、Auto Magiskをインストールします。
  1. ファイラーアプリで端末の内部ストレージを開く
    ※今回はASUS File Managerを使用
  2. 「必要なファイル」を配置してあるフォルダまで移動する
  3. AutoMagisk v1.0.apk」を開く
    ※更新等によりファイル名が異なる場合あり
  4. 右下の「インストール」をタップし、アプリをインストールする
  5. 左下の「完了」をタップする

初期設定

次に、AutoMagiskを起動して、簡単に初期設定を行います。
  1. AutoMagisk」を開く
  2. root権限を要求されるので、「選択を記憶する」をタップした後、「許可」をタップする
  3. アプリを動作させるために「アクセシビリティサービスをON」にする必要があると言われるので、「SETTINGS」をタップして設定を開く
  4. 「サービス」内の「AutoMagisk」をタップして開く
  5. 右上のトグルスイッチをタップし、「ON」にする
  6. 確認されるので、「OK」をタップする
  7. トグルスイッチが「ON」になっていることを確認し、左上の「←」をタップしてアプリに戻る
    ※ナビゲーションバーの戻るボタンでも戻れます
これで初期設定が完了し、AutoMagiskが使えるようになりました。

使い方:自動切り替えしたいアプリをタップ

使い方は非常に簡単です。

初期設定後に「AutoMagisk」を起動すると、アプリ一覧が表示されます。
アプリ名をタップすると、右端のチェックを入れる・外すことが出来ます。
ここにチェックを入れることで、対象のアプリが起動したときに自動的に非rootへ切り替えてくれます。アプリを終了した際には、rootへ自動で切り替えてくれます。
※Pokémon GOなどいくつかのアプリは最初からチェックが入っています。

Magiskを更新するときは

本記事の手順に従い「phh's SuperUser」のMagisk対応版を使用して導入している場合、「Magisk Manager」の最新版をインストールし、アプリ上から更新することが出来ます。

これ以外の方法で導入している場合、「Magisk Uninstaller」をカスタムリカバリからインストールしてMagiskを一旦削除し、本記事の「Magiskを導入する」の手順で改めて導入して下さい。

参考情報

実際に導入してみて気付いたことを参考までに書いておきました。

SELinuxがEnforcingでなくても動作する

Magisk Managerには「Root Toggle」の下に「Selinux Toggle」というものがあります。
これはSELinuxのEnforcing(強制)/Permissive(許可)を切り替えるものです。
下の「Selinux Toggle」で状態を切り替えられる
SELinuxとはAndroid(Linux)のセキュリティ機構の1つで、これがEnforcingの状態だと制限が厳しく、一部のroot権限が必要なアプリが動作しないこともあります。

このSELinuxをデフォルトのEnforcingからPermissiveへ切り替えてみましたが、Pokémon GOが問題なく動作しました。(もちろん、非rootである必要がありますが)
SELinuxが「Permissive」でもSafetyNetのチェックを回避できた
もしかしたら他のアプリでは挙動が異なるかもしれませんが、少なくともSafetyNet自体はSELinuxの状態とは無関係であるようです。

システムの全てチェックしているわけではない?

本来は完全初期化してから導入すべきなのですが、システム領域が完全に元に戻っていない状態のカスタムROM(RR)で試したところ、Magiskの導入・動作共に問題なくPokémon GOやAndroid Payも動作しました。

その時は、導入前に「su」とXpoesdは削除したものの、システムを変更するその他のもの(サウンドMOD「A.R.I.S.E. Sound Systems」など)は削除せずそのままでした。

冒頭にも書きましたが、SafetyNetはrootだけでなくシステムの改変を見ているはずです。

しかし、実際には改変が残っていても回避できてしまったので、もしかしたら全部はチェックしていないのではないのではないかともしれません。
(私の端末環境の問題やこれらアプリだけがたまたま起動してしまった可能性もあります)

まとめ

  • Android PayやPokémon GOなどは「SafetyNet API」で端末のシステム改変(root化)をチェック
    →チェックに引っかかるとアプリは動作できず
  • SafetyNetのチェックは「Magisk」で回避可能
  • Magiskは以下の環境で使用可能
    • 「メーカー公式ROM」または「後からroot化するカスタムROM」(CMやRRなどは不可)→どのROMでもOK
    • Android 5.0以上
    • systemless rootが可能
  • Magiskはroot/非rootの切り替えを行う
    ※非root中はチェック回避できるが、他のアプリもroot権限使えず
  • AutoMagiskで自動切替可能

参考にした情報

Powered by Blogger.