# Debuggen von Anwendungen mit IDA

In diesem Kapitel wird Ihnen vorgestellt, wie Sie mit FIRERPA und den zugehörigen Funktionen und Skripten schnell Android-Anwendungen debuggen können. Unsere Demonstrationsumgebung ist ein Android 10-System, das Host-System ist Ubuntu 22.04, auf dem IDA 7.5 (wine), ADB, jdb, Python und andere relevante Tools installiert sind. Es wird empfohlen, dass Ihre IDA-Version mindestens 7.5 oder höher ist und Sie die neueste Version des FIRERPA-Servers installiert haben.

![Dynamisches Debugging](/assets/images/IDA.png)

## Den Debug-Modus aktivieren

Falls Ihr System bereits im Debug-Modus ist, müssen Sie diesen Schritt nicht ausführen. Andernfalls öffnen Sie bitte den FIRERPA-Remote-Desktop und geben Sie im Terminal `setdebuggable` ein. Nach der Eingabe des Befehls wird Ihr Telefon einen Soft-Reboot durchführen. Keine Sorge, es wird in etwa zwei Minuten wieder vollständig betriebsbereit sein. Zu diesem Zeitpunkt befindet sich Ihr Telefon im Debug-Modus.

![Dynamisches Debugging](/assets/images/debugger-setdebuggable.png)

## IDA-Debug-Server installieren

Bevor Sie mit dem Debugging fortfahren, müssen Sie den mit IDA gelieferten Server für das Android-Debugging auf das Gerät hochladen. Sie finden `android_server` und `android_server64` im Verzeichnis `dbgsrv` Ihres IDA-Installationsverzeichnisses. Wenn die zu debuggende Zielanwendung 32-Bit-Bibliotheken verwendet, verwenden Sie bitte `android_server`, andernfalls `android_server64`. Ziehen Sie die benötigte Datei per Drag-and-Drop oder verwenden Sie `adb push`, um sie auf das Android-Gerät hochzuladen, und erteilen Sie ihr Ausführungsrechte.

```bash
chmod 755 android_server*
```

Nachdem Sie die Ausführungsrechte erteilt haben, müssen Sie den android_server-Dienst starten. Sie können dieses ausführbare Programm über adb (erfordert Root-Rechte) oder das Remote-Desktop-Terminal ausführen. Bei neueren Systemversionen (>=10) muss die Umgebungsvariable `IDA_LIBC_PATH` vorab gesetzt werden.

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

```{note}
Für das Debuggen von 32-Bit-Anwendungen muss `IDA_LIBC_PATH` auf `/apex/com.android.runtime/lib/bionic/libc.so` geändert und der 32-Bit `android_server`-Debug-Dienst verwendet werden.
```

## IDA-Debug-Dienst weiterleiten

Für Debugging-Szenarien, die hohe Echtzeit- und Leistungsanforderungen stellen, empfehlen wir die Verwendung einer USB-Verbindung. Stellen Sie sicher, dass Sie das Gerät an den aktuellen Computer angeschlossen und die adb-Autorisierung abgeschlossen haben. Führen Sie anschließend den folgenden Befehl aus.

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

```{note}
23946 ist der Standard-Listening-Port des IDA `android_server`. Wenn Sie diesen Port beim Starten des `android_server` geändert haben, geben Sie ihn bitte erneut an.
```

## Anwendungs-Debugging starten

Wir haben nicht viel Arbeit investiert, sondern lediglich ein Skript für Sie gekapselt, das Ihnen hilft, die meisten der nachfolgenden Schritte automatisch auszuführen. Folgen Sie einfach den Anweisungen der Skriptausgabe. Sie finden das Skript `ida.py` im Verzeichnis `tools` des Projekts. Verwenden Sie den folgenden Befehl.

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

![Dynamisches Debugging](/assets/images/debugger-cmd.png)

Dabei ist der Parameter `-d` die IP-Adresse Ihres Geräts, d.h. die IP des Geräts, auf dem der FIRERPA-Dienst läuft, und der Parameter `-a` ist der Paketname der Anwendung. Nach Ausführung des Befehls werden Sie aufgefordert, Ihre IDA-Software an den Anwendungsprozess anzuhängen.

![Dynamisches Debugging](/assets/images/debugger-attach.png)

![Dynamisches Debugging](/assets/images/debugger-setup.png)

<p align="center" style="margin-top:0px">
<img src="/assets/images/debugger-choice.png" alt="Dynamisches Debugging">
</p>

![Dynamisches Debugging](/assets/images/debugger-start.png)

So, der gesamte Vorgang ist abgeschlossen. Bitte kehren Sie zur Kommandozeile von `ida.py` zurück und drücken Sie die Eingabetaste. Jetzt können Sie mit dem Debugging fortfahren.