29 November 2018

Amazon Fire HD 10のroot権限無しでシステムアプリを無効化

Amazon Fire HD 10 で root 権限を取らずに、システム・アプリを無効化した時のメモ

この作業を行ったFire HD 10(2017)のシステムは Fire OS 5.3.6.4 (2018/11/13) です。 (「設定」ー「端末オプション」ー「システムアップデート」で表示されるバージョン)

参考にしたWebページ

・xda [GUIDE][NO ROOT][LATEST VERSION] Disable System Apps on Fire HD 7/8/10:
FireOS 5.6.0.0 のAmazon関連パッケージ一覧

環境構築

Amazon Facebook ShareアプリでOSの脆弱性を用いて、システム管理ユーザIDに昇格して「pm hide」コマンドを通してしまう方法のようだ。

Amazon Facebook Share (com.amazon.unifiedsharefacebook.apk)の配布元は
xdaよりダウンロード (上のxda GUIDEの本文に貼られたリンク)

ダウンロードしたファイルを、Fire HDの /sdcard/Download に保存してインストールする

adb install -r -d /sdcard/Download/com.amazon.unifiedsharefacebook.apk

adb shellでFire HDのシェルに入り、run-as コマンドを用いて、id=2000以外に昇格できることを確認する。

$ adb shell
 
$ id
uid=2000(shell) gid=2000(shell) groups=1003(graphics) ...(以下略)
 
$ run-as com.amazon.unifiedsharefacebook
$ id
uid=32067(amz_u0a67) gid=32067(amz_u0a67) groups=1003(graphics), ...(以下略)

この状態で、pm hide コマンドを用いて、パッケージを無効化していく

$ pm hide [パッケージ名]

パッケージを戻すときは、pm unhide を用いる。pm hideで無効化したものは、pm disable したものと違って、pm list コマンドでは表示できなくなってしまう。

どのパッケージを無効化したかは、次の方法で知ることができる。

$ pm list package > all.txt
$ pm list package -u > uninstall.txt
$ diff -u all.txt uninstall.txt | grep -e '+' | sort

無効化したパッケージ

パッケージ名説明
com.amazon.kindle.otter.oobe.forced.otaOTA(自動システムアップデート)関連
com.amazon.kindle.otter.oobe
com.amazon.device.software.otaOTA(自動システムアップデート)関連
com.amazon.device.software.ota.overrideOTA(自動システムアップデート)関連
amazon.alexa.tabletAlexa 関連
com.amazon.alexa.modeswitchAlexa 関連
com.amazon.alexa.youtube.appAlexa 関連
com.amazon.vans.alexatabletshopping.appAlexa 関連
com.amazon.alexa.externalmediaplayer.fireosAlexa 関連
com.amazon.dee.appAlexa
com.amazon.knight.calendarAlexa 関連
com.amazon.comms.knightcontactsAlexa 関連
com.amazon.comms.knightmessagingAlexa 関連
com.amazon.knight.blinkAlexa 関連
com.amazon.virtual.dash.knight.appAlexa 関連
com.amazon.knight.ecsAlexa 関連
com.amazon.knight.hdsAlexa 関連
jp.co.omronsoft.iwnnime.mlazwnn 日本語変換IME
jp.co.omronsoft.iwnnime.languagepack.zhcn_azwnn 日本語変換IME
com.amazon.geo.client.mapsAmazonマップ
com.amazon.geo.mapsv2.servicesAmazonマップ
com.amazon.geo.mapsv2Amazonマップ
com.amazon.ags.appAmazonゲーム
com.amazon.kindle.ksoAmazonキャンペーン
com.amazon.cloud9Silk Webブラウザ
com.amazon.cloud9.kidsSilk Webブラウザ
com.amazon.cloud9.systembrowserproviderSilk Webブラウザ
com.amazon.cloud9.contentserviceSilk Webブラウザ
com.amazon.kcp.tutorialチュートリアル
com.amazon.dp.contacts連絡先 同期
com.amazon.dp.fbcontacts
com.amazon.pmペアレンタル・モニター
com.amazon.unifiedsharesinaweibo中国 SNS微博
com.amazon.tahoeFree Time
com.amazon.kindle.personal_videoAmazonビデオ
org.mopria.printpluginMopria Print Service
com.amazon.mp3Amazonミュージック
com.amazon.photos.importerAmazonフォトインポート
com.kingsoft.office.amzKingsoftオフィス
com.amazon.kor.demo店頭用デモ画面
com.audible.application.kindleAudible
com.amazon.windowshopAmazonでお買い物
com.goodreads.kindleGoodreads
com.amazon.unifiedsharegoodreadsGoodreads
com.amazon.csappヘルプ
com.amazon.advertisingidsettings広告設定
com.amazon.comms.multimodaltachyonarmTachyon Calling App
com.amazon.kindle.unifiedSearch検索
com.android.calendarAndroid標準アプリ:カレンダー
com.android.deskclockAndroid標準アプリ:時計
com.android.emailAndroid標準アプリ:メール
com.android.protipsAndroid標準アプリ:ホーム画面のヒント

条件により無効化できるパッケージ

パッケージ名説明
com.amazon.photosAmazonフォト(壁紙設定機能の無いランチャーを使う時に必要)
com.amazon.firelauncherAmazonホーム画面(他のランチャーがあれば不要)

Amazonホーム画面以外のランチャーを使う

任意のホーム画面をダウンロードし、インストールした後に、Launcher Hijackをインストールしてランチャーを選択する。

・xda New: Any Launcher, No Root (Launcher Hijack V3)

「Android 設定」 ー 「ユーザー補助」 ー 「To detect home button press」を有効(ON)に変更する。

