2017年8月27日日曜日

完全文鎮と化したFireタブレットのリカバリ その2



続きです。

先の記事で説明した通り、adbコマンドもfastbootコマンドもリカバリも使えないFireでも、preloaderからイメージファイルを焼き直せば復活が可能です。本記事ではその手順をご紹介します。


おおまかな手順は以下の通り。


1. preloader用のドライバを導入してDownload Modeに入る
2. 端末の全てのパーティションアドレスを読み込む
3. バイナリエディタを使ってuboot領域、recovery領域、tee1領域のアドレスを識別する
4. 識別したアドレスに正しいイメージファイルを書き込む
5. TWRPを起動して正しいOSを焼く

では詳しい説明に入ります。


必要なもの一覧

aftv2-toolsのダウンロード
正しいブートイメージのダウンロード
(下の方にある453_padded_img.zipってヤツ)
Pythonのインストール
Hex editorのインストール


1. preloader用のドライバを導入してDownload Modeに入る


まずはこちらのサイトからaftv2-toolsというFire TV用のToolkitをダウンロードして下さい。もともとFire TVのroot化に使うToolkitですが、OS依存のToolkitなのでFireでも問題なく転用できました。ダウンロードしたら好きなところに展開しておきましょう。


その中にwin-driversというフォルダがあります。そこに入っているのがpreloader用のドライバです。ここからは、これをインストールする手順を説明します。
ただし、このドライバは無署名のドライバなので、通常はセキュリティブロックがかかってインストールすることが出来ません。そのため、無署名でもインストールできるモードでPCをリブートする必要があります。ここらへんは割愛するので各自調べてください。


まずはFireをPCに接続しましょう。ブートループして切断・接続を繰り返すと思いますが、デバイスマネージャで監視すると、接続されている数秒間はpreloaderが認識されていると思います。それを右クリックし、ドライバの更新を行ってください。ドライバのファイルにはinfファイルが3つ入っていると思いますが、私はmdmcpq.infで上手くいきました。



これでドライバの導入は終了です。


ただし、ドライバを導入しただけでは、ただFireを接続しても依然ブートループします。どうやらDownload Modeに入るためには、PCからpreloaderに「PCと接続してDownload modeに入れ」と指令することが必要なようです。
ここからは、Download Modeへの入り方を簡単に説明します。


Download Modeに入るためには、aftv2-toolsに同梱されている「handshake.py」を使うのですが、拡張子から見てもわかるように、こちらのプログラムはPythonというプログラミング言語で書かれていますので、Pythonをインストールする必要があります。公式サイトからダウンロードし、インストールを行ってください。


Pythonをインストールしたら、これからの操作に必要なモジュールをPythonにインストールします。コマンドプロンプトに以下の2つを入力して実行しましょう。

python -m pip install pyserial
python -m pip install py2exe

プログレスバーのようなものが出てインストールが完了するはずです。もしエラーが出れば、コマンドの「Python」の部分を「Python3」に変えれば上手くいくかもしれません。


ここまでの操作が終わったら、先述のhandshake.pyをFireを接続する前に起動させておきます。コマンド画面にwaiting for preloader...と表示されたらFireを接続して下さい。Download Modeに入ることが出来ます。






2.端末の全てのパーティションアドレスを読み込む


いわゆるHard Brick(完全文鎮)状態のFireでは、ブートローダーが死んでいるか、ブートローダーが生きていても起動させるモノが存在しません。よって、復活させるためにはひとまず正しいリカバリとブートローダーを上書きしてやる必要があります。


TWRPなどのカスタムリカバリがあれば、書き込むべきパーティションを自動で判別して適切な場所にイメージを書き込んでくれるので楽なのですが、この状態の文鎮になるとそういう便利な機能なんて生きてるはずもありません。パーティションのアドレスを全て読み込み、リカバリ領域とブート領域がどれか識別し、そこに正しいイメージを焼く…という手順を踏まなければなりません。


幸いなことに、aftv2-toolsの中にパーティションの読み込みをするプログラムは準備されています。それを実行すれば読み込みはすぐに終わります。まあ、あとの識別が大変なんですけどね…


aftv2-toolsを開いたら、そこでコマンドプロンプトを開いてください。

開いたら次のコマンドを実行。ターミナル画面がすごい速度で進むのが分かると思います。


