IDA デバッグ

本章では、FIRERPAとその関連機能およびスクリプトを使用してAndroidアプリを迅速にデバッグする方法を紹介します。デモ環境はAndroid 10、ホストOSはUbuntu 22.04で、IDA 7.5(Wine)、ADB、JDB、Pythonなどのツールがインストールされています。IDAのバージョンは7.5以上を推奨し、最新バージョンのFIRERPAサーバーをインストールしてください。

動的デバッグ

デバッグ可能モードに設定

既にデバッグモードになっている場合は、この手順は不要です。そうでない場合は、FIRERPAリモートデスクトップを開き、端末でsetdebuggableと入力してください。このコマンドを実行すると、スマートフォンがソフトリブートしますが、心配はありません。約2分後に完全に復旧します。これでスマートフォンがデバッグ可能モードになります。

動的デバッグ

IDAデバッグサービスのインストール

デバッグを開始する前に、IDAのAndroidデバッグサーバーをデバイスにアップロードする必要があります。IDAのインストールディレクトリ内のdbgsrvフォルダにandroid_serverandroid_server64があります。対象アプリが32ビットの共有ライブラリを使用している場合はandroid_serverを使用し、それ以外の場合はandroid_server64を使用します。必要なファイルをドラッグ&ドロップでアップロードするか、adb pushでAndroidデバイスに送信し、実行権限を付与します。

chmod 755 android_server*

実行権限を付与したら、android_serverサービスを起動する必要があります。adb(root権限が必要)またはリモートデスクトップ端末から実行可能ファイルを実行できます。Android 10以降では、事前にIDA_LIBC_PATH環境変数を設定する必要があります。

IDA_LIBC_PATH=/apex/com.android.runtime/lib64/bionic/libc.so ./android_server64 -kk

注釈

デバッグ対象が32ビットアプリの場合は、IDA_LIBC_PATHを/apex/com.android.runtime/lib/bionic/libc.soに変更し、32ビットのandroid_serverデバッグサービスを使用してください。

IDAデバッグサービスの転送

デバッグのようなリアルタイム性とパフォーマンスが求められる場面では、USB接続の使用をお勧めします。デバイスがUSB経由で現在のコンピューターに接続され、ADB認証が完了していることを確認し、次のコマンドを実行してください。

adb forward tcp:23946 tcp:23946

注釈

23946はIDA android_serverのデフォルトのリスニングポートです。起動時にポートを変更した場合は、転送時に実際のポート番号を指定してください。

アプリのデバッグを開始

後続の操作の大部分を自動的に実行するスクリプトを用意しています。スクリプトの出力表示に従って操作するだけです。プロジェクトのtoolsディレクトリにida.pyスクリプトがあり、次のコマンドで実行します。

python3 ida.py -d 192.168.0.2 -a com.android.settings

動的デバッグ

ここで、-dパラメータはデバイスIP、つまりFIRERPAサービスが実行されているデバイスのIPです。-aパラメータは対象アプリのパッケージ名です。コマンドを実行すると、スクリプトがIDAでデバッガをアプリケーションプロセスにアタッチするように指示します。

動的デバッグ

動的デバッグ

動的デバッグ

動的デバッグ

すべてのプロセスの準備が整いました。ida.pyのコマンドライン画面に戻り、Enterキーを押すと、デバッグを続行できます。