Oneplus 3TにTWRPとMagiskを導入

 続いてOneplus 11のrootを取る…と行きたいところですが、Nexus S以降rootを取ったことがないので、部屋に転がっていたもう使うこともないOneplus 3Tを題材に練習してみることにしました。なお、adbコマンドを打ったりしますが、自室にはWindows PCはなくMacbook Pro 2021しかないので、それでやってみます。

(事前準備) 3TとMBPを接続する

 まず、端末同士を接続します。3TもMBPもUSBはTypeCのみなので、TypeC – TypeCのケーブルで直結します。ちなみに利用したケーブルは、少し前にAliExpressで充電に利用しようと思って購入した、流れている電力量が表示されるケーブルです (約7ドル = 900円で送料無料)。

 接続したら、MBPに導入されているDropboxが反応してファイルのアップロードをするか聞いてきたので、ストレージとして認識されたようでした (3T側では特に何も設定はしていない)。

 同時にCD-ROMドライブが自動的にマウントされ、デスクトップにアイコンが現れました。ダブルクリックして開くと以下の内容なので、OSを問わずに共通なのでしょう。

 何やらシェルが同梱されているので (OSXというところが時代を感じさせる) ターミナルを開いてマウントされたフォルダに移動し、adb_config_Linux_OSX.shを実行してみます。以降、赤文字の行が、管理人がコマンドを入力した箇所になります。

~ % cd /Volumes/20160907_110626
20160907_110626 % ls
AndroidFileTransfer(OSX).dmg            adb_config_Linux_OSX.sh
OnePlus_USB_Drivers_Setup.exe       autorun.inf
OnePlus_setup.exe
20160907_110626 % ./adb_config_Linux_OSX.sh
creat android home!
config adb …
./adb_config_Linux_OSX.sh: line 22: adb: command not found
try sudo exec adb..
Password:
sudo: adb: command not found
Please do command "adb kill-server"
20160907_110626 % adb kill-server
zsh: command not found: adb

 いろいろ準備が足りないといって怒られてしまいました。まずはAndroid開発者向けサイトより、Mac向けのplatform-toolsをダウンロードして適当な場所に展開します (今回はDesktop)。 adb_config_Linux_OSX.shから見てadbにパスが通っている必要があるようですが、永続的に利用するわけではありませんし、設定するのも手間なので、platform-toolsフォルダにadb_config_Linux_OSX.shをコピーしてしまいます。これで動作するでしょうか。

~ % cd Desktop/platform-tools/
platform-tools % ls
NOTICE.txt                               fastboot.                        mke2fs.conf
adb                                            hprof-conv                    sload_f2fs
adb_config_Linux_OSX.sh    lib64                               source.properties
dmtracedump                          make_f2fs                     sqlite3
e2fsdroid                                  make_f2fs_casefold
etc1tool                                     mke2fs
platform-tools % ./adb_config_Linux_OSX.sh
android home is exist!
0x2a70
VID 0x2a70 is already configured..
adb should be OK!
platform-tools % ./adb devices
* daemon not running; starting now at tcp:5037
* daemon started successfully
List of devices attached

 今度は大丈夫なようですが、接続されているデバイスを表示する “adb devices” を実行しても何も表示されません。これは3T側でUSBデバッグが有効になっていないためなので、この辺を参考にしつつ端末情報 – ビルド番号を連続タップして開発者向けオプションを有効にし、その中にある当該項目を有効化、再度実行すると表示されるはずです。

platform-tools % ./adb devices
List of devices attached
5cda4f56.        device

 なお、マウントされたCDROMドライブにあったAndroidFileTransfer(OSX).dmgですが、流石に対象OSが古いので、最新版をダウンロード・インストールしておきます (後で使います)。