read_mmc.py  0x0000000  0x1000  0x0000000.part
read_mmc.py  0x0080000  0x1000  0x0080000.part
read_mmc.py  0x0100000  0x1000  0x0100000.part
read_mmc.py  0x0180000  0x1000  0x0180000.part
read_mmc.py  0x0200000  0x1000  0x0200000.part
read_mmc.py  0x0280000  0x1000  0x0280000.part
read_mmc.py  0x0300000  0x1000  0x0300000.part
read_mmc.py  0x0380000  0x1000  0x0380000.part
read_mmc.py  0x0400000  0x1000  0x0400000.part
read_mmc.py  0x0480000  0x1000  0x0480000.part
read_mmc.py  0x0500000  0x1000  0x0500000.part
read_mmc.py  0x0580000  0x1000  0x0580000.part
read_mmc.py  0x0600000  0x1000  0x0600000.part
read_mmc.py  0x0680000  0x1000  0x0680000.part
read_mmc.py  0x0700000  0x1000  0x0700000.part
read_mmc.py  0x0780000  0x1000  0x0780000.part
read_mmc.py  0x0800000  0x1000  0x0800000.part
read_mmc.py  0x0880000  0x1000  0x0880000.part
read_mmc.py  0x0900000  0x1000  0x0900000.part
read_mmc.py  0x0980000  0x1000  0x0980000.part
read_mmc.py  0x0a00000  0x1000  0x0a00000.part
read_mmc.py  0x0a80000  0x1000  0x0a80000.part
read_mmc.py  0x0b00000  0x1000  0x0b00000.part
read_mmc.py  0x0b80000  0x1000  0x0b80000.part
read_mmc.py  0x0c00000  0x1000  0x0c00000.part
read_mmc.py  0x0c80000  0x1000  0x0c80000.part
read_mmc.py  0x0d00000  0x1000  0x0d00000.part
read_mmc.py  0x0d80000  0x1000  0x0d80000.part
read_mmc.py  0x0e00000  0x1000  0x0e00000.part
read_mmc.py  0x0e80000  0x1000  0x0e80000.part
read_mmc.py  0x0f00000  0x1000  0x0f00000.part
read_mmc.py  0x0f80000  0x1000  0x0f80000.part
read_mmc.py  0x1000000  0x1000  0x1000000.part
read_mmc.py  0x1080000  0x1000  0x1080000.part
read_mmc.py  0x1100000  0x1000  0x1100000.part
read_mmc.py  0x1180000  0x1000  0x1180000.part
read_mmc.py  0x1200000  0x1000  0x1200000.part
read_mmc.py  0x1280000  0x1000  0x1280000.part
read_mmc.py  0x1300000  0x1000  0x1300000.part
read_mmc.py  0x1380000  0x1000  0x1380000.part
read_mmc.py  0x1400000  0x1000  0x1400000.part
read_mmc.py  0x1480000  0x1000  0x1480000.part
read_mmc.py  0x1500000  0x1000  0x1500000.part
read_mmc.py  0x1580000  0x1000  0x1580000.part
read_mmc.py  0x1600000  0x1000  0x1600000.part
read_mmc.py  0x1680000  0x1000  0x1680000.part
read_mmc.py  0x1700000  0x1000  0x1700000.part
read_mmc.py  0x1780000  0x1000  0x1780000.part
read_mmc.py  0x1800000  0x1000  0x1800000.part
read_mmc.py  0x1880000  0x1000  0x1880000.part
read_mmc.py  0x1900000  0x1000  0x1900000.part
read_mmc.py  0x1980000  0x1000  0x1980000.part
read_mmc.py  0x1a00000  0x1000  0x1a00000.part
read_mmc.py  0x1a80000  0x1000  0x1a80000.part
read_mmc.py  0x1b00000  0x1000  0x1b00000.part
read_mmc.py  0x1b80000  0x1000  0x1b80000.part
read_mmc.py  0x1c00000  0x1000  0x1c00000.part
read_mmc.py  0x1c80000  0x1000  0x1c80000.part
read_mmc.py  0x1d00000  0x1000  0x1d00000.part
read_mmc.py  0x1d80000  0x1000  0x1d80000.part
read_mmc.py  0x1e00000  0x1000  0x1e00000.part
read_mmc.py  0x1e80000  0x1000  0x1e80000.part
read_mmc.py  0x1f00000  0x1000  0x1f00000.part
read_mmc.py  0x1f80000  0x1000  0x1f80000.part
read_mmc.py  0x2000000  0x1000  0x2000000.part
read_mmc.py  0x2080000  0x1000  0x2080000.part
read_mmc.py  0x2100000  0x1000  0x2100000.part
read_mmc.py  0x2180000  0x1000  0x2180000.part
read_mmc.py  0x2200000  0x1000  0x2200000.part
read_mmc.py  0x2280000  0x1000  0x2280000.part
read_mmc.py  0x2300000  0x1000  0x2300000.part
read_mmc.py  0x2380000  0x1000  0x2380000.part
read_mmc.py  0x2400000  0x1000  0x2400000.part
read_mmc.py  0x2480000  0x1000  0x2480000.part
read_mmc.py  0x2500000  0x1000  0x2500000.part
read_mmc.py  0x2580000  0x1000  0x2580000.part
read_mmc.py  0x2600000  0x1000  0x2600000.part
read_mmc.py  0x2680000  0x1000  0x2680000.part
read_mmc.py  0x2700000  0x1000  0x2700000.part
read_mmc.py  0x2780000  0x1000  0x2780000.part
read_mmc.py  0x2800000  0x1000  0x2800000.part
read_mmc.py  0x2880000  0x1000  0x2880000.part
read_mmc.py  0x2900000  0x1000  0x2900000.part
read_mmc.py  0x2980000  0x1000  0x2980000.part
read_mmc.py  0x2a00000  0x1000  0x2a00000.part
read_mmc.py  0x2a80000  0x1000  0x2a80000.part
read_mmc.py  0x2b00000  0x1000  0x2b00000.part
read_mmc.py  0x2b80000  0x1000  0x2b80000.part
read_mmc.py  0x2c00000  0x1000  0x2c00000.part
read_mmc.py  0x2c80000  0x1000  0x2c80000.part
read_mmc.py  0x0400000  0x4000              0x00a.part
read_mmc.py  0x0408000  0x4000        0xPRO_INFOa.part
read_mmc.py  0x0500000  0x4000             0xPMTa.part
read_mmc.py  0x0900000  0x1000            0xTEE1a.part
read_mmc.py  0x1300000  0x1000           0xUBOOTa.part
read_mmc.py  0x0780000  0x4000              0x00b.part
read_mmc.py  0x0788000  0x4000        0xPRO_INFOb.part
read_mmc.py  0x0880000  0x4000             0xPMTb.part
read_mmc.py  0x0c80000  0x1000            0xTEE1b.part
read_mmc.py  0x1680000  0x1000           0xUBOOTb.part
read_mmc.py  0x0a00000  0x4000              0x00c.part
read_mmc.py  0x0a08000  0x4000        0xPRO_INFOc.part
read_mmc.py  0x0b00000  0x4000             0xPMTc.part
read_mmc.py  0x0f00000  0x1000            0xTEE1c.part
read_mmc.py  0x1900000  0x1000           0xUBOOTc.part


