Gadgets技術ネタ

Pixel 7/7 ProをBootloader UnlockしてMagiskでRoot化!

Gadgets
スポンサーリンク

どんな記事?

Pixel 7 / Pixel 7 ProのBootloader Unlockと、Magiskを用いてRootを取る手順を紹介します。

Bootloader UnlockおよびRoot化したAndroidデバイスでSafetyNetをパスする方法、決済アプリや銀行系アプリなどを使う方法については以下の記事も併せてご覧ください。

MagiskモジュールやLSPosedモジュールなどをインストールして便利に使う方法も近日中にまとめる予定です。

要点

慣れている方ならこの要点だけで理解できる内容となっています。

Magiskでパッチするのは従来のboot.imgではなくinit_boot.img

Android 13 を搭載してリリースされるデバイスの場合、汎用 RAM ディスクが boot イメージから削除され、別の init_boot イメージに配置されています。この変更により、boot イメージには GKI カーネルのみが残ります。

Android 12 以前のカーネル バージョンを引き続き使用するデバイスをアップグレードする場合、汎用 RAM ディスクは、新しい init_boot イメージを必要としない状態が維持されます。

https://source.android.com/docs/core/architecture/bootloader/partitions/generic-boot

ドキュメントを参照するとこのように書いてありました。つまりAndroid 13が初期イメージのPixel 7ではinit_boot.imgに対してパッチを当てる必要があるということです。Pixel 6の場合は初期イメージがAndroid 12でしたので、Android 13にアップデートしたあともboot.imgでOKです。

SafetyNetやPlay IntegrityもOK(追記あり)

方法は後日公開予定の記事で詳しく言及しますが、取り急ぎ追記。

詳しい記事を公開しました! 併せてご参照ください。

追記1

Universal SafetyNet Fix MODの作者がXDAで新しいバージョンを公開していましたので試したところ、無事にSafetyNetとPlay Integrityの認証が通りました!(MEETS_STRONG_INTEGRITY以外)

Android 13以上でリリースされたデバイスはPlay Integrity APIのハードウェア認証を使用してMEETS_DEVICE_INTEGRITYおよびMEETS_STRONG_INTEGRITYに合格する必要があるのですが、実際にはro.product.first_api_level=33を検出するとハードウェア認証を行うらしくro.product.first_api_level を下げることで回避しているようです。

追記2

僕はテスト版を使ったのですが、safetynet-fix-v2.3.1-MOD_2.0だと正常に動きませんでした。

# avoid breaking encryption, set shipping level to 32 for devices >=33 to allow for software attestation.
if [[ "$(getprop ro.product.first_api_level)" -ge 33 ]]; then
    resetprop ro.product.first_api_level 32
fi

API 32(Android 12L)をサポートしているデバイスなら、単に

resetprop ro.product.first_api_level 32

と修正しておけば動くはず。

追記3

v2.3.1-MOD_2.0で動作するようになりました。

追記前

現時点ではSafetyNetを完全にパスすることはできていません。

Google Payや銀行系のアプリ(住信SBIなど)も使える

こちらも後日公開予定の記事で詳しく説明しますが、Google Payや銀行系のアプリも使うことができました。ソーシャルゲームに関してはプレイしないので分かりません。

Bootloader Unlock

MagiskでRootを取るには前提条件としてBootloaderのUnlockが必要です。

必要なもの

SDK Platform-Tools

Bootloader Unlockの手順

  1. まずは動作確認(初期不良対策)
    Googleデバイスの場合BootloaderをUnlockすると保証が無効になりますので、最初にハードウェアの不良がないか確認します。正常に電源が入るかどうか、またタップの反応などを確認しておくといいです。ただしのちほど初期化されますので、アレコレ設定しても無駄になります。
  1. システムアップデート
    Pixel 7 / Pixel 7 Proにはゼロデイアップデートが配布されていましたので、 設定 → システム → システムアップデート でアップデートを適用しておきます。
  1. 開発者向けオプションを有効にする
    設定 → デバイス情報 → ビルド番号 を7回タップ
  1. USBデバッグを有効にする
    設定 → システム → 開発者向けオプション → USBデバッグ
  1. OEMロック解除を有効にする
    設定 → システム → 開発者向けオプション → OEMロック解除
  1. Bootloaderに再起動する
    USBデバッグが有効な状態でadb reboot bootloaderするか、ボリュームダウンボタンを押しながら電源ONにしてもOKです。再起動後、赤字でFastboot Modeと表示されていることを確認します。
  1. BootloaderをUnlockする
    fastboot flashing unlock
    Pixel 7 / Pro の画面にUnlockの警告が出ますので、ボリュームボタンで選択し、電源ボタンで決定します。このときデバイスは完全に初期化されますのでご注意ください。
  1. 再起動
    Device state:
    unlocked になっていることを確認します。
    確認できたらボリュームボタンで Start を選択し、電源ボタンを押して起動します。
  1. 初期設定
    無事に起動したら初期設定を済ませましょう。設定 → システム → 開発者向けオプション → 自動アップデート を無効にしておきます。

