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(追記あり)

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

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

追記(2023/07/31)

Googleにより穴がふさがれてしまったため、MEETS_STRONG_INTEGRITYをパスすることはできなくなりました。

追記(2023/07/21)

v2.4.0-MOD_2.0がリリースされています。

これによりMEETS_STRONG_INTEGRITYをパスすることが可能になりました!

追記6(2023/02/12)

本家に追従する形でUniversal SafetyNet Fix v2.4.0-MOD_1.0 がリリースされています。

追記5(2023/02/10)

Universal SafetyNet Fix v2.3.1-MOD_3.0 がリリースされています。

2023/01更新およびPlayシステムアップデート後にSafetyNetやGoogle Payの認証が外れるときがあったのですが、これで解決するかな…?🤔

追記4(2023/01/10)

Universal SafetyNet Fix 2.4.0にてPlay Integrity APIのチェックを通過できるようになりました。

追記3

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

追記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

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

追記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 を下げることで回避しているようです。

追記前

現時点では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. おさとう より:

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

    • かなで より:

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

  3. ke より:

    play integrity API checkerを使ってroot化後にチェックしたところ、
    MEETS_DEVICE_INTEGRITY
    がokにならずに✕になってしまいます。
    なにか対処法はあるでしょうか?
    また、✕であることによる欠点にはどのようものがあるでしょうか?

    • かなで より:

      コメントありがとうございます!

      YASNACでのCTS profile matchはどうなっていますか?
      こちらの記事をご参照いただき、Universal SafetyNet FixやShamikoなどを導入してから、再度チェックしてみてもらえますか?
      Google Play ストア/Google Pay/開発者サービスのデータを消して再起動する必要があるかもしれません。
      ✕の場合はGoogle Payが使えなくなると思います。

  4. ke より:

    CTS profile matchはfailになっています。
    ・magiskを隠す
    ・playサービスなどの再起動
    ・denylistを構築&アプリの追加
    ・再起動
    を行いましたが変わらずです。

    • かなで より:

      SafetyNetが通っていないようですね。
      MOD版のUniversal SafetyNet Fixはお試しになりましたか?
      お使いの機種はPixel 7シリーズでしょうか、もしMagiskのStableを使っている場合はCanaryも試してみるといいかもです。

  5. ketaketa より:

    とてもわかりやすく非常に助かります。

    質問があります。
    bootloaderアンロックでesim情報は消去されてしまうのでしょうか?
    アンロックでのesim情報消去有無が分からず躊躇しています。
    ご存知でしたらご教授いただきたいです。
    よろしくお願いいたします。

    • かなで より:

      コメントありがとうございます。

      結論から言えばeSIMはアンロックで消えることはないと思います。

      探してみたところAndroPlusさんのRakuten Miniをアンロックする記事にもそのような記述がありました。

      データが初期化され、再起動されればBootloader Unlockは完了です。なお、eSIMについては初期化しても完全に消去されるわけではないため、再発行の必要はありません。

      私は入手後すぐにアンロックしたためeSIM登録状態でのアンロックはしていませんが、アンロック時はファクトリーリセットがかかります。
      ROM焼きの際に何度かファクトリーリセットしたり fastboot -w などでデータパーティションをワイプしていますが、私の端末で今までeSIMが消えたことはありませんでした!

  6. ketaketa より:

    ご回答大変ありがとうございました。
    なるほど、esimは大丈夫そうですね。
    久しぶりにroot、magiskに挑戦してみます。
    有用な情報感謝いたします。

    • かなで より:

      eSIM自体はデバイスに残るはずですが、APNはたしか毎回設定し直していた気がします。
      Androidにも早くeSIMの転送などが実装されるといいですね。

      またなにかありましたらいつでもコメントなどいただければと思います!
      root化頑張ってください!

  7. おみそ より:

    わかりやすい内容、ありがとうございます。

    ひととおり紹介していただいた手順通り実施し、イメージ焼きも問題なく終了しているのですが、Rootが取れない状況に陥っております。

    原因として考えられるのは、初回のイメージを焼く際に自身の端末と違うビルド番号の
    イメージを一度焼いてしまったことです。
    なにか打開策等あればご助言お願いします。

    • かなで より:

      コメントありがとうございます。

      ご使用中のデバイスは何でしょうか?
      Pixel 7シリーズ以降はMagiskでパッチするファイルが init_boot.img に変更されていますので、もしかしたらそれが原因かもしれません。
      起動は問題なくでき、Magiskアプリでの状態がNGということですかね?

      初回に別ビルドのファクトリーイメージを焼いてしまったとのことですが、そのあと適正なものを再度焼いたのであれば問題ないと思われます。
      またイメージ焼きの際はスロットのAとB両方に焼いて置いたほうが無難です。

  8. おみそ より:

    かなで様

    コメントありがとうございます!
    使用端末はpixel7 proです。

    Magiskでinit_boot.imgにパッチを当てる→bootloaderで正しく焼ける→root取れてない といった感じです。

    rootは取れていないのにGPayはroot化されているから使えないと表示される始末…

    一度初期化して再挑戦してみます。

    • かなで より:

      むむ、それは謎ですね…パッチを当てたほうのスロットとは別のスロットで起動してしまっているのかな…?🤔
      以前MagiskからMagisk Deltaに変更してみたときに、初期化せずやったらマネージャ上はRootが外れた状態になってしまったことがありますが、今回はそのパターンではなさそうですね。

      もし初期化しちゃっても大丈夫であれば、ファクトリーリセットかけて焼き直すのが一番確実だと思います!
      頑張ってください!

  9. ketaketa より:

    以前esimについて質問させていただきましたketaketaです。
    root化でesimが消去されることはなさそうだとの情報をいただき久しぶりにroot化しました。

    結論から言うとesimは全く消去されません!(^^)!
    root化していろいろ設定していたら挙動がおかしくなりfactory imageでflash-all.bat初期化、さらにPixelFlasherで2回WIPE all dataにて焼き直しましたがesimは問題ありませんでした。
    久しぶりのroot化で最初は戸惑いましたがすべてのアプリで問題なく起動できるようになりとっても快適です。
    有益な情報大変ありがとうございました。

    • かなで より:

      ご報告ありがとうございます!
      うまく設定できたようでなによりです。
      最近は日本語コミュも活発になってきてるので、もっと盛り上がってくれるといいですね!

  10. 匿名 より:

    7a発売に伴い最新のファクトリーイメージが公開されたので7ProにMagiskの導入を考えているのですが、こちら非rootのbootloader Lock状態に戻すことは可能なのでしょうか?

    • かなで より:

      初期状態(Bootloader Lock状態)に戻すことはもちろん可能です!
      一番簡単な方法だとGoogleのFactory Image配布ページからブラウザを使って初期化&イメージを焼く方法が挙げられると思います。
      「Lock Bootloader」という項目がありますので、そちらにチェック入れれば大丈夫です!

    • 匿名 より:

      ありがとうございます、試しにMagiskを敢えてアンインストールせずにAndroid Flash Toolで最新ビルドをフラッシュしてみましたが無事元の状態に戻りました、安心してroot取得ができます…!

    • かなで より:

      無事に初期状態に戻せたようでよかったです!

  11. rk より:

    ピクセル 7aに間違えてinit_boot.imgをboot.img に焼いてしまいました。
    ブートループしています。

    ファクトリーイメージをDL後flash-all.batを実行してもうまくいかないです。

    何か対処法ありますでしょうか?

    • かなで より:

      間違えたパーティションだけ上書きで焼けば問題ないはずです。
      今回であれば正しいboot.imgをbootパーティションに焼くだけですね。
      (私も間違えて焼いたことあります…笑)

      ファクトリーイメージをすべて焼き直したなら正常に起動するはずですが、もしかしたら再起動時にスロットが変わっているかもしれません。
      一度ファクトリーイメージを焼いたあと、fastbootで
      fastboot set_active other
      fastboot reboot bootloader

      としてスロットを切り替えて、再度ファクトリーイメージを焼いてみてください。

    • rk より:

      返信ありがとうございます!

      boot.imgを上書きしたのですがやはり起動しません。。。
      init_boot.imgも上書きしました。
      スロットを変えても変わりませんでした。

      flash-all.batを起動してこのようなエラーが起きます。
      fastboot: error: ANDROID_PRODUCT_OUT not set

      リカバリーモードから工場出荷の状態へリセットもエラーを吐きます。
      Wipe data/factory reset

      Error recovery opne file : metadeta/ota :no such file or directory

      ファクトリーイメージを手動で場合 どうすればいいでしょうか?
      自分ももうちょっとggって来ます、、、

    • かなで より:

      ANDROID_PRODUCT_OUT に関しては環境パスとかそういう話ですかね?
      ファクトリーイメージを焼けないことはないと思うので、どこかで手順が違っているか、あるいはPCにドライバが入っていないとか認識されていないとか、そういう基本的なところの可能性もあります。
      Chromeなどのブラウザでファクトリーイメージを焼き直すこともできるので、それも試してみるといいかもしれませんね。

    • rk より:

      ご丁寧にありがとうございます!
      今回は諦めようと思います、、
      Androidについてもうちょっと勉強して出直します、

    • rk より:

      ご報告、
      Chrome上からファクトリーイメージ焼き付けでうまくいきました!!

      ほんと今日はありがとうございました!
      懲りずにroot化しようと思います笑

    • かなで より:

      それはよかったです!
      ブラウザでファクトリーイメージ焼けるなんて良い時代…!!
      ぜひ快適なAndroidライフをお送りください、またなにかありましたらお気軽にどうぞ!

  12. うゆゆ! より:

    初めてのコメントで質問失礼します。pixcel 7 pro android13 (TQ2A.230505.002 現時点で最新)のものをroot化したいのですが、正しいfactory image の init_boot.img をパッチして焼いても起動できず、fastboot画面から抜けれません。。platfarm toolsのバージョンも最新だと焼けない現象があるらしく、それも考慮して旧バージョンでflashしてもうまくいきませんでした。また、起動のたびにthe bootloader unlokedと出るのでbootloader unlockはできています。
    そのままだと普段困るので一旦はboot.imgを焼いて元に戻しています。
    お時間いただけると助かります!

    • かなで より:

      Magiskでパッチしたinit_bootを、同じくinit_bootパーティションに焼いても起動ができないということですね。
      私はPixel 7ですが5月イメージでRoot取れてるので、どこかで手順が違っているかもしれません。
      まずはスロットの変更をして焼いてみること、あとはデータをワイプしてみてはいかがでしょうか?
      スロットを変更して別スロットにもFactory Imageを焼く手順はコメントの少し上のほうに、データのワイプはリカバリか fastboot -w でもできますのでお試しください。

  13. うゆゆ! より:

    回答ありがとうございます!
    すごいしょうもないミスでした。。ずっとfastboot flash bootでやってましたね。。
    init_boot.ingをパッチ当てるってだけだと思っていました。
    無事root化できたので助かりました!ありがとうございます!

    • かなで より:

      そういうミスありますあります!笑
      コマンド補完してたらずっと間違えたやつ叩いてたりとか…
      ともあれ無事にRoot取れたみたいでよかったです!
      お疲れさまでした!

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