コマンドが一通り終わると、拡張子が.partのファイルが大量に生成されます。それがあなたの端末のパーティション・アドレスの一覧です。


3. バイナリエディタを使ってuboot領域、recovery領域、tee1領域のアドレスを識別する


最難関です。


生成したpartファイルは通常のテキストエディタでは閲覧できないので、対応するエディタをインストールしてそこから閲覧します。エディタはこちらのサイトからどうぞ。


おそらく、ほとんどすべてのファイルは意味不明な文字列で埋め尽くされているか、あるいは全て空白かのどちらかだと思います。しかしたまに有意な英単語の文字列が入っているアドレスがあります。そこが特定のパーティションのアドレスなので、そこを指定して正しいイメージファイルを焼き焼きしてあげればいいワケです。今回だと、UBOOT領域(ブートローダー)、recovery領域(リカバリ)、Tee1領域(セキュリティ)の3つに上書きします。


しかし厄介なのが、このアドレスは機種によって微妙に(というか結構)異なります。私と同一機種で同一OS、つまりFireOS5.1.2を積んだFire HD7(第4世代)なら下と同じアドレスだと思いますが、機種が異なったり、OSがメジャーアップデート前/後のものだとアドレスが異なってくる可能性が高いです。
さらに厄介なことに、間違ったアドレスにイメージを焼くと、イメージが競合したりして今度こそ修復不可能な文鎮になってしまう恐れがあります。よって、ここから先は私のアドレスを受け売りして実行するのではなく、自分の端末に合ったアドレスに脳内変換してから操作を実行してください。



これがUBOOT領域です。LKと表示されているのがわかりますが、このLKとはLittle Kernelの略で、Fireが採用しているブートローダーの一種です。Fireの場合、ダウングレードによる文鎮化はここのコードの不整合によって起こることがほとんどです。
私の場合、アドレス0x1300000にありました。




これがrecovery領域です。Androidと書いてあるのが分かると思いますが、文鎮化前にカスタムリカバリを導入していた場合は、AndroidではなくCertISWなどと表示されているかもしれません。
私の場合、アドレス0x1b80000にありました。




これがboot領域です。UBOOT領域と何が違うのかよくわからないのですが、おそらくブートローダーの次に起動するkernelのようなものだと思います。今回はここに何かを上書きする必要はないのですが、ややこしいのは、ここもrecovery領域と同じく、文字列「Android」から始まるということ。
ただ、このboot領域はrecovery領域よりも先に読み込まれるものであるため、基本的にrecovery領域よりも前のアドレスに存在します。すなわち、どちらが先のアドレスにあるかでrecovery領域とboot領域を識別することが出来ます。私の場合はアドレス0x1380000にありました。




