
Une intégration pour IDA et VS Code qui connecte les deux pour exécuter et déboguer facilement des scripts IDAPython.
IDACode facilite l'exécution et le débogage de scripts Python dans votre environnement IDA sans quitter Visual Studio Code. L'extension VS Code est disponible sur le marketplace.
IDACode est encore à un stade très précoce et des bogues sont à prévoir. Veuillez ouvrir un nouveau ticket si vous rencontrez des problèmes.
debugpy pour la communication, il synchronise naturellement la fenêtre de sortie avec le panneau de sortie de VS Code.IDACode a été testé sur Windows et macOS avec IDA 8.4/9.0 et Python 3.12 (les versions plus anciennes de Python ont des problèmes de débogage).
Pour configurer les dépendances du plugin IDA, exécutez :
# assurez-vous d'utiliser la bonne version de Python
# IDACode supporte la dernière version de debugpy à partir de la version 3.0.0, assurez-vous de mettre à jour !
python -m pip install --user debugpy tornado
Clonez ce dépôt ou téléchargez un paquet de publication depuis ici. ida.zip reflète le contenu du dossier ida de ce dépôt. Copiez tous les fichiers dans le répertoire des plugins d'IDA.
L'étape suivante consiste à configurer vos paramètres pour correspondre à votre environnement (optionnel). Modifiez idacode_utils/settings.py en conséquence :
HOST : Il s'agit de l'adresse de l'hôte. C'est toujours 127.0.0.1 sauf si vous voulez qu'il soit accessible depuis un emplacement distant. Gardez à l'esprit que ce plugin n'utilise pas d'authentification.PORT : Il s'agit du port sur lequel vous voulez qu'IDA écoute. Il est utilisé pour la communication WebSocket entre IDA et VS Code.DEBUG_PORT : Il s'agit du port sur lequel vous voulez écouter pour les sessions de débogage entrantes.LOGGING : Détermine si le débogueur doit écrire dans des fichiers. C'est particulièrement utile lorsque vous rencontrez des problèmes avec IDACode. Veuillez soumettre un nouveau ticket si vous trouvez quelque chose. Les fichiers se trouvent toujours dans votre répertoire temporaire (par exemple, Windows : %TEMP%). Les fichiers sont appelés debugpy.*.log.Vous pouvez maintenant démarrer le plugin en cliquant sur IDACode dans le menu des plugins.
L'extension VS Code est disponible sur le marketplace. Pour configurer l'extension, veuillez vous référer au README de l'extension.
Cliquez sur IDACode dans le menu des plugins. Vous devriez voir apparaître le texte suivant :
IDACode listening on 127.0.0.1:7065
À partir de la version 0.2.0, IDACode supporte "Exécuter à la sauvegarde" qui est activé par défaut. VS Code exécutera automatiquement votre script dans IDA dès que vous sauvegarderez le document courant (par exemple avec CTRL+S). Ce comportement peut être désactivé dans les paramètres. Ouvrez la console de développement de l'extension VS Code avec Ctrl-Shift-P et entrez "idacode" pour voir la liste des commandes ci-dessous. N'utilisez pas la fonctionnalité "Exécuter" ou "Déboguer" de VS Code, car vous obtiendrez un message "HTTP malformé" dans IDA à la place.
Il y a 4 commandes à votre disposition :

Une fois que vous avez ouvert un dossier dans lequel vous souhaitez placer vos scripts (vous devez spécifier le dossier lorsque VS Code vous le demande !), vous êtes prêt à vous connecter à IDA. Vous pouvez le faire en exécutant soit Connect to IDA soit Connect and attach a debugger to IDA. Veuillez noter qu'une session de débogage est permanente jusqu'à ce que vous redémarriez IDA. Vous ne pouvez pas changer le dossier de l'espace de travail une fois que le débogueur a démarré.
Assurez-vous que le dossier de l'espace de travail est le dossier où se trouvent vos scripts principaux.
Une fois connecté, vous pouvez sélectionner Execute script in IDA.
IDACode utilise le débogueur distant de VS Code pour se connecter à IDA. Toutes les fonctionnalités de VS Code sont supportées. Cependant, vous devez spécifier le point d'entrée du script en utilisant la fonctionnalité intégrée de Python : breakpoint. Cette instruction indique au débogueur de suspendre l'exécution ; s'il n'y a pas de débogueur, la fonction est simplement ignorée. IDACode importe un package d'aide appelé dbg qui implémente une surcharge de breakpoint appelée bp. Cette fonction prend en charge la journalisation et les conditions :
name = idc.get_segm_name(segment)
dbg.bp(name==".text", f"found {name} at {segment}")
Veuillez également noter qu'un appel à breakpoint() ne doit jamais se trouver à la fin d'un fichier ; il doit toujours se trouver avant toute autre ligne de code car il s'arrête sur l'instruction suivante de votre code. Notez également que si vous décidez d'utiliser le package dbg, vous devez soit supprimer toutes les références, soit utiliser la variable __idacode__ comme condition avant de l'exécuter comme un script IDA normal.
Il est également important de noter que l'attachement d'un débogueur créera une nouvelle instance de débogueur. Dans la plupart des cas, ce n'est pas ce que vous voulez. Si vous vous déconnectez du débogueur, utilisez le débogueur distant de VS Code pour vous reconnecter.