OEM Unlockを許可する

 続けて、OEM Unlockを許可します。作業としては、前述の開発者向けオプションにある、デフォルトでは無効になっている “OEMロック解除” (左の画像) を有効にするだけです。これは何かというと、有効時の警告 (右の画像) にも出る通り、セキュリティのためにbootloader (スマホの電源を投入したときに一番最初に読み込まれるプログラム) にかけられている制限を取り払うこと許す、ということになります。ちなみに、ここではあくまで “許可する” だけであり、OEM Unlock自体は後で行うことになります。

 ユーザによるOEM Unlockを許すのか、許すとしてもどれくらい簡単にできるようにするのかは、スマホメーカー次第です。WIkipediaにある難易度一覧表ではOneplusは “Easy” とされていますが、このユーザから見た自由度の高さが、OneplusがAndroidのヘビーユーザーに愛されている理由の一つと言っても過言ではないでしょう。

3T向けのTWRPを準備する

 これは簡単で、公式サイトでデバイス名 (Oneplus 3T) を入力し、移動先のそのデバイスの専用ページから.imgファイルをダウンロードします。ダウンロードしたファイルは、これまたplatform-toolsフォルダに移動しておきましょう。どこを見ても短い名前にリネームすることになっているので、今回は “twrp.img” という名前で保存しておきます。

OEM Unlockする

 ここまでの準備ができたら、以下のコマンドを入力して3Tをfastbootモードで再起動します。

platform-tools % ./adb reboot bootloader

fastbootモードとは、”パソコンからスマホを操作するときに使う機能” と紹介されていることが多いですが、Wikipediaによるとそれはプロトコル名であり、そのプロトコルが実装されたファイル名であり、PCからフラッシュファイルシステムを操作するための機能とされています。fastbootで起動すると、3Tには以下の画面が表示されます。”DEVICE STATE – locked” となっていることから、この時点ではOEM Unlockが行われていないことがわかります。

 いよいよOEM Unlockしますが、この作業は自分の手でスマホのセキュリティレベルを下げることを意味するため、通常はOEM Unlockした時点でデバイスの保証が受けられなくなります。これをよく理解した上で先に進みましょう。Unlock自体は簡単で、Unlockを許可した状態で以下のコマンドを入力するだけです。

platform-tools % ./fastboot oem unlock

 コマンド入力後、以下の画面に遷移します。端的に言えば、色々できるようになる代わりに怪しいものが入り込む余地ができるからセキュリティレベルは下がるよ、だから個人情報は一度全消去するよ、という内容です。

 本体左の音量ボタンの上下で選択を変更できるので、”UNLOCK THE BOOTLOADER” がハイライトされた状態にし、本体右の電源ボタンを押すとシステムが再起動し、その後全データの削除処理が走ります (左の画像)。再起動すると初期設定画面になり、設定完了後に開発者モードを再度有効化してOEM Unlockの項目を見ると、”ブートローダーはすでにロック解除されています” と表示され、当該項目がグレーアウトされています (右の画像)。

TWRPを導入する

 ここまでの手順でTWRPを導入する準備が整った頃になります。USBデバッグを再度有効にし、adb devicesでMacから認識されていることを確認します。管理人の場合、この時点で出力内容がちょっと変わって以下のようになりました。

platform-tools % ./adb devices
List of devices attached
5cda4f56         unauthorized

 これまでは “device” と表示されていた箇所が、”unauthorized” となっています。理由は分かりませんが、1分後くらいに再実行したら再度 “device” に戻っていました。何らかの同期が取れていなかったのでしょうか….

 気を取り直して、”./adb reboot bootloader” で、fastbootモードで3Tを再起動します。先ほどとは異なり、一番下の行が “DEVICE STATE – unlocked” となっていることから、OEM Unlockが成功していることが確認できます。

 続いて以下のコマンドを実行し、3Tのリカバリ領域 (recovery) にMacからtwrp.imgの内容を書き込みます。ちなみに、このコマンドを実行しても3Tの画面には何の変化も起きません。

platform-tools % ./fastboot flash recovery twrp.img
Sending 'recovery' (29821 KB)      OKAY [ 0.781s]
Writing 'recovery'                             OKAY [ 0.211s]
Finished. Total time: 1.041s

 上記コマンドの結果として、3Tののrecoveryパーティションにtwrp.imgの内容が書き込まれます。recoveryパーティションは、Androidをリカバリモードで起動した時の起動元となります。リカバリモードで起動する方法はデバイスにより異なりますが、3Tの場合は通常の電源がoffの状態から、音量ボタンの下と電源ボタンをしばらく同時押しし続けるという手順になっています。

 これでTWRPの導入は完了です。以下のコマンドで3Tを再起動します。