これがTee1領域です。Tee1はDRMキーなどの端末固有の情報が格納されている領域で、簡単に改竄されないようにOSとは別の領域に実装されています。つまり端末の最も最下層にあるセキュリティ・システムのようなものでしょうか。理由はよくわからないのですが、Fireの文鎮修理の際にはここも焼き直さないとダメみたい。
私の場合はアドレス0x0900000にありました。



以上が識別すべきパーティションのアドレスです。


4. 識別したアドレスに正しいイメージファイルを書き込む


ここは割と楽です。
aftv2-toolsのファイルにダウンロードしたイメージファイルを移動します。全て展開してファイルから取り出しておくこと。


次に、先と同じようにaftv2-toolsでコマンドプロンプトを開き、下のアドレスを入力してエンター。(xは自分のtee1のアドレス、yはUBOOTのアドレス、zはrecoveryのアドレスで置き換えてください。)



write_mmc.py xxxxxxxxx 453p_tee1.img
write_mmc.py yyyyyyyyy 453p_uboot.img
write_mmc.py zzzzzzzzz 453p_twrp.img


私は1時間ほどで終わりましたが、PCの処理性能によっては数時間かかるかもしれません。とにかくかなり時間はかかりますので、間違ってもPCやFireの電源を落とすことのないよう。


5. TWRPを起動して正しいOSを焼く

ここまでの操作が全て正しく行われていれば、TWRPが起動します。一旦電源を押し続けて完全に電源を落としてから、電源+ボリュームアップを長押しでTWRP起動。ボリュームダウンだったかも。起動すれば見事文鎮復活です。そこから先は煮るなり焼くなりお好きにどうぞ。


正直この記事はここで終わりでもいいのですが、まあ付録+備忘録としてRootの取り方も書いておきます。


なお、TWRPの使い方は他のサイトで紹介されているので詳しくは書きません。


まずは念のためCacheとDalvik Cacheを消去。

ここからは、まず少し古いFireOS4.5.3を焼きます。(古いOSの方がRootが取りやすいからというのもありますが、先ほど焼いたブートローダーがそもそも4.5.3用のものなので他のOSを焼いても起動しないと思います。あとあと5.3.1に戻すのでご心配なく。)


まずは、XDAのここのサイトから4.5.3のROMを入手してください(ついでに、後で使う5.3.1のROMもダウンロードしておきましょう)。ROMは拡張子がbinになっていると思いますので、TWRPが認識できるようzipにリネーム。

そうすればいつものようにTWRPに送ってインストールすればFire OS4.5.3なFireが起動します。
なお、ネットに繋いだまま放っておくと勝手にOTAアップデートが始まってしまいますので、Rootが必要ならWi-Fiは切っておきましょう。初めのユーザー情報も入力しなくていいです。Rootが要らない場合はそのままOTAでアップデートしちゃってください。


次はKingRootでrootを取ります。セキュリティが不安という方もいらっしゃるかもしれませんが、どうせここからまたROMを焼き直すワケですから、初回の起動で個人情報を入力していなければ問題ないと思います。
kingrootはいろんなサイトで出回っていますので、ウイルスのなさそうなサイトから落としてきてインストール。そこからはアプリの指示に従えばRootがすぐに取れるはずです。


Rootが取れたら、Root権限を維持したまま最新版のROMを焼くため、再びTWRPをインストールします。これは、Fireは、仕様上ROMを焼くたびにリカバリがデフォルトのものに焼き替えられてしまうためです。
こちらのサイトからTWRPをインストールするバッチファイルを入手し、展開してから1_FIRE_HD_4TH_GEN_TWRP.batを実行しましょう。端末側でスーパーユーザーリクエストが出ると思いますので、Allowを選択。これでTWRPがインストールされます。


TWRPを起動したら、最新版のROMを焼きます。
まずは必要なファイルを端末に転送してしまいましょう。必要なものは以下の通りです。

先ほどダウンロードした5.3.1なROM
5.3.1用のブートローダー
SuperSU(apkではなくzip)

転送したら上から順番にインストールしていきましょう。Gappsもこの時入れられればラクなんですが、私はエラーが出てインストール出来ませんでした。Playストアはあとでもインストール出来るので妥協。


これでRoot権限取得済みのFireOS5.3.1なFireの完成です。

2017年7月30日日曜日

完全文鎮と化したFireタブレットのリカバリ その1


こんにちは。



もう2年も前の話になりますが、Wi-Fiルーターを契約した時に、AmazonのFire HD7タブレットが無料で手に入りました。無料でくれるわけですからハイスペックなはずもなく、RAM1GB、1.5+1.2Ghzクアッドコアというローエンドタブレットで、初期状態ではplayストアさえ使えないというポンコツっぷり。


