IDA を使用したアプリケーションのデバッグ

本章では、FIRERPA とその関連機能およびスクリプトを使用して、Android アプリケーションを迅速にデバッグする方法について説明します。デモ環境は Android 10、ホストシステムは 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 権限が必要)またはリモートデスクトップのターミナルからこの実行可能ファイルを実行できます。新しいバージョンのシステム(>=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 接続を使用することをお勧めします。デバイスを現在のコンピュータに接続し、adb の認証が完了していることを確認してから、以下のコマンドを実行してください。

adb forward tcp:23946 tcp:23946

注釈

23946 は IDA の `android_server` のデフォルトリスニングポートです。`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 キーを押してください。これでデバッグを続けることができます。