Androidをroot化する

Androidをroot化する

Tags
Security
Android
root
Published
Published July 1, 2021
Author
プロパティ
タグ
ステータス
よくわからないカスタムROMとか3rd partyのよくわからないアプリを使ってroot化する方法を散見するが、 そんな危ない橋を渡るよりかはより一般的なMagiskを使ってMagiskが推奨している方法でroot化した方が良いと思う今日この頃。 (Magiskを推奨しているわけではない)
すっきりした資料が少ないため、以下にメモをする。 これはデバッグ用のデバイスをセットアップする備忘録であり、参考にする場合は自己責任で行ってください。

TL;DR

https://topjohnwu.github.io/Magisk/install.html を見てください。

開発者向けオプションの有効化

まずは、開発者向けオプションを有効化しよう。後述のfastbootによるbootloader unlockにはこれが必要になる。 方法は簡単で、ビルド番号を10回くらいタップする。(7回だそう[^1]) [^1]: https://developer.android.com/studio/debug/dev-options?hl=ja
そして、開発者向けオプションで以下を有効化する。
  • OEM ロック解除
  • USB デバッグ

ADB(Android Debug Bridge)とfastbootのインストール

ADBは、Androidデバイスを操作するコマンドラインツール。[^2] root化においては、USB接続されたAndroidデバイスのファイルシステムにファイルをpush/pullしたり、Fastbootモードで再起動する用途で使う。 [^2]: https://developer.android.com/studio/command-line/adb?hl=ja
また、fastboot[^3]はブートローダーのロックを解除し、Magiskによりpatchされたイメージを書き込めるようにするために使う。 [^3]: https://source.android.com/devices/bootloader/locking_unlocking?hl=ja
どちらも、Android SDKに含まれているためAndroid Studioをインストールしていれば既にあるかもしれないが、別個にインストールする場合は次のようにできる。

Mac

brew(Cask)[^4]に用意されているため、brewでインストールできる。brew自体のインストールについては省略。 [^4]: https://formulae.brew.sh/cask/android-platform-tools
brew install --cask android-platform-tools

Linux, Windows

https://developer.android.com/studio/releases/platform-tools?hl=ja からプラットフォームに合わせたplatform-toolsをダウンロードして適切なPathに配置。 そこにPathが通ってなければ、通してあげてください。

bootloaderのunlock

注意 このステップではデバイス内のユーザーデータが消去されます。
fastbootコマンドが使えるようになったら、先にbootloaderをunlockしておく。
bootloaderとは、OSを実行する前に実行されるプログラムで、これがLockされた状態ではpatchを当てたイメージを読み込ませて実行することができない。[^5] [^5]: https://source.android.com/devices/bootloader?hl=ja
bootloaderをunlockすることでイメージをデバイスにフラッシュすることができるようになり、また、読み込まれたOSがルートオブトラストにより署名されていなくても実行できるようになる。[^6] [^6]: https://source.android.com/security/verifiedboot/device-state?hl=ja
ルートオブトラストとは簡単に言うと、非対称暗号の公開鍵ペアの公開鍵をデバイスに格納し、これを信頼の基点(ルートオブトラスト)とし、ベンダーのみぞ知る秘密鍵によって署名されたbootloader等を連鎖的に実行する方法である。12
この基点が崩れる、例えば自由に公開鍵を書き込めるのであれば、自信が生成した公開鍵ペアで各Imageを署名して自由に起動できることになる。
unlockによる起動フローの変化は以下の図がわかりやすかった。
notion image
起動フロー
画像は https://source.android.com/security/verifiedboot/boot-flow?hl=ja より引用
unlockがなんとなくわかったところで、以下のコマンドでbootloaderをunlockする。
fastboot flashing unlock

Factory Imageのダウンロード

ベースになるboot.imgまたはrecovery.imgを用意しよう。
Google Pixelであれば、Googleが公式に配布しているため以下が利用できる。
https://developers.google.com/android/images

Magiskのインストール

Androidデバイスから本家レポジトリにアクセスし、Magisk.apkをインストールする。
https://github.com/topjohnwu/Magisk/releases
決して非公式のサイトからはダウンロードしないようにしよう。

MagiskでImageにpatchする

まずは先ほどダウンロードしたImageをデバイスにアップロードする。
adb push /path/to/boot.img /tmp/local/data/
次は、デバイスでMagiskを起動し、[Select and Patch a File]を選択。 先ほどのImageを選択し、patchが完了するのを待つ。

patchされたimageのflash

adb reboot bootloaderfastboot flash boot /path/to/magisk_patched.img

rooted

以上で脱獄、root化が完了する。
あとは、fridaとかで動的解析などをしたりしてroot権限を活用しよう。[^9] [^9]: アプリケーションにfrida-server等を組み込むfrida-gadgetを使えばrootじゃなくても大丈夫ではあります。

  1. https://www.atmarkit.co.jp/ait/articles/1608/04/news012_2.html
  1. https://source.android.com/security/verifiedboot/verified-boot?hl=ja