まだAndroidに詳しくなかった頃ですので、3日3晩悪戦苦闘してPlayストアを導入しました。adbって何、recoveryって何…そんなレベルでしたね。今では考えられないことですが、root取りも悪名高いkingrootを使用しました。良い子はマネしないでね。


そんなこんなで紆余曲折の末、Playストアとroot権限のおかげでこのタブレットもかなり便利になったのですが、1年ほど使ってみるとやはりOSがfireOSでは限界があることに気づきます。Androidにも詳しくなったし素のAndroidに近いカスタムROMを焼きたい、そう思っていろいろチャレンジしてみました。



出来上がったのは文鎮でした。



rootは取ってあるのでTWRPを導入するのは簡単だったのですが、stockなOSをwipeしていざカスタムROMを焼こうとするとエラー。後になってわかりましたが、どうやら私が焼こうとしていたのは第5世代Fire用のカスタムROMで、まあそりゃエラー吐くわなといった感じです。



しかしTWRPのバージョンが古いせいだと思った私は、何を思ったかOSの復元もバックアップイメージの作成もせずに直接リカバリを焼き直します。そしてここでも似たようなミスをやらかすワケです。私が焼いたのは第3世代Fire HD7用のリカバリイメージ(私の機種は第4世代)で、当然機種が異なるわけですからリカバリなんて起動するはずもありません。




つまり私はOSとリカバリを同時に吹っ飛ばしてしまったというわけです。



電源を入れてもAmazonロゴでブートループ。人生初の文鎮が出来上がりました。



さて、話が逸れますが、Fireタブレットの文鎮化はふつうソフト・ブリック、半文鎮というもので、アプリケーションの競合やOSの不具合によって生じるものです。この場合は、リカバリからファクトリーリセットをかけるか、adb sideloadでROMを焼き直せば復活します。これは他の記事でもよく書かれている内容でしょう。



しかし私のFireはOSどころかリカバリも存在しないワケですから、本体だけではどうしようもありません。これは困った。本体操作が出来ないのならばPCに繋げば何とかなるだろうと高をくくっていたら、PCに繋いでも認識と切断を永遠に繰り返しています。認識すべきOSが存在しないのですから当然と言えば当然ですが、そのためadbコマンドはおろかfastbootコマンドすら使えません。



ハード・ブリック、完全文鎮の完成です。



しかし諦めてはいけない。「Amazonロゴでブートループ」ということは、Amazonロゴを表示させるだけの能力はまだ生きているということです。そしてPCに繋ぐと一瞬だけ認識されるということは、OSやリカバリが無くてもとりあえず認識される何かが存在するということです。



そこで、Fireを接続したときの挙動をデバイスマネージャで監視してみると、一瞬だけ認識されるのは「mt65xx preloader」というモノでした。名前から察するに、おそらくブートローダーよりも前に起動して準備をする領域なのでしょう。



いろいろ調べてみたところ、このpreloaderはMediaTek製のSoCを積んだタブレットにのみ実装されている領域のようです。そして専用のドライバを導入したPCとpreloader状態の端末を接続すると、Download Modeという特別なモードになる、とのこと。



さあ希望が見えてきました。このDownload Modeは端末のパーティション(領域)を指定するとイメージファイルを直接焼くことが出来るモードで、これを使って正しいリカバリイメージを焼き直せば復旧が可能です。
次の記事ではその手順を紹介します。




あとで知ったことですが、FireOS5.3.1から5.1.2に、5.1.2から5.0.xにダウングレードした時に出来る文鎮もこれで修復が可能です。この文鎮はブートローダーの不整合によって生じるものですが、このDownload Modeはブートローダーが起動する前の段階で起動するモードです。つまりこのpreloaderを破壊するようなマネをしない限り、ブートローダーを吹っ飛ばそうがリカバリを吹っ飛ばそうが、Fireは文鎮修復が可能ということです。修復の手順はそれなりに煩雑になりますがね。





2017年7月17日月曜日

Xperia Z3のroot権限取得+Android6.0化


こんにちは。

私が普段メインで使っているスマホのXperia Z3ですが、なんとau版のみAndroid5.0.2までしかアップデートが降ってきません。グローバル版はもちろん、同じ国内キャリアのdocomo版ですらAndroid6.0.1までアップデートが降ってくるというのに…。

というわけで、無理やりau版のZ3(SOL26)にAndroid6.0.1を焼いてみました。その過程でついでにroot権限も取得しましたので、備忘録代わりに書いておきます。ネット上では、Android4.4にダウングレードしたりする方法が紹介されていたりしますが、そんな面倒くさいことは一切不要で、既存の内部データも消えません。

2017年最新の方法です。2つの端末で成功を確認しました。

