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

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

![動的デバッグ](/assets/images/IDA.png)

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

お使いのシステムがすでにデバッグモードになっている場合は、この手順は不要です。そうでない場合は、FIRERPA リモートデスクトップを開き、ターミナルで `setdebuggable` と入力してください。コマンドを入力すると、スマートフォンがソフトリブートされますが、心配はいりません。約2分で完全に正常な状態に戻り、スマートフォンはデバッグ可能モードになります。

![動的デバッグ](/assets/images/debugger-setdebuggable.png)

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

デバッグを続ける前に、IDA に付属している Android デバッグ用のサーバーをデバイスにアップロードする必要があります。IDA のインストールディレクトリにある `dbgsrv` ディレクトリ内に `android_server` と `android_server64` があります。デバッグ対象のアプリケーションが 32 ビットのライブラリを使用している場合は `android_server` を、そうでない場合は `android_server64` を使用してください。必要なファイルをドラッグ＆ドロップでアップロードするか、`adb push` を使用して Android デバイスに転送し、実行権限を付与してください。

```bash
chmod 755 android_server*
```

実行権限を付与した後、`android_server` サービスを起動する必要があります。adb（root 権限が必要）またはリモートデスクトップのターミナルからこの実行可能ファイルを実行できます。新しいバージョンのシステム（>=10）では、事前に `IDA_LIBC_PATH` 環境変数を設定する必要があります。

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

```{note}
32 ビットアプリケーションをデバッグ対象とする場合、`IDA_LIBC_PATH` を `/apex/com.android.runtime/lib/bionic/libc.so` に変更し、32 ビット版の `android_server` デバッグサービスを使用する必要があります。
```

## IDA デバッグサービスのフォワーディング

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

```bash
adb forward tcp:23946 tcp:23946
```

```{note}
23946 は IDA の `android_server` のデフォルトリスニングポートです。`android_server` 起動時にこのポートを変更した場合は、再指定してください。
```

## アプリケーションのデバッグ開始

私たちは多くの作業をしたわけではなく、後続の操作の大部分を自動化するスクリプトをラップしただけです。スクリプトの出力プロンプトに従って操作するだけで、プロジェクトの `tools` ディレクトリにある `ida.py` スクリプトを以下のコマンドで使用できます。

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

![動的デバッグ](/assets/images/debugger-cmd.png)

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

![動的デバッグ](/assets/images/debugger-attach.png)

![動的デバッグ](/assets/images/debugger-setup.png)

<p align="center" style="margin-top:0px">
<img src="/assets/images/debugger-choice.png" alt="動的デバッグ">
</p>

![動的デバッグ](/assets/images/debugger-start.png)

これで、すべての手順が完了しました。`ida.py` のコマンドラインに戻り、Enter キーを押してください。これでデバッグを続けることができます。