# 使用 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`。輸入指令後，您的手機將會觸發一次軟重啟，不過不必擔心，大約兩分鐘後就會完全恢復正常狀態。此時，您的手機就已經是可偵錯模式了。

![動態偵錯](/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 鍵，現在您可以繼續偵錯了。