なお、この方法は海外版のROMを焼いてAndroidをアップグレードすることが最終目標となりますが、海外版のROMにはテレビ(ワンセグ/フルセグ)機能、赤外線通信機能、NEC、フェリカは実装されていません。つまりこの方法でAndroidをアップグレードした場合、前記の機能は全て使えなくなってしまいます。したがって、スマホをICカードとして使用している方や、(あんまりいないと思うけど)テレビ視聴に使っている方は多少古くともAndroid5.0で甘んじた方が吉かと思います。
ハード的にはテレビアンテナやフェリカは実装されているので、海外版のROMでもソフト面をいじれば使えるようになると思っている方もいるかもしれませんが、単にテレビやNFCのアプリのapkファイルやドライバを移植するだけでは動作しません。ハードとソフトを紐づけるフレームワークが実装されていないので当然といえば当然ですが…もともと、いわゆるガラスマ機能の使用は想定されていないROMですので、変にいじらないで我慢しましょう。(NFCだけは設定画面にトグルが表示されるのでいじればなんとかなる、かも。でもやめといたほうがいい)



いろいろ準備するもの


①adb環境を整える


adbはAndroid端末にPCからコマンドを出すために必要なもので、これがないと話になりません。こちらのサイトなどにadb環境の構築について詳しく書かれていますので、参照してください。



②必要なソフトウェアのダウンロード


1.Flashtool


Xperia専用のROM焼きツールです。
ちらのページからダウンロードして下さい。ちなみに過去のとあるバージョンでは、FlashToolの不具合が原因で文鎮化したという話がありますので、必ず最新版かそれに近いものをインストールすること。



2.PRFcreater


prerootedと呼ばれるzipファイルを作成するソフトウェアです。root権限を取得した端末はsystem領域が改変されているため、通常のOTAアップデートをしようとするとエラーが発生してしまいます。一方で、FlashToolからアップデート後のROMを焼くと、せっかく取得したroot権限や導入したカスタムリカバリが失われてしまいます。

そこで使うのがこのprerootedというzipファイルで、要するにROMとSuperSUとカスタムリカバリをまとめてくっつけた、「既にroot化されているアップデート後のROM」です。これをカスタムリカバリから焼くことで、root権限やカスタムリカバリを維持したままアップデートが可能です。


追記:XDAで出来合いのprerootedファイルを公開されている方がいましたので、自分でprerootedを作らなくても良くなりました。よって、PRFはインストールする必要は無くなりましたが、これからもXperiaを開発する場合は入れておいて損はないソフトウェアです。




③必要なファイルのダウンロード



1.D6603の23.5.A.0.575のftfファイル


ftfファイルとはFlash Tool Fileの頭文字で、いわばXperia専用のファームウェアファイルです。
root化に使うrootkitはキャリア版のROMには対応しておらず、また23.5.A.0.575なビルドにしか対応していないため、こちらのサイトからグローバル版Z3(D6603)の23.5.A.0.575なftfファイルをダウンロードして下さい。

ちなみに、このftfを焼いた時点でAndroid6.0へのアップグレードは完了します。ここから下はroot取得+サムシングのためのファイルです。




2.ワンクリックrootkit


キューブキューブさんがこちらのドライブで公開されています。いつも便利なツールを作成して下さるキューブキューブさんには毎度感謝です。



3.カスタムリカバリ導入ツール



ただroot権限を取得したいだけならここからは行わなくて構わないのですが、昔からXperiaには、root権限を使ってsystemを改変すると強制的に端末をリブートさせるricというプログラムがOSに組み込まれているため、ricを無効化しないとroot権限を取った意味がありません。
また、rootkitが使える23.5.A.0.575のファームウェアはD6603の最新ファームウェアではありませんので、最新ファームウェアをrootを維持したまま焼きたいという方もいらっしゃるかと思います。
ricの無効化と最新ファームウェアへのアップデートを行うためには、カスタムリカバリを導入する必要があります。

Z3はワンクリックでカスタムリカバリを導入できるツールをキューブキューブさんが公開されています。有難い!
こちらのドライブからダウンロードできます。



4.23.5.A.1.291のprerootedファイル


グローバル版Z3(D6603)の最新ビルドは23.5.A.1.291です。23.5.A.0.575のままだとアップデート通知が鬱陶しい(そのままアプデしようとすると当然エラー吐かれる)うえに、アップデートしないとSTAMINAモードが実装されないので、最新版のファームウェアを先述のprerootedの形で焼きます。本来はPRFcreaterで自作しなければなりませんが、親切な方がXDAにアップロードして下さっているのでこちらのサイトから落とせます。




手順


1.FlashToolでD6603のftfを焼く


FlashToolの基本的な使い方はここでは触れませんので、他のサイトを参照してください。

Excludeは、AMSSから始まる3つの項目、Fotakernel、Partitionチェックを入れてFlashして下さい。MISK TAの項目は全てにチェックを入れて下さい。ここを間違えると文鎮化のリスクがぐっと高まります。
CONTENTSの枠にboot_delivery, cache, elabel, kernel, systemの5つが表示されていればOKです。