platform-tools % ./fastboot boot twrp.img        
Sending 'boot.img' (29821 KB)                      OKAY [  0.729s]
Booting                                                              OKAY [  0.595s]
Finished. Total time: 1.338s

 ここでは、twrp.imgを送り込んでから、そのイメージを利用して起動するようにしていますが、単純にリカバリモードで起動しても同じことが起きるはずです。再起動後、次のような画面が現れるはずです。

 Languageで日本語に変更してから、パスワードを入力します。3T的には次の画面が重要です (写真撮り忘れました、実画面はこの辺で確認可能です)。システムパーティションへの書き込みを許可するか、Read Onlyの状態を維持するかの選択を迫られます。

余談 : dm-verifyについて

結論から書くと、管理人は後述の脅しに屈して “Keep Read Only” をタップして先に進みましたが、Magiskでrootを獲るのであればおそらく改変を許可しても問題ないものと思われます。

 TWRPのOneplus 3Tのページや、XDAのまとめに書かれているのですが、3Tのstock-romでは、dm-verify (= Device Mapper Verify) という機能が有効になっています。この機能が有効になっていると、システムファイル (system.img) が1ビットでも変更されていると、それを検知してシステムが起動不能になるとされています (主目的はrootkit対策)。

 Read Onlyにする必要があるか否かに関する技術的な説明はこちらを見て頂きたいのですが、一言で言えばdm-verifyの改善チェックをする側のファイル (boot.img) でMagiskは動くので、Magiskを導入してrootを獲ることと、Read Onlyを維持することとは本質的に無関係ということになるようです。ちなみに、TWRPも同じくboot.imgをいじるので、無関係ということになります。

 なお、ここで再起動はしないでください。再起動すると、OS起動時に強制的にリカバリパーティションが復元される = TWRPが消去されてしまいます。その場合、TWRPの導入からやり直してください。

Magiskの導入

 Magiskの最新版をここからダウンロードします。ファイルの拡張子は.apkですが、これを.zipに変更してから、Android File Transferで3Tの任意の場所 (たとえばDownload直下とか) に書き込みます。その後、TWRPの “Install” をタップしてそのファイルを選択し (この辺も写真がないので、こことかを参考にしてください)、 右にスワイプしてflush (書き込み) を行います。書き込みが完了すると、以下の上な状態になるはずです。

その後、”再起動” をタップして3Tを再起動します。

Magiskの動作確認

 システムの再起動完了後、Magiskのアイコンがアプリの一覧に追加されているはずです (左の画像)。タップして起動すると追加ファイルのダウンロードとインストールを実施するかを聞かれるので、”OK” で進みます。

 更新が終了すると、アイコンの外見が変わります (左の画像)。変わったアイコンをタップすると、今度こそMagiskが起動します (右の画像)。Magiskの中の “インストール済み” にバージョン番号が入っていれば、基本的にインストール = root化は成功しています。

MBPでもまったく問題なし

 adbコマンドを利用した各種操作 (ほとんどがTWRPとroot化関連だとは思いますが) を紹介する記事のほとんどは、Windows PC を利用しています。しかし、USBドライバを入れる必要がない分、Macの方が簡単であるとさえ言えると思います。

 今回3Tはお試しでやってみましたが、意外とすんなりといきました。情報量はとても多かったのですが、情報の大部分はデバイスがリリースされた時期直後に集中しており、時と共にどんどん減ってゆくので、現時点で実施しようと思うとどうなのかという内容も多々ありました。

 たとえば、MagiskはAPKをZIPに変えたファイルを利用してTWRPから導入しましたが、この方法は現時点で非推奨とされています。3Tはもう “枯れた” デバイスなのでおそらく大丈夫だろうと思い、実際に大丈夫だったのですが、最新のAndroidの方がセキュリティは厳しくなっているはずなので、これを7Tや11でそのまま実施できるかというと、相当怪しいでしょう。

 いずれにせよ、TWRP & root化初心者にはいい練習になったので、引き続き手持ち現行機の7Tや、先日着弾した11などで試してゆきたいと思っています。

コメントする