#キッカケ
Android開発環境では、なるべくクリーンな状態で動作実験をしたいと思った。少なくとも、アプリケーションが作った設定ファイルや保存フォルダは削除したい。その方法とAndroidのCleansingについてまとめてみた。
#Cleansing一覧
デフォルトの場合、AndroidのCleasingの方法は以下の通りだと考えられる。
番号 | Creasing | 効果 | 残留 | 弊害(Impact) | 対策 |
---|---|---|---|---|---|
1 | アプリケーションのアンインストール | APKファイルの削除 | 設定ファイル,保存フォルダ等の残骸 | 失敗時のAPKファイルの残留 | |
2 | 端末のリブート | プロセスの削除 | APKファイル,マルウェアの再起動 | 再起動の時間 | |
3 | 端末の初期化(工場出荷状態) | アカウント削除,APKファイルの削除,各設定のリセット,カスタムリカバリーファイル削除, | Root権限で導入したAPKファイルや設定,写真 | 工場出荷状態完了までの時間,Root権限の再取得 | |
4 | OSの再導入 | 設定のリセットやAPK、残留ファイル等の完全削除,Root権限の放棄 | Bootloader unlock(再ロックの方法わからず) | Root化が解除される,初期設定 | |
5 | バックアップファイルからのリストア | 今までに行なった設定リセットやインストールしたアプリケーションの放棄 | 手動操作(?) | ||
##アプリケーションのアンインストール | |||||
端末上から行うには、デバイスを接続して、adb -s <device> uninstall <package名> を行えばよい。しかし、adbによる端末の接続が切断されていた場合、これは機能しない。その場合、画面を操作する必要がある。 |
表にあるとおり、アプリケーションファイルを削除することはできるが、アプリケーションが行った操作、設定ファイルや保存フォルダ作成等は削除されない。
##端末のリブート
同じくadb -s <device> reboot
により行うことができる。例外も前述のアンインストールの時と同じである。
これはTCPモードによる端末との接続が意図せず切断されたとこに行う操作である。Localhostと端末との間の通信をキャプチャしたところ、端末側からRSTフラッグが出ていたため、おそらく予期せぬ切断はadbdのエラーによるもと、と推察される。これを正すためにrebootを行う。
プロセス削除のため、もちろんマルウェアが起動時から動くものだと、マルウェアも起動されるため、汚染されたままプログラムを処理することになる。
##端末の初期化
adb shell recovery --wipe_data
を実行する。例外も前述のアンインストールの時と同じである。
その後の解析方法
Mass storage mount
Logical analysis
Low level analysis
##OSの再導入
OSの再導入は、ファクトリーイメージがあれば用意に出来る。(特にNexus系は簡単!)
しかし、全てがリセットされてしまうため、Root権限の取得及び初期設定を行わなければならない。
以下の表はAndroidのパーティション一覧(もしかしたらもっとあるかも)
OSの焼き直しに必要な領域は、boot領域,recovery領域,system領域,userdata領域,(cache領域)の5領域である。
おそらくこの中に初期設定を保存する領域があると考えられる。故に、その領域を保存し、初期設定が終わっている状態のものを焼けば初期設定をスキップできると考えられる。
Root化権限の取得については、adb logcat
やtcpdump
他を行うために必要である。
カスタムROMを利用すれば、Root権限を取得した状態のOSを再導入できる。
現在開発が進んでいるカスタムROMは、CyanogenMod、JROM等である(引用記事:Android端末(Nexus)のroot化・カスタムROMの導入と更新)。
##バックアップファイルからのリストア
バックアップファイルを予め作成し、処理が終わるたびにバックアップファイルから状態をリストアする。いくつかの手順を省けるが、システム領域の復帰となると、手動操作が必要?かもしれない。
主はRoot化後、Clockworkmodをリカバリ領域に焼いているが、端末からの操作は受け付けないらしい。極力、タッチ操作を避けたいので、不便である。
##参考
・Androidの初期化は「個人情報」がダダ漏れ?確実に削除する方法と、「おサイフケータイ」の注意点など
・How can i do factory reset using adb in android?