ちなみに、ROM焼きの際はエラー防止のため内部データを全てwipe(消去)する必要があることが多いのですが、この方法の場合wipeは必要ありませんでした。アップグレードの際は必要ないようです。

全て確認したらFlashを開始してください。かなり時間がかかりますが、焼き終わってブートをかければ、Android6.0が起動するはずです。ここでブートループすることはおそらくないと思いますが、もしそうなった場合はもう一度焼き直してみるか、内部データを全てwipeしてから焼き直せば上手くいくでしょう。ブートループの際は電源ボタンとボリュームアップ長押しで強制終了できます。

ここからはroot化+最新ビルドへのアップデートの作業となります。



2.rootkitでroot化


ダウンロードしたrootkitを展開し、中にあるバッチファイルを実行してください。1回で成功するとは限りませんので、何回か実行してみて下さい。ここまでの環境構築+ROM焼きが上手くいっていれば、そのうち成功するはずです。

成功すれば、アプリ一覧にCubeSUというSUアプリが追加されます。



3.カスタムリカバリ導入


ダウンロードしたカスタムリカバリ導入ツールを展開して、中にあるバッチファイルを実行してください。端末の画面でroot権限が要求されるので、許可してください。

TWRPが導入されますので、(もしかしたら自動でリブートされたかもしれませんが)一度電源を落とし、リブートして下さい。正常に導入されていれば、SONYロゴが終わるころにランプが点灯します。ボリュームダウンキーを連打してください。TWRPが起動します。

この段階で、PCに繋いで、次の操作のために落としてきたprerootedファイルを端末内の分かりやすい場所に移しておいたほうが賢明です。もしこの後の作業で、OSをwipeした後に必要なファイルが転送されていなかったりしたら面倒くさいので。



4.最新ビルドのprerootedを焼く


本来、D6603のprerootedを焼く場合は、インストール後にbaseband(通信電波帯)が上書きされないようにいろいろいじくる必要があるのですが、私はポケットWi-Fiで運用しているので気にせず焼きました。

LTE回線をお使いの方は、もともと入っていたキャリア版のftfを入手し、拡張子をzipにリネームしてから中のbaseband関連のsinファイル(amss…から始まる3つのファイル)を抜き出し、prerooted内のものと入れ替えてください(その際は、抜き出してきたsinファイルの名前をprerooted側のものに合わせてリネームしておくこと)。これで通信関係はOKなはずです。

Partition関連のファイルはいじらなくてもちゃんと32GBで認識されました。

ここからは文鎮化のリスクが最も高いです。気を付けて作業してください。

TWRPは通常のリカバリとは違ってタッチ操作が可能です。

新しいファームウェアをまるまる焼くわけですので、まずは既存のファームウェアを全て消去する必要があります。(全部消すなら今までの操作が全て無駄になるように思われる方もいらっしゃるかもしれませんが、そもそもこのTWRPを導入するためにroot権限が必要ですので、全く無駄ではありません。)

wipeの項目からadvanced wipeを選択し、system、cache、dalvik cacheを選択してwipeして下さい。この操作をした後はprerootedを焼くまで端末にOSが存在しないことになりますので、何があっても電源を落とさないでください。

次に、installの項目から、端末内に移したprerootedファイルをインストールして下さい。時間がかかりますが、ここまでエラー無く進められていれば問題なくインストールできるはずです。

終了後、再起動して完成です。




あとがき

これでかなり端末が便利になると思います。カスタムリカバリも導入されているので、Xposedのフレームワークも簡単にインストールできます。

初回の再起動ではNFCバイナリか何かのアップデートに失敗すると思います。その場合、絶対にNFCをONにしようと試みないでください。暴走して電池消費がヤバくなります。まあ、adbからブロックすればいいんだけど。

次はZ3TCのrootについて書こうかな。

自己紹介&使用端末紹介。


こんにちは。
某国立高校に通っているルーターと言います。どうぞよろしゅう。

Android端末やガジェットのソフト周りを好きでいじっているので、それに関することを備忘録代わりにちまちま書いていこうと思います。Xperia・Nexus・Fireを主に使っているので、そこらへんのroot取りや文鎮修理、便利ツール紹介などが中心になるかと思います。

※当ブログを参考にして仮にお持ちのデバイスが文鎮化・破損・故障等しても、当方は一切責任を負えません。ご了承の上で閲覧をお願いします。



使ってる端末は以下の通り。


Xperia Z3 (SOL26→D6603)


メインで使っている愛用スマートフォン。スマホはこの1台だけです。

