以下省略!

タイダルウ(ry ほぼ毎日1記事執筆運動実施中。 ※記事に広告(アフィリエイト)リンクを掲載している場合があります。

【例のAndroid POS端末】オレンジではなく緑色です【root取得/GMS,ストア有効化】

メルカリで注文していた例のAndroid POS端末が到着。Sunmi(商米)のV1s(W5920)というモデル。LINE Pay(StarPay)モデルでV1s-Gとも。SoCがMediaTek MT6580でRAMは1GB、ROM8GBのAndroid 6.0、2G/3G対応と今ではかなりの低スペックではあるがお遊びには十分。楽天Amazonで売られているV1sはオレンジ色の筐体でGoogle Playストアが使えたりするが、このLINE Payモデルは緑色の筐体で、Google Playストア等が無効化される仕様となっている。というわけで早速rootを取得してGoogle Playストアを使えるようにした。やり方等については続きを読むから。

目次

注意

  • adbが使える環境で、かつ最低限のコマンド(install、shell、pullなど)を理解している前提。
  • MediaTek製SoCの脆弱性を利用して一時rootを取るツール(Mtk easy su)を使っている。
  • Magiskは執筆時点で最新版の24.3を使っている(Mtk easy suでインストールされるMagiskは古いバージョンだが)。
  • 自己責任で。

一時rootを取る

  • システムアップデートがある場合はアップデートしておいたほうがいいかも。執筆時点で最新の1.12.4でも一時rootには支障ないことが確認できている。
  • Mtk easy suをダウンロードする。ウイルス対策ソフトが反応する場合があるので一時的に切っておいたほうがいいかも。
  • 端末側で開発者オプション→USBデバッグを有効化し、PCと接続。
    • 開発者オプションが表示されていない場合は端末情報からビルド番号連打。
  • adb installでMtk easy suをインストール。
  • 端末側でMtk easy suを起動し右下の(#)を押す。しばらくすると一時rootが取れる。
    • 恒久rootを取る前に再起動してしまうとsuなどができなくなるので再度この手順を行う。
  • Magisk Managerがアプリ一覧に現れているはずなので選択しManagerをダウンロードしておく。
    • Managerを起動すると再起動が必要なダイアログが出てくるが再起動せずに無視すること。

とりあえずeMMCをバックアップ

adb shellでsuしてrootシェルに入った後、以下のコマンドを唱える。
その後、adb pullなどで/sdcard/mmcblk0~.binすべてをPCにダウンロードしておき、端末からmmcblk0p7.bin以外のイメージファイルを削除する。
mmcblk0p7.binがこの後の作業で必要となる。

dd if=/dev/block/mmcblk0p1 of=/sdcard/mmcblk0p1.bin
dd if=/dev/block/mmcblk0p2 of=/sdcard/mmcblk0p2.bin
dd if=/dev/block/mmcblk0p3 of=/sdcard/mmcblk0p3.bin
dd if=/dev/block/mmcblk0p4 of=/sdcard/mmcblk0p4.bin
dd if=/dev/block/mmcblk0p5 of=/sdcard/mmcblk0p5.bin
dd if=/dev/block/mmcblk0p6 of=/sdcard/mmcblk0p6.bin
dd if=/dev/block/mmcblk0p7 of=/sdcard/mmcblk0p7.bin
dd if=/dev/block/mmcblk0p8 of=/sdcard/mmcblk0p8.bin
dd if=/dev/block/mmcblk0p9 of=/sdcard/mmcblk0p9.bin
dd if=/dev/block/mmcblk0p10 of=/sdcard/mmcblk0p10.bin
dd if=/dev/block/mmcblk0p11 of=/sdcard/mmcblk0p11.bin
dd if=/dev/block/mmcblk0p12 of=/sdcard/mmcblk0p12.bin
dd if=/dev/block/mmcblk0p13 of=/sdcard/mmcblk0p13.bin
dd if=/dev/block/mmcblk0p14 of=/sdcard/mmcblk0p14.bin
dd if=/dev/block/mmcblk0p15 of=/sdcard/mmcblk0p15.bin
dd if=/dev/block/mmcblk0p16 of=/sdcard/mmcblk0p16.bin
dd if=/dev/block/mmcblk0p17 of=/sdcard/mmcblk0p17.bin
dd if=/dev/block/mmcblk0p18 of=/sdcard/mmcblk0p18.bin
dd if=/dev/block/mmcblk0p19 of=/sdcard/mmcblk0p19.bin
dd if=/dev/block/mmcblk0p21 of=/sdcard/mmcblk0p21.bin
dd if=/dev/block/mmcblk0boot0 of=/sdcard/mmcblk0boot0.bin
dd if=/dev/block/mmcblk0boot1 of=/sdcard/mmcblk0boot1.bin

※mmcblk0p20はuserdataで巨大なのでバックアップしない。

bootイメージにパッチしてbootに焼く

  • Magisk Managerを起動し、Magisk Managerを最新版(24.3(24300))にする。
  • 最新版になったらMagiskの項目にあるインストールを選択。2つのチェックボックスに念のためチェック(意味があるかは不明)、次へを押す。
  • 方法からパッチするファイルの選択を選び、バックアップしておいたmmcblk0p7.binを選択。はじめるを押す。
    • ファイル選択の際はメニュー(…)からSDカードを表示を選択しておくのをお忘れなく。
  • しばらくするとパッチイメージが出来上がるので、adb shellでsuし、dd if=/sdcard/Download/magisk_patched-24300_(ランダム文字列).img of=/dev/block/mmcblk0p7を唱えてbootにパッチイメージを焼く。
    • bootパーティションはmmcblk0p7なので間違えるとタヒ
    • ちなみにbootの署名チェックは行われていないというガバガバ仕様らしいのでブートローダーのアンロックは不要だったりする(ただしfastbootでbootに焼く場合はアンロック必要かと)。
  • 端末を再起動。Magiskを起動してインストール済の項目が24.3(24300)であれば恒久root取得完了。Mtk easy suは削除しても構わない。

baseserviceをぬっこぬこにしてGMS等を有効化する

adb shellでsuしてから

pm disable com.sunmi.baseservice
pm enable com.android.vending
pm enable com.google.gsf.login
pm enable com.google.gms
pm enable com.google.gsf //←(無効化されていなかった(はずな)ので不要かも)

をし、GMS無効化処理を止めてGMS/Playストアを復活させる。
この処理を行った後は念のためTitanium Backupなどでしっかりbaseserviceを無効化しておいたほうがいいかもしれない(無効化したつもりなのに無効化されていない表示だったので)。
他の無効化されているアプリも必要に応じて有効化しておく。

裏話

一度ブートローダーをアンロックしたが、不要とわかりすぐにロック状態に戻したのは秘密。

システムアップデート前に恒久rootを取った後、システムアップデートをするという身を投げ出す行為をしたが、bootやrecoveryなどがまるごと更新されたらしく、恒久rootが失われていた。
そのためMtk easy suで一時rootを取ろうとするも、成功しているように見えて、いざroot shellに入ろうとするとdaemonが起動していない旨のエラーが発生。
再起動しても同じだったため、残骸が残っている可能性を考えファクトリーリセット(userdataのwipe)を掛けたところ、無事一時rootが取れるようになり、恒久rootを取り戻すことに成功した。