Amazonホーム画面以外のランチャーで、ウィジェットを有効化する

xdaのHow to Use a Custom Launcher With Widgets on Amazon Fire OSに書かれている方法でOK

私が使っているのは Xperia Home(com.sonymobile.home)なので、adbでシェルに入り、次のように権限を与えるコマンドを実行する

adb shell
appwidget grantbind --package com.sonymobile.home --user 0

一時的にroot権限を得る方法が発表される (2019年4月)

Amazon Fire HD 8 (2018 第8世代)の一時root権限取得と不要アプリ無効化』のmtk-suプログラムを使うことで、一時的にroot権限を得られる

shell@suez:/ $ cd /data/local/tmp
 
shell@suez:/data/local/tmp $ id
uid=2000(shell) gid=2000(shell) groups=1003(graphics),1004(input),1007(log),1011(adb),1015(sdcard_rw),1028(sdcard_r),3001(net_bt_admin),3002(net_bt),3003(inet),3006(net_bw_stats) context=u:r:shell:s0
 
shell@suez:/data/local/tmp $ ./mtk-su -v                                       
param1: 0x3000, param2: 0x10000, type: 9
Building symbol table
kallsyms_addresses pa 0x40aa4600
kallsyms_num_syms 66781, addr_count 66781
kallsyms_names pa 0x40b26e00, size 832778
kallsyms_markers pa 0x40bf2400
kallsyms_token_table pa 0x40bf2d00
kallsyms_token_index pa 0x40bf3100
Patching credentials
init_task va: 0xffffffc000e3a960
Possible list_head tasks at offset 0x368
0xffffffc020120368 0xffffffc017231a68 0x000000000000008c
comm offset 0x5d8 comm: swapper/0
Found own task_struct at node 1
real_cred: 0xffffffc031b7c400, cred: 0xffffffc031b7c400
Parsing sel_read_enforce
Found adrp instr at offset 4
ADRP x0, 0xffffffc000f46000
Found ldr instr at offset 28
LDR [x0,2116]
selinux_enforce VA is 0xffffffc000f46844
Setting selinux_enforce
Switched selinux to permissive
New UID/GID: 0/0
starting /system/bin/sh
 
shell@suez:/data/local/tmp # id
uid=0(root) gid=0(root) groups=1003(graphics),1004(input),1007(log),1011(adb),1015(sdcard_rw),1028(sdcard_r),3001(net_bt_admin),3002(net_bt),3003(inet),3006(net_bw_stats) context=u:r:shell:s0

ファームウエアのアップデートをしたら、一時的にホーム画面が表示できなくなった件 (2021年12月)

ファームウエアをFire OS 5.3.6.4 (2018/11/13にアップデート) から Fire OS 5.6.9.0 にアップデートを行った。

手順は次の通り

1) Fire OS 5.3.6.4 の状態で adb shell 接続し、mtk_su の方法で一時的なルート権限を得る
2) OTAファームウエア アップデート用パッケージを再有効化する

$ pm enable com.amazon.kindle.otter.oobe.forced.ota
$ pm enable com.amazon.kindle.otter.oobe
$ pm enable com.amazon.device.software.ota
$ pm enable com.amazon.device.software.ota.override
3) タブレットで、設定 → 端末オプション → システムアップデート の画面を開き、「アップデート」ボタンを押す

一気に最新ファームウエアにアップデートされるわけではなく、1段階ずつ、何回もアップデート用パッチが適用され再起動を繰り返すことになる。

何度か再起動され、幾段階かファームウエアがアップデートされたところで、なんとホーム画面が表示できない、文鎮化してしまったことに気づいた。

mtk-suで得たルート権限を使い、Amazonホーム画面を無効化(pm disable com.amazon.firelauncher)していたため、アップデートされたカーネルでは mtk-su が阻止されて、Amazonホーム画面を有効化出来ないのだ。

更に詳細な原因としては、これまでcom.amazon.firelauncherだけだったホーム画面のパッケージが、新しいファームウエアではcom.amazon.paladinという新たなパッケージが追加され、これがcom.amazon.firelauncherを呼び出す形になっているようだ。

今回、運が良かったのはファームウエアを最新版までアップデートしたのち、24個のシステムパッケージのアップデートがあり、このパッケージのアップデートで運良くAmazonホーム画面のパッケージもアップデートが掛かり、有効化されたのだ。

もし、このパッケージアップデートがなければ、無理やりadb経由でサードパーティーのホーム画面を実行する必要があった。

$ adb shell am start -n com.sonymobile.home/.HomeActivity

4)再びOTAファームウエア アップデート用パッケージを無効化する
mtk-su でrootが取れる前の方法、com.amazon.unifiedsharefacebookの権限を使う方法で、pm hideが可能になるのを利用してパッケージを無効化する。

$ run-as com.amazon.unifiedsharefacebook
$ pm hide com.amazon.kindle.otter.oobe.forced.ota
$ pm hide com.amazon.kindle.otter.oobe
$ pm hide com.amazon.device.software.ota
$ pm hide com.amazon.device.software.ota.override
なおこの方法では、ホーム画面を別のものに入れ替えても、ホームボタンを押すとfirelauncherが呼び出されてしまい「要求された操作は許可されていません。機能制限の設定を確認してもう一度お試しください」のダイアログが出て先に進めなくなる。
$ pm hide com.amazon.paladin
$ pm hide com.amazon.firelauncher
... 別のランチャーを実行してホームボタンを押すと ...
$ am monitor
>Monitoring activity manager...  available commands:
>(q)uit: finish monitoring
>** Activity starting: com.amazon.firelauncher
pm disableでないと、完全にfirelauncherを無効化出来ないからだ。