Xperiaスマホはかなりの頻度で新しいフラッグシップモデルが発売されますが、CPUの性能を考えると今でも十分活躍できるスマホです。最近はオクタコアCPUが流行りですが、何でもかんでもオクタコアを積めばいいってもんでもありません。排熱性能が付け焼刃なのにオクタコアを積んだばっかりに、優秀なカイロと化したXperia Z4の例もありますしね。



私は、FlashToolでグローバル版のROMを焼いた後、Xperia開発の重鎮たるキューブキューブさんが公開されているワンクリックツールを利用してrootを取得しました。


root取得後はキャリア版のROMに戻しても良いのですが、国内版はAndroid5.0.1までしかアップデートが降って来ないのに対してグローバル版は6.0.1までアップデートされるので、グローバル版のまま運用しています。技適通ってるから何の問題もありません。


Xperia Z2 tablet (SO-05F→SGP521)


先日、日本橋のイオシスにて、インカメラ不良の無保証ジャンク品を13000円(!)という破格の値段で購入しました。インカメラなんてもともと使わないので快適に使えています。

10インチのXperiaタブレットなら上位機種のZ4 tabletがありますが、Z2Tでも十分にハイスペックです。値段がかなり下がっていることも加味すると、コスパは最強なんじゃないでしょうか。

キャリア版なので、グローバル版のROMを焼いてもブートローダーはアンロックできません。しかし、Z2時代なのでまだdm-verity※は存在しませんから、専用のツールでTWRPは比較的簡単に導入出来ます。root権限もアンロックされたブートローダーもなくTWRPを導入できるのはどういう仕組みなのかはよくわかりませんが、どうやら脆弱性からSElinuxを無効化して、OS上でTWRPを焼いているようです。これについてはまた別記事で。

※Z4世代以降の端末でkernelに仕込まれたsystem改変防止プログラム。これのせいでricを無効化して脆弱性を突くやり方が通用しなくなったため、ブートローダーをアンロック出来ないキャリア版の端末はrootが取れなくなった。ああ無情。



Xperia Z3 Tablet Compact (SGP612)


メインで使っている8インチタブレットです。当ブログではZ3TCと略します。スペックは調べてもらえればわかると思うので詳しくは書きませんが、まあ何でも出来る優等生タブレットですね。

SONYはタブレット端末から一時的に手を引いているようですが、もう一度SONYが8インチのタブレットを発売しない限り、これを超える8インチタブはそうそう現れないんじゃないでしょうか。


つい最近、XDAのここここを参考にroot権限を取得しました。今まではAndroid4.4.4にダウングレードしてから脆弱性を突くやり方が主流だったようですが、現在はSONYが公式でブートローダーのアンロックを提供してくれているため、そんなことをしなくてもrootは取れます。もともとこの端末にはキャリア版が存在しませんから、どの端末でも同じやり方が使えるはずです。kernel領域にTWRPを焼くなど、少々エキセントリックなやり方ですが。



Fire HD7(4th gen)


Wi-Fiルーターを契約した時に無料で貰えたAmazonのタブレット端末です。

上の画像では「持ち運びに便利に高性能タブレット」と銘打ってありますが、正確に言えば「RAM1GBのわりにはけっこう高性能タブレット」です。1.5GHz+1.2Ghzのクアッドコアで高速プロセッサーなんてよくもまあ書けるものだと思うものの、実はローエンドタブレットの中ではかなり動作は軽い方です。初期状態では利用できないPlayストアを導入して、root権限でプロセッサのクロック数をいじれば、ミドルレンジのAndroidタブレットくらいの働きはしてくれます。

ちなみに先日、いろいろあってOSとリカバリとブートローダーを同時にふっ飛ばしてしまい高級文鎮が出来上がりました。もちろんリカバリやファストブートなんてありませんから手詰まりになりましたが、起動時にブートローダーより先に立ち上がるpreloaderという領域を利用してなんとか復活。かなり複雑な作業でしたので、また別記事で紹介しようと思います。



Nexus7 (2013)

みんな大好きNexus7です。中古美品で10000円ポッキリ。良い買い物でした。

2013年の機種ですがまだまだ使えます。というかこのNexus7以降、7インチタブレット界に格安の中華タブレットが台頭してきたせいで、Nexus7くらいの丁度いいスペックを持った丁度いい価格帯の丁度いい7インチタブレットはめっきり姿を消してしまいました。もちろん最近の格安タブレットもそこまで性能が悪いわけではないのですが、ディスプレイの解像度や物理的な重さを鑑みると、やはり格安タブは見劣りしてしまいます。


Google謹製のタブレットですので、ブートローダーのアンロックやroot権限の取得は他のタブレットに比べて格段に簡単です。私も買ったその日にroot化してXposed環境まで整えました。




以上です。

これらの端末を中心に、XperiaやAndroid全般に関することを書いていく予定です。まだまだ浅学ですので、ミスがあれば連絡をください。