Root

BootloaderのUnlockができれば、あとはもうひと息です。

必要なもの

後述手順にて詳しく説明します。

デバイスに応じたFactory Image

Magisk

Magiskを使ってRootを取る手順

  1. Magiskをダウンロード
    Googleの最新デバイスで最新OSですので、StableよりCanaryビルドを使ったほうがいいかと思います。正式に対応したらStableビルドに切り替えてもいいですね。
  1. Magiskをインストール
    エクスプローラでドラッグ&ドロップして転送後、デバイス側で開きインストールしてもいいですが、USBデバッグがONになっていればadb install app-release.apkで簡単にインストールできます。
  1. 該当機種のFactory Imageをダウンロード
    2022年10月15日現在、Pixel 7向けはpanther-td1a.220804.031-factory-2f036a47.zipが最新でした。
  1. ダウンロードしたFactory Imageを展開
    panther-td1a.220804.031-factory-2f036a47.zipを例に進めます。

これを解凍すると……

こうなるので、panther-td1a.220804.031フォルダを開きます。

panther-td1a.220804.031フォルダの中にimage-panther-td1a.220804.031.zipがあるので、これを開いて次の手順へ。

  1. init_boot.imgを取り出す
    Magiskでパッチするinit_boot.imgのみを解凍します。
  1. init_boot.imgをデバイスに転送
    エクスプローラ上でドラッグ&ドロップしてコピーしてもいいですし、adb push .\init_boot.img /sdcard/Download/などと転送してもOKです。
  1. Magiskでパッチを当てる
    転送したinit_boot.imgにMagiskでパッチを当てます。Magiskを起動しインストールを選び、パッチするファイルの選択をタップするとファイル選択になるので、init_boot.img を選ぶと自動でパッチが適用されます。
  1. パッチしたinit_boot.imgをPCに転送
    前項でパッチが当たったイメージはデバイスのDownloadフォルダにmagisk_patched-25203_JPU20.imgのような名前で保存されますので、それをPCに転送します。
  1. Bootloaderに再起動する
    adb reboot bootloader
  1. init_boot.imgをデバイスに焼く
    このとき注意したいのは、Pixel 7 / Pixel 7 Proではパッチしたイメージを焼くパーティションがinit_bootに変わっていることです。間違えるとブートループになる可能性もあるので気をつけてください。
    fastboot flash init_boot .\magisk_patched-****.img

普通に使うだけならvbmeta.imgを焼く必要はありませんが、あとでカスタムカーネルを焼いたりするかもという方は、やはり引き続き最初に

fastboot flash vbmeta vbmeta.img --disable-verity --disable-verification

しておいたほうがいいです。

すでにいくつかのカスタムカーネルが公開されていますが ( Despair Kernel, CleanSlate kernel, Kirisakura-Kernel, など)、いずれのカーネルも現状だとVerityとVerification両方を無効にしないと使用することができません。

開発者は少なくともVerificationについては無効にせずとも使えるようにしたいと考えているようですが、リリースまでにはしばらく時間がかかると思います。
ちなみにPixel 6向けのカスタムカーネルの場合、両方を無効にしても動作するものがリリースされるまで1~2ヶ月ほどかかったそうです。

また一度VerityとVerification両方を無効にした場合、ファクトリーイメージを使ってファームウェアを更新したら毎回必ずあらためて無効にする必要があります。
もし忘れたまま起動してしまうと、再度無効にするにはァクトリーリセットをする必要があるのでご注意ください。

参考URL

  1. 再起動
    無事にmagisk_patched-****.imgが焼けたらfastboot rebootで再起動します。これでMagiskによるRootが取得できているはずです。ひとまずお疲れさまでした!

まとめ

  • Magiskでパッチするのは従来のboot.imgではなくinit_boot.img
  • SafetyNetやPlay IntegrityもOK
  • その状態でもGoogle Payや銀行系のアプリ(住信SBIなど)も使えた

Bootloader UnlockおよびRoot化したAndroidデバイスでSafetyNetをパスする方法、決済アプリや銀行系アプリなどを使う方法については以下の記事も併せてご覧ください。

MagiskモジュールやLSPosedモジュールなどをインストールして便利に使う方法も近日中にまとめる予定です。

僕がPixel 7用に買ったアクセサリー

コメント

  1. おさとう より:

    vbmetaをflashせずにカスタムカーネルを焼くことは将来的にはできるんでしょうか?

  2. おさとう より:

    分かりやすく、とても丁寧にまとめてくださってありがとうございます!

    • かなで より:

      こちらこそ! コメントありがとうございました!
      分からないことがあればいつでもお気軽に!

タイトルとURLをコピーしました