【Android】Pixel3aのroot化/SSL証明書のインストール

2021/11/25時点の内容。

 Pixel3aをroot化した。やりたいことはSSL証明書のsystem認証。Burp等のプロキシツールの証明書を信頼させる。

購入時点でイメージがAndroid 10だったため、10でroot化した。(2021/11/25時点ではAndroid 12までroot化の手順が公開されていた)
つまづいたところのメモがてらなので、詳細でないところは下記記事および下記記事のリンク先を参照する。(有識者がやってるサイトを見たほうがいい)

参考にした記事

  • Root Your Pixel 3 on Android 10 (https://android.gadgethacks.com/how-to/root-your-pixel-3-android-10-0200295/)

    上記記事の補足のつもりで書く。

大まかな流れ

  1. ブートローダーのロック解除
  2. ブートイメージへのパッチ適用(ルート化完了)
  3. SSL証明書の適用

手順1.ブートローダーのロック解除

参考にした記事は、部分部分は丁寧だけど説明があっちこっちに飛ぶので、全貌が見えていない初心者にはしんどかった。

Android側での操作(設定のどこかにあるから探す。適当なタイミングでPCにUSB接続しておく)

    1. 開発者向けオプションの有効化
    2. OEMロック解除の有効化(「解除の有効化」ってわかりづらい)
    3. USBデバッグの許可

PC側での操作(Windows on subsystem for Linux でやりました。なんでもいい)

    1. Platform-Tools Packageのダウンロード(How to Install ADB & Fastboot on Mac, Linux & Windows (https://android.gadgethacks.com/how-to/android-basics-install-adb-fastboot-mac-linux-windows-0164225/))
    2. 上記1.で実行ファイルをダウンロードするので、Pathを通すなり都合の良いディレクトリに置くなりする。adbコマンドとfastbootコマンドを使う。これがなにかよくわからないけど、通常起動時にはadbコマンド、fastboot起動時にはfastbootコマンドでAndroidを操作している気がする。
    3. Google USB ドライバのインストール(https://developer.android.com/studio/run/win-usb?hl=ja)これをやらないとfastbootコマンドがうまく機能しない。
    4. Android端末とUSB接続を確認する。
    5. adbコマンドを実行する。 "$ adb devices" でデバイスの識別子のような文字列と「device」の表示がされればOK。このとき、Android端末側で接続の許可を確認するポップアップが出る場合がある。うまく行かない場合は確認する。
接続が確認できた後、AndroidとPCでの操作

    1. Android端末をfastbootする。Pixel3aの場合、電源ボタンと音量下ボタン同時押しで起動する。(クセがあり、手を離すタイミングを間違えるとfastbootが終了する。)
    2. Fastboot状態のAndroid端末とPCをUSB接続する。(しっぱなしでいい)
    3. PC側で "$ fastboot flashing unlock" を実行する。Android側でなんか表示が出る場合、unlockされるように表示に従って操作する。
    4. Androidを再起動する。
    5. 最初のAndroidの設定を再度行う。(開発者向けオプション ~ USB)

手順2. ブートイメージへのパッチ適用

パッチのもとになるファイルと、パッチを生成するアプリ(?)を用意する。

パッチのもとになるファイルのダウンロード

    1.  工場出荷時のイメージ(Factory Image)をダウンロードする。
      Googleが公開しているので、自分の環境にあうやつを探す。(2021/11/25時点ではhttps://developers.google.com/android/images の「acknowledge」ボタンを押すと一覧が表示された。この場合、zipファイルの中に目的の.imgファイルがある。)
    2. 上記1.で取得した boot.img をAndroid端末に移動させる。Downloadディレクトリがよい。

Canary Magisk Managerをインストールする

    1. https://github.com/topjohnwu/Magisk/releases から apkファイルをダウンロードする。
      公式がgithubで公開しているもの意外のapkファイルは使わないこと。apkファイルが見つからない場合は公式が公開しているソースからビルドすること。(Windows10 でやったけどなんかむずかしくてビルドできなかった)
    2.  ApkファイルをAndroidにダウンロードしたら、Androidからapkファイルを開く。インストールするか確認されるのでインストールする。(ファイルがどこにあるかわからん関連で苦しんだ場合、ファイルマネージャアプリをインストールすると楽。FXをつかっている。)
    3. Magisk を起動する。Install ボタンから boot.img を選択する。(参考サイトの画像をみて)
    4. パッチファイルが生成される。どこかに保存されているので探す。(更新がかからず、ファイルはあるはずなのに見つからなくてアプリの再起動や本体の再起動とかまでした。)
    5. 生成されたmagisk_patched.imgとboot.img をPCにコピーする。(.imgファイルの名前は微妙に違うかも)
    6. Android端末をfastbootし、PCと接続する。
    7. "$ fastboot flash boot magisk_patched.img" する。
    8. "$ fastboot reboot" などでandroid端末を再起動する。
      このとき、タッチパネル操作が一切できないなどの不具合に遭遇した。"$ fastboot flash boot boot.img" で巻き戻して再ルート化で事なきを得た。
      直らない場合、factory image のバージョンを確認/変更するとなんとかなるかも…?
    9. アプリによってはルート化検知するものがある。
      このルート化検知を回避したい場合、magick から SafetyNet で確認を行う。
      「Success」が表示されればOK。
    10. Magisk SafetyNet には2021年9月時点で問題があり、SafetyNet にパッチを当てる必要がある。動画参照(Android SafetyNet ByPass | CTS Profile False Fix | Magisk Hide Fix | September 2021 | Root Only (https://youtu.be/I9A3yxAi-Ww))
    11. SafetyNet が通ればroot化検知を回避できているはず。

手順3.SSL証明書の適用

Burpが発行する証明書をAndroid端末にsystem認証させる。

参考サイト

  • kapieciiのブログ, "https://kapiecii.hatenablog.com/entry/2020/03/06/083000", アプリの通信内容を確認する(Android7以降) (2021/11/25)

  1. "cacert.der"ファイルをBurpからダウンロードする。
  2. "$ openssl x509 -inform DER -in cacert.der -out cacert.pem" で.derファイルを.pemファイルへ形式変換する。
  3. "$ mv cacert.pem 9a5ba575.0"  で名前を変換する。(9a5ba575.0ってなに?→参考サイトを見る。"$ openssl x509 -inform PEM -subject_hash_old -in cacert.pem | head -1")
  4. 参考サイトでは、この後 mount remount で /system 配下にこの認証ファイルをおいている。
  5. 上記4.がうまく行かなかったため、magick のパッチファイルを作成し、これの/system/etc/security/cacerts/配下に9a5ba575.0ファイルを置いた。magiskからインポートすることで証明書が/system配下に保存される。
  6. "$adb shell"コマンドでandroid端末のshellを操作。"$ su", "# chmod 644 /system/etc/security/cacerts/9a5ba575.0" でパーミッションを更新。
    mount remount は read only で怒られるのにchmodはできる謎。
  7. PCとネットワーク共有する。Windows10の場合はモバイルホットスポットでできる。
  8. PCでBurpを起動。ProxyタブのProxy ListenersのAddボタン(もしくはeditボタン)から任意のポートを指定。all interfaces をチェック。OKの前にRequest handling タブからSupport invisible proxying をチェックする(これ見つからなくて迷子になった)。OKを押す。
  9. Android端末からプロキシ設定を行い、BurpでキャプチャできればOK。
    (Androidの設定でも行ける気がするが、ProxyDroidというアプリをインストールして管理していて楽)

上記5.についてまい書き方を考えてない。気が向いたら書く。


コメント