
Eine Integration für IDA und VS Code, die beide verbindet, um IDAPython-Skripte einfach auszuführen und zu debuggen.
IDACode erleichtert das Ausführen und Debuggen von Python-Skripten in Ihrer IDA-Umgebung, ohne Visual Studio Code verlassen zu müssen. Die VS Code-Erweiterung finden Sie im Marketplace.
IDACode befindet sich noch in einem sehr frühen Stadium und Fehler sind zu erwarten. Bitte öffnen Sie ein neues Issue, wenn Sie auf Probleme stoßen.
debugpy zur Kommunikation verwendet, wird das Ausgabefenster automatisch mit dem VS Code-Ausgabebereich synchronisiert.IDACode wurde unter Windows und macOS mit IDA 8.4/9.0 und Python 3.12 getestet (ältere Python-Versionen haben Probleme mit dem Debugging).
Um die Abhängigkeiten für das IDA-Plugin einzurichten, führen Sie folgenden Befehl aus:
# make sure to use the correct Python version
# IDACode supports the latest debugpy as of version 3.0.0, make sure to upgrade!
python -m pip install --user debugpy tornado
Klonen Sie entweder dieses Repository oder laden Sie ein Release-Paket von hier herunter. ida.zip entspricht dem Inhalt des ida-Ordners in diesem Repository. Kopieren Sie alle Dateien in das Plugin-Verzeichnis von IDA.
Der nächste Schritt ist die Konfiguration der Einstellungen für Ihre Umgebung (optional). Bearbeiten Sie idacode_utils/settings.py entsprechend:
HOST: Dies ist die Host-Adresse. Dies ist immer 127.0.0.1, es sei denn, Sie möchten, dass es von einem entfernten Standort aus zugänglich ist. Beachten Sie, dass dieses Plugin keine Authentifizierung verwendet.PORT: Dies ist der Port, auf dem IDA hören soll. Dieser wird für die WebSocket-Kommunikation zwischen IDA und VS Code verwendet.DEBUG_PORT: Dies ist der Port, auf dem Sie auf eingehende Debug-Sitzungen warten möchten.LOGGING: Bestimmt, ob der Debugger in Dateien protokollieren soll. Dies ist besonders nützlich, wenn Sie Probleme mit IDACode haben. Bitte reichen Sie ein neues Issue ein, wenn Sie etwas finden. Die Dateien befinden sich immer in Ihrem Temp-Verzeichnis (z. B. Windows: %TEMP%). Die Dateien heißen debugpy.*.log.Sie können das Plugin nun starten, indem Sie im Plugin-Menü auf IDACode klicken.
Die VS Code-Erweiterung ist im Marketplace verfügbar. Informationen zur Konfiguration der Erweiterung finden Sie in der README der Erweiterung.
Klicken Sie im Plugin-Menü auf IDACode. Es sollte der folgende Text erscheinen:
IDACode listening on 127.0.0.1:7065
Seit Version 0.2.0 unterstützt IDACode "Execute on Save" (Ausführen beim Speichern), das standardmäßig aktiviert ist. VS Code führt Ihr Skript automatisch in IDA aus, sobald Sie das aktuelle Dokument speichern (z. B. mit STRG+S). Dieses Verhalten kann in den Einstellungen deaktiviert werden. Öffnen Sie die VS Code Extension Development Console mit Strg+Umschalt+P und geben Sie "idacode" ein, um die folgende Liste von Befehlen anzuzeigen. Verwenden Sie nicht die "Run"- oder "Debug"-Funktionalität von VS Code, da Sie sonst eine "HTTP malformed"-Meldung in IDA erhalten.
Es stehen 4 Befehle zur Verfügung:

Sobald Sie einen Ordner geöffnet haben, in dem Sie Ihre Skripte ablegen möchten (Sie müssen den Ordner angeben, wenn VS Code Sie dazu auffordert!), können Sie eine Verbindung zu IDA herstellen. Dies kann entweder durch Ausführen von Connect to IDA oder Connect and attach a debugger to IDA erfolgen. Beachten Sie, dass eine Debug-Sitzung dauerhaft ist, bis Sie IDA neu starten. Sie können den Arbeitsbereichsordner nach dem Start des Debuggers nicht mehr ändern.
Stellen Sie sicher, dass der Arbeitsbereichsordner der Ordner ist, in dem sich Ihre Hauptskripte befinden.
Sobald Sie verbunden sind, können Sie Execute script in IDA auswählen.
IDACode verwendet den Remote-Debugger von VS Code, um eine Verbindung zu IDA herzustellen. Alle VS Code-Funktionen werden unterstützt. Sie müssen jedoch den Einstiegspunkt des Skripts mit der Python-eingebauten Funktion breakpoint angeben. Diese Anweisung weist den Debugger an, die Ausführung anzuhalten; wenn kein Debugger vorhanden ist, wird die Funktion ignoriert. IDACode importiert ein Hilfspaket namens dbg, das eine Überladung von breakpoint namens bp implementiert. Diese Funktion unterstützt Protokollierung und Bedingungen:
name = idc.get_segm_name(segment)
dbg.bp(name==".text", f"found {name} at {segment}")
Bitte beachten Sie auch, dass ein breakpoint()-Aufruf niemals am Ende einer Datei erfolgen sollte; er muss immer vor jeder anderen Codezeile stehen, da er bei der nächsten Anweisung in Ihrem Code unterbricht. Beachten Sie außerdem, dass Sie, wenn Sie sich für die Verwendung des dbg-Pakets entscheiden, entweder alle Referenzen entfernen oder die Variable __idacode__ als Bedingung verwenden müssen, bevor Sie es als normales IDA-Skript ausführen.
Es ist auch wichtig, dass das Anhängen eines Debuggers eine neue Debugger-Instanz erstellt. In den meisten Fällen ist das nicht gewünscht. Wenn Sie die Verbindung zum Debugger trennen, verwenden Sie den Remote-Debugger von VS Code, um sich erneut zu verbinden.
