2016年12月31日

Android 7.0以降でのsystemパーティション書き換え

あぶすとらくと

・Android 7.0以降の環境では、systemパーティションの書き換えにはdm-verityの無効化が必要


本論

Androidでsystemパーティションにapkやら何やらを追加したい場合、端末のroot化が一般的かと思うのですが、私の場合はrootを取らずにrecoveryから書き込むってのをよくやっていました。(もちろんTWRPなどのカスタムリカバリが必要)

しかしAndroid7.0で同様の手順を行ったところ、recoveryでは問題なく書き込まれているように見えるファイルが、通常boot時には書き込まれていないという現象に遭遇。それもrecoveryに戻るとちゃんと書き込まれたままなので何だかよく分からない。

これ、どうやらAndroid7.0で適用が厳格化されたセキュアブートの影響のようです。

Google Developers Japan: セキュアブートの厳格な適用とエラー訂正
https://developers-jp.googleblog.com/2016/08/secure-boot.html

dm-verityさんがパーティションの改変を検出して、元の状態に復旧してしまっているご様子。

さてこの状況を回避するために、私はdm-verityを無効化したbootパーティションを適用しています。
nexus 5Xだとxda-developersの以下のスレッドで公開されていました。

Modified boot.imgs for 5X (Nougat)-Disable f… | LG Nexus 5X
https://forum.xda-developers.com/nexus-5x/general/modified-boot-imgs-android-n-t3495169

使うのは、
 forced encryption disabled
の方ではなく、
 forced encryption disabled & dm-verity disabled
の方ですね。

公式ROMの適用からsystem書き換えまでの手順は以下のような感じです。

1.nexus公式のROM imageを適用
2.端末が起動してきたら電源をOFFしてbootloaderを起動
3.ダウンロードしてきたdm-verity無効なbootをflash
4.userdataとcacheのフォーマット(force encryption disabledの対応)
5.TWRP等のカスタムリカバリを起動
6.systemパーティションの書き換え

ちなみにrootを取得してしまってもよいのであれば、

1.nexus公式のROM imageを適用
2.端末が起動してきたら電源をOFFしてbootloaderを起動
3.TWRP等のカスタムリカバリを起動
4.SuperSUの適用
5.systemパーティションの書き換え

これでもOKです。(SuperSUがdm-verity無効化もしてくれているようです)

ただ、私が以前に試したとき(7.0 betaの頃?)には、3のTWRP起動時にパーティションの暗号化解除パスワードを求められてTWRPがちゃんと起動しなかったんですよね。なのでforced encryption disabledなbootに置き換えてからSuperSU適用して…という流れになっていたのですが、現時点ではその必要はないようです。(その頃はdm-verity disabledなbootが公開されていなかったので、system書き換えにroot化は必須でした)

[updated 8-27-16] [Decrypted] [Modified Boot… | LG Nexus 5X
https://forum.xda-developers.com/nexus-5x/general/4-17-16-t3360574

先人の偉大なる成果に感謝。


posted by 月水和尚 (とも) at 21:30 | Comment(0) | TrackBack(0) | Android
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック