Plugin de rétro-ingénierie alimenté par IA pour IDA Pro
# IDAssist *Plugin de Rétro-ingénierie Assisté par IA pour IDA Pro* **Auteur :** Jason Tang ## Description IDAssist est un plugin IDA Pro qui intègre l'analyse basée sur LLM directement dans l'interface d'IDA, offrant une rétro-ingénierie binaire assistée par IA via des fournisseurs LLM configurables, des graphes de connaissances sémantiques, une recherche documentaire RAG, et prend en charge une grande diversité de fournisseurs LLM. Construit avec Python et PySide6, IDAssist s'exécute comme un panneau dockable dans IDA Pro 9.0+ et communique avec des fournisseurs LLM (OpenAI, Anthropic, Ollama, LiteLLM, et plus) pour analyser des fonctions, suggérer des renommages, répondre à des questions sur le code, et construire un graphe de connaissances interrogeable d'un binaire entier. <!-- SCREENSHOT: Interface principale d'IDAssist montrant l'onglet Explain avec une explication de fonction et un panneau d'analyse de sécurité -->  ## Fonctionnalités principales **Explication de fonction** — Génère des explications détaillées en langage naturel des fonctions décompilées avec analyse de sécurité automatique incluant le niveau de risque, le profil d'activité, les indicateurs de sécurité et la détection d'API. **Chat de requête interactif** — Posez des questions sur le binaire avec un historique de chat persistant. Utilisez des macros de contexte (`#func`, `#addr`, `#line`, `#range`) pour injecter du code de fonction, des adresses ou des plages de désassemblage dans les requêtes. **Actions automatisées** — Suggestions de renommage assistées par IA pour les fonctions, variables et types. Examinez les modifications proposées dans un tableau avec scores de confiance, puis appliquez les actions sélectionnées à l'IDB. **Graphe de connaissances sémantique** — Construisez et explorez un graphe de connaissances des fonctions du binaire, des relations d'appel, des flux de données et des caractéristiques de sécurité. Inclut le rendu visuel du graphe, la recherche sémantique et la détection de communautés. **Recherche documentaire RAG** — Téléchargez des documents de référence (`.txt`, `.md`, `.rst`, `.pdf`) et utilisez-les comme contexte lors des requêtes LLM. Prend en charge la recherche hybride texte+vecteur via l'indexation Whoosh. **Intégration SymGraph** — Envoyez et récupérez les noms de fonctions, noms de variables, types et données de graphe vers la plateforme collaborative SymGraph. Inclut un assistant multi-étapes avec résolution de conflits pour les récupérations. **Gestion des paramètres** — Configurez plusieurs fournisseurs LLM et MCP, gérez les identifiants API SymGraph, personnalisez le prompt système et définissez les chemins de base de données. ## Capacités avancées ### Agent ReAct L'onglet Query prend en charge un mode agent ReAct autonome. Lorsqu'il est activé, le LLM planifie une stratégie d'investigation, exécute des outils pour rassembler des informations, réfléchit aux résultats et synthétise une réponse complète — le tout automatiquement en plusieurs cycles de raisonnement. ### Réflexion étendue Configurez les niveaux d'effort de raisonnement pour contrôler à quel point le LLM « réfléchit » avant de répondre : | Niveau | Budget de réflexion | Idéal pour | |-------|----------------|----------| | Aucun | Désactivé | Requêtes rapides et simples | | Faible | ~2K jetons | Analyse simple | | Moyen | ~10K jetons | Complexité modérée | | Élevé | ~25K jetons | Analyse approfondie, code complexe | ### Intégration MCP IDAssist peut se connecter à des serveurs MCP externes pour des interactions LLM augmentées par des outils, où le modèle peut inspecter programmatiquement des fonctions, lire le désassemblage, interroger les références croisées et modifier l'IDB pendant le raisonnement. Les serveurs MCP basés sur URL (`SSE` ou `HTTP streamable`) et les serveurs MCP basés sur stdio démarrés à partir d'une commande CLI locale sont pris en charge. IDAssist fournit également des outils internes intégrés pour l'appel de fonction sans nécessiter de serveur MCP externe. ### Appel de fonction Les fournisseurs LLM avec support d'appel d'outils peuvent invoquer des fonctions d'analyse IDA en cours de conversation, permettant une investigation itérative sans intervention manuelle. ### Feedback RLHF Fournissez un feedback pouce vers le haut/pouce vers le bas sur les explications et les réponses aux requêtes. Les retours sont stockés localement et peuvent être utilisés pour améliorer l'ingénierie des prompts et la sélection des modèles. ## Architecture IDAssist suit un modèle MVC (Modèle-Vue-Contrôleur) : - **Vues** (`src/views/`) — Widgets d'onglets PySide6 qui émettent des signaux lors des interactions utilisateur - **Contrôleurs** (`src/controllers/`) — Connectent les signaux des vues aux appels de services, gèrent l'état - **Services** (`src/services/`) — Logique métier, fournisseurs LLM, accès à la base de données, analyse de graphe - **Outils internes** (`src/services/internal_tools.py`) — Définitions d'outils spécifiques à IDA pour l'appel de fonction LLM - **Outils graphiques** (`src/services/graphrag/graphrag_tools.py`) — Outils de lecture/écriture du graphe sémantique pour l'interaction LLM Principes de conception clés : - Tous les appels à l'API IDA s'exécutent sur le thread principal via `execute_on_main_thread()` - Les réponses LLM sont diffusées de manière incrémentielle vers l'interface utilisateur - Bases de données SQLite locales pour la persistance (aucune base de données externe requise) - Registre de services singleton avec initialisation thread-safe ## Démarrage rapide 1. **Installer le plugin** (recommandé — Gestionnaire de plugins IDA) : ``` hcli plugin install idassist ``` Ceci installe automatiquement le plugin et ses dépendances Python dans l'environnement IDA. 2. **Ou installer manuellement** (à partir de l'archive de version) : Téléchargez le dernier zip de version depuis les [versions GitHub](https://github.com/jtang613/IDAssist/releases) et extrayez-le dans votre répertoire de plugins IDA : **Linux / macOS :** ```bash unzip IDAssist-*.zip -d ~/.idapro/plugins/ ``` **Windows :** Extrayez le zip dans `%APPDATA%\Hex-Rays\IDA Pro\plugins\`. Installez ensuite les dépendances en utilisant **le Python fourni avec IDA** (pas votre Python système) : **Linux / macOS :** ```bash <IDA_INSTALL_DIR>/python3/bin/pip3 install -r ~/.idapro/plugins/IDAssist/requirements.txt ``` **Windows :** ```cmd "<IDA_INSTALL_DIR>\python3\python.exe" -m pip install -r "%APPDATA%\Hex-Rays\IDA Pro\plugins\IDAssist\requirements.txt" ``` > Remplacez `<IDA_INSTALL_DIR>` par le chemin d'installation de votre IDA Pro (par exemple, `/opt/idapro-9.0` ou `C:\Program Files\IDA Pro 9.0`). > > **Astuce :** Vous pouvez également définir la variable d'environnement `IDAUSR` sur un répertoire personnalisé contenant un sous-répertoire `plugins/`. 3. **Ouvrir IDAssist :** Lancez IDA Pro, ouvrez un binaire et appuyez sur `Ctrl+Shift+A` (ou Édition > Plugins > IDAssist). 4. **Configurer un fournisseur :** Allez dans l'onglet Paramètres, cliquez sur **Ajouter** sous Fournisseurs LLM, et configurez votre fournisseur préféré. 5. **Analyser une fonction :** Naviguez vers n'importe quelle fonction, cliquez sur l'onglet **Explain** et appuyez sur **Expliquer la fonction**. Pour des instructions détaillées, voir [Démarrage](https://github.com/symgraph/idassist/blob/master/docs/getting-started.md). ## Configuration des fournisseurs LLM IDAssist prend en charge les types de fournisseurs suivants : | Type | Méthode d'authentification | Notes | |------|-------------|-------| | `anthropic_platform` | Clé API | API Anthropic directe | | `anthropic_oauth` | OAuth (navigateur) | Authentification basée sur navigateur | | `anthropic_claude_cli` | CLI locale | Utilise le binaire CLI `claude` | | `bedrock` | Identifiants AWS | API Converse AWS Bedrock directe | | `openai_platform` | Clé API | API OpenAI directe | | `openai_oauth` | OAuth (navigateur) | Authentification basée sur navigateur | | `ollama` | Aucun (local) | Modèles auto-hébergés | | `litellm` | URL de proxy | Proxy multi-fournisseur | ### Modèles recommandés | Fournisseur | Modèle | Atouts | |----------|-------|-----------| | Anthropic | `claude-sonnet-4-6` | Analyse de code solide, réflexion étendue | | OpenAI | `gpt-5.3-codex` | Rapide, bonne analyse générale | | Ollama | `qwen2.5-coder:32b` | Local, aucune clé API requise | ## Utilisation du graphe sémantique L'onglet Graphe sémantique fournit un graphe de connaissances du binaire : 1. **Réindexer le binaire** — Extrait la structure des fonctions, le graphe d'appels et les références croisées 2. **Analyse sémantique** — Génère des résumés LLM pour chaque fonction 3. **Analyse de sécurité** — Détecte les motifs de vulnérabilité et les API pertinentes pour la sécurité 4. **Flux réseau** — Suit les opérations réseau à travers le graphe d'appels 5. **Détection de communautés** — Regroupe les fonctions connexes en modules Explorez le graphe via la **Vue liste** (appelants, appelés, arêtes, drapeaux), le **Graphe visuel** (diagramme de nœuds interactif avec expansion N-sauts), ou la **Recherche** (7 types de requêtes incluant la recherche sémantique, les fonctions similaires et le contexte d'appel). ## Actions du menu contextuel Cliquez avec le bouton droit dans toute vue de désassemblage ou pseudocode pour accéder à : | Action | Raccourci | Effet | |--------|--------|--------| | Expliquer la fonction | `Ctrl+Shift+E` | Ouvre l'onglet Explain et génère une explication | | Demander à propos de la sélection | `Ctrl+Shift+Q` | Ouvre l'onglet Query avec le contexte `#func` | | Suggestions de renommage | — | Ouvre l'onglet Actions et génère des suggestions | ## Prérequis - **IDA Pro 9.0+** avec Python 3 et PySide6 - **Décompilateur Hex-Rays** (recommandé pour les fonctionnalités de pseudocode) - Paquets Python listés dans `requirements.txt` ## Documentation - [Index de la documentation](https://github.com/symgraph/idassist/blob/master/docs/index.md) - [Démarrage](https://github.com/symgraph/idassist/blob/master/docs/getting-started.md) - Références des onglets : [Explain](https://github.com/symgraph/idassist/blob/master/docs/tabs/explain-tab.md) | [Query](https://github.com/symgraph/idassist/blob/master/docs/tabs/query-tab.md) | [Actions](https://github.com/symgraph/idassist/blob/master/docs/tabs/actions-tab.md) | [Graphe sémantique](https://github.com/symgraph/idassist/blob/master/docs/tabs/semantic-graph-tab.md) | [RAG](https://github.com/symgraph/idassist/blob/master/docs/tabs/rag-tab.md) | [Paramètres](https://github.com/symgraph/idassist/blob/master/docs/tabs/settings-tab.md) - Flux de travail : [Explain](https://github.com/symgraph/idassist/blob/master/docs/workflows/explain-workflow.md) | [Query](https://github.com/symgraph/idassist/blob/master/docs/workflows/query-workflow.md) | [Graphe sémantique](https://github.com/symgraph/idassist/blob/master/docs/workflows/semantic-graph-workflow.md) ## Page d'accueil [https://symgraph.ai](https://symgraph.ai) ## Licence Voir le fichier LICENSE pour plus de détails.