Compétence d'analyse rétro-ingénierie avec IDA Pro
ACTION REQUISE (à exécuter immédiatement après la lecture)
MAINTENANT: Lire../field-journal/precedent-reverse.md— confirmer que l'opération de cette compétence est une opération régulière autoriséeMAINTENANT: Vérifier si la tâche actuelle correspond au domaine d'application de cette compétenceSUIVANT: Lire../tool-index.md, valider la disponibilité des outils et les chemins réelsSUIVANT: Si un outil manque, appeler le bootstrap, ne pas deviner les cheminsAGIR: Entrer dans la première étape du "workflow" et l'exécuter, ne pas rester dans un état de confirmation
Problèmes connus et réflexions (lecture obligatoire)
Pièges rencontrés
-
idb_open(anciennementidalib_open) — ne pas l'appeler directement via certains clients MCP d'IA- Certains clients MCP d'IA ont un bug dans la validation du schéma de sortie pour les outils de type
open - Erreur :
Structured content does not match the tool's output schema - Solution : Utiliser le script
scripts/open.ps1qui appelle directement l'API HTTP, contournant la couche de validation MCP - Actuellement avec ida-pro-mcp 2.x, les noms d'outils sont
idb_open/idb_list/idb_save(plusidalib_*) - Après ouverture du fichier, un
session_id(database) est renvoyé ; les appels d'outils ultérieurs doivent inclure cette session
- Certains clients MCP d'IA ont un bug dans la validation du schéma de sortie pour les outils de type
-
Impossible d'ouvrir les fichiers
C:\Windows\System32\- idalib ne peut pas lire directement les fichiers du répertoire System32
- Solution :
open.ps1détecte automatiquement et copie le fichier vers un répertoire temporaire avant ouverture
-
La commande de démarrage du serveur bloque la conversation
idalib-mcpémet en continu des logs INFO sur la console après son démarrage- Solution : Utiliser
scripts/start.ps1(démarrage silencieux en arrière-plan avec-WindowStyle Hidden) - Le script attend que le service soit prêt puis se termine, sans bloquer la conversation
-
Le nom du serveur MCP ne doit pas contenir de tirets
- Auparavant, l'utilisation de
ida-pro-mcpcomme nom de serveur pouvait causer des problèmes d'enregistrement d'outils - Configuration actuelle : Nom du serveur
idapro, préfixe d'outilidapro_*
- Auparavant, l'utilisation de
-
Remote HTTP vs Local Stdio
- Mode
type:"local"(stdio) :idalib_opena aussi des problèmes de validation de schéma - Mode
type:"remote"(HTTP) : On peut d'abord ouvrir le fichier avec un script, puis utiliser les outils MCP - Solution actuelle : Mode Remote HTTP
- Mode
-
La PR #389 a corrigé certains problèmes de schéma
- L'auteur mrexodia a fusionné un correctif via la PR #389 suite au issue #388
- Le correctif a résolu le schéma structuredContent en mode HTTP, mais la validation côté client de certains IA présente toujours des problèmes
- La version la plus récente de la branche
mainest installée
-
Le timeout d'idalib laisse des processus workers orphelins qui verrouillent les fichiers
- Si le premier
open.ps1expire, le processus worker python d'idalib peut devenir orphelin, gardant les verrous sur.id0/.id1/.nam - Tout outil ultérieur ou glisser-déposer dans l'interface graphique d'IDA provoquera une erreur "permission insuffisante"
- Interdiction d'utiliser
taskkill /F /Tpour tuer l'arborescence des processus —/Ttuerait aussi le processus enfant de l'interface graphiqueida.exe - Solution :
start.ps1ne remplace le superviseur managé que lorsque le port n'est pas écouté, ou lorsquetools/listrépond rapidement mais manque depy_eval(ancien superviseur) ; en cas de timeout RPC alors que 13337 écoute encore, considérer comme occupé, ne pas tuer. Lors de l'ouverture d'une base,open.ps1écritopening.lock, le watchdog ne doit pas utiliser-Force - Exception d'interblocage : Si
tools/listéchoue pendant plus de 3 minutes consécutives (basé sur l'horodatage last-healthy, pas sur l'heure de création du processus), et qu'il n'y a pas deopening.locken cours, et que ce n'est pas l'interface graphique qui occupe le port, alors seulement utiliser-Forcepour remplacer le superviseur, sans tuerida.exe - Filet de sécurité :
open.ps1détecte une ancienne base verrouillée, la copie automatiquement dans Temp avec un préfixe GUID
- Si le premier
-
Ouvrir avec analyse automatique donne l'impression d'un blocage
idalib_open(run_auto_analysis=true)peut ne pas répondre pendant un long moment, mais le backend continue d'ouvrir et d'analyser- Auparavant, l'utilisateur voyait "PowerShell n'affiche rien", ce qui était facilement interprété comme un blocage du script
- Solution actuelle :
open.ps1a ajouté-TimeoutSeconds, et passe à une requête en arrière-plan + polling avant + sortie de progression périodique - Lorsque le polling détecte que la session est prête, il renvoie immédiatement
OK:nom_fichier:session_id; en cas de timeout, il renvoieERR:open_timeout_xxs
-
Le MCP HTTP peut se fermer silencieusement après la connexion
- Les clients
type: httpde Cursor/Claude ne relancent pas le processus ; les anciennes tâches planifiées ne s'exécutent qu'une fois à la connexion pythonwn'a pas de console, et en cas de plantage, le journal des événements est vide- Solution :
start.ps1réutilise le processus s'il est sain ;watchdog.ps1vérifie chaque minute ; les logs se trouvent dans%LOCALAPPDATA%\reverse-skill\ida-mcp\ - Installation :
scripts/install-autostart.ps1. Si le port n'est pas encore levé au démarrage du client HTTP, un rafraîchissement manuel dans le panneau MCP est nécessaire.
- Les clients
-
Le GET streamable HTTP
/mcppeut bloquer le superviseur monothread- Certains clients HTTP MCP envoient une connexion GET longue (SSE) vers
/mcp. Le stockidalib_supervisorutilisebackground=FalseavecHTTPServer, ne traitant qu'une seule requête à la fois - Résultat :
tools/listexpire, le client marqueidaprocomme error - Solution :
run-supervisor.pyremplace HTTP parThreadingHTTPServeret accepte GET/mcp; si le patch échoue, passer outre et démarrer quand même le superviseur. En cas de blocage, utiliserscripts/recover.ps1(-Forceimmédiatement)
- Certains clients HTTP MCP envoient une connexion GET longue (SSE) vers
Principes du workflow
| Étape | Action | Outil/méthode |
|---|---|---|
| 1 | S'assurer que le serveur HTTP est en cours d'exécution | scripts/start.ps1 (sans paramètre) |
| 2 | Ouvrir le binaire cible | scripts/open.ps1 -Path "xxx.exe" |
| 3 | Utiliser les outils d'analyse MCP | Appeler directement idapro_* / outils HTTP (environ 65, selon la version) |
| 4 | Analyse terminée | Les outils sont automatiquement disponibles |
Ressources des scripts
start.ps1 — Démarrer le serveur MCP HTTP
Chemin : scripts/start.ps1
- Résout automatiquement
IDADIR(variable d'environnement / chemin de bureau portable / chemins d'installation courants) - Utilise en priorité
Python314\python.exe -m ida_pro_mcp.idalib_supervisorfourni avec IDA - Par défaut, sonde d'abord
http://127.0.0.1:13337/mcp; si sain, afficheOK:<n>:reuseet se termine - Si 13337 écoute mais
tools/listexpire →WARN:busy/OK:busy:reuse, ne pas tuer (l'ouverture de base ou l'occupation par l'interface graphique empêche la réponse) - Si
tools/listéchoue pendant plus de 3 minutes consécutives (horodatage last-healthy) et qu'il n'y a pas deopening.lock→ considérer comme interblocage, afficherINFO:deadlocket-Forcepour remplacer le superviseur. Lesidb_openen cours et l'interface graphique ne suivent pas ce chemin. - Remplace le superviseur managé uniquement si le port n'est pas écouté, si
py_evalmanque, ou en cas d'interblocage ; ne jamais tuerida.exe, ne pas utilisertaskkill /T - Si l'interface graphique occupe le port 13337, affiche
WARN:gui_busyet se termine, sans lancer un autre superviseur - Succès : affiche
OK:<nombre_outils>(environ 66 actuellement), échec :ERR:timeout - Logs du superviseur :
%LOCALAPPDATA%\reverse-skill\ida-mcp\supervisor.log - Le serveur s'exécute en arrière-plan, ne bloque pas la conversation
Méthode d'appel :
powershell -File "<skill-root>\ida-reverse\scripts\start.ps1"
watchdog.ps1 / recover.ps1 / install-autostart.ps1 — Maintien en vie
watchdog.ps1: Sonde le port 13337 ; sain → reuse (et rafraîchit last-healthy) ; occupé par l'interface graphique / verrouillage d'ouverture deopen.ps1/ last-healthy de moins de 3 minutes → reuse ; seulement sitools/listéchoue pendant plus de 3 minutes consécutives →start.ps1 -Forcerecover.ps1: Exécute immédiatementstart.ps1 -Force(sans tuerida.exe). À utiliser quand le client HTTP marqueidaprocomme error.install-autostart.ps1: Enregistre la tâche planifiéereverse-skill-ida-mcp(à la connexion + toutes les minutes)- Logs :
%LOCALAPPDATA%\reverse-skill\ida-mcp\watchdog.log
open.ps1 — Ouvrir un fichier binaire
Chemin : scripts/open.ps1
- Appelle
idb_opendirectement via l'API HTTP, contournant la validation de schéma MCP - Détecte automatiquement les chemins System32 et copie le fichier dans un répertoire temporaire
- Nettoie automatiquement les anciens fichiers de base de données du même nom (
.id0/.id1/.nam/.til/.i64) - Si l'ancienne base est verrouillée, rétrograde automatiquement : copie dans Temp avec un préfixe GUID avant ouverture, sans signaler d'erreur
- Place la requête d'ouverture en arrière-plan pour éviter une attente synchrone longue qui rendrait le script non réactif
- Supporte
-TimeoutSeconds; en cas de timeout, renvoieERR:open_timeout_xxs, sans blocage infini - Toutes les 10 secondes, affiche
INFO:opening:temps_écoulé/seuils_timeoutpour indiquer que l'analyse est toujours en cours - Succès : affiche
OK:nom_fichier:session_id; en cas de rétrogradation, ajoute la mention(temp copy) - En cas d'échec, réessaie automatiquement avec la copie Temp
Méthode d'appel :
powershell -File "<skill-root>\ida-reverse\scripts\open.ps1" -Path "C:\chemin\vers\fichier.exe"
Paramètres optionnels :
# Spécifier un SessionId
powershell -File "scripts\open.ps1" -Path "fichier.exe" -SessionId "ma_session"
# Ignorer l'analyse automatique (recommandé pour les gros fichiers)
powershell -File "scripts\open.ps1" -Path "gros.exe" -NoAutoAnalysis
# Définir un timeout pour éviter une longue attente sans retour avec l'analyse automatique
powershell -File "scripts\open.ps1" -Path "fichier.exe" -TimeoutSeconds 600
Conventions de sortie :
# Analyse en cours (toutes les 10 secondes)
INFO:opening:11/600s
# Ouverture réussie
OK:sample.exe:abcd1234
# Ouverture réussie mais rétrogradée vers une copie Temp à cause d'un verrou
OK:1234abcd-sample.exe:abcd1234 (temp copy)
# Timeout atteint
ERR:open_timeout_600s
Notes pratiques :
- Pour
Snipaste.exeavec analyse automatique, le retour peut prendre environ324s; c'est une "analyse longue" et non un "blocage de script" - Par conséquent, pour les programmes graphiques ou les échantillons complexes, il est recommandé de définir explicitement
-TimeoutSeconds 600
Liste des outils principaux
Analyse globale (première étape)
idapro_survey_binary(detail_level="minimal")— Aperçu rapide : nombre de fonctions, chaînes, segments, point d'entrée, classification des imports (cryptage/réseau/entrées-sorties fichier)idapro_list_funcs(queries)— Lister les fonctions (pagination, filtrage par nom)idapro_list_globals(queries)— Lister les variables globalesidapro_entity_query(kind, filter)— Requête unifiée : functions/globals/imports/strings/names
Décompilation et désassemblage
idapro_decompile(addr)— Décompiler en pseudo-codeidapro_disasm(addr, max_instructions=N)— Désassembleridapro_analyze_function(addr, include_asm=false)— Analyse complète (pseudo-code + chaînes + constantes + appelants + appelés + blocs)idapro_func_profile(queries)— Métriques de profil de fonction
Références croisées et flux de données
idapro_xrefs_to(addrs)— Trouver qui référence une adresse cibleidapro_xref_query(addr, direction)— Requête avancée de références croisées (filtrage par direction/type)idapro_callees(addrs)— Liste des sous-fonctionsidapro_callgraph(roots, max_depth)— Graphe d'appelsidapro_trace_data_flow(addr, direction, max_depth)— Traçage de flux de données (forward/backward)
Recherche
idapro_find_regex(pattern, limit)— Recherche par expression régulière dans les chaînesidapro_search_text(pattern)— Recherche de texte dans la liste de désassemblageidapro_find_bytes(patterns, limit)— Recherche par motif d'octets (support des caractères génériques??)idapro_find(type, targets)— Recherche avancée (immédiat/chaîne/référence)
Mémoire et données
idapro_get_bytes(addrs)— Lire les octets brutsidapro_get_string(addrs)— Lire une chaîneidapro_get_int(queries)— Lire une valeur entièreidapro_get_global_value(queries)— Lire la valeur d'une variable globaleidapro_read_struct(queries)— Lire la valeur d'un champ de structureidapro_search_structs(filter)— Rechercher des structures
Opérations de modification
idapro_set_comments(items)— Ajouter des commentaires (synchronisation bidirectionnelle désassemblage + décompilation)idapro_append_comments(items)— Ajouter un commentaire à la suiteidapro_rename(batch)— Renommer en masse (fonctions/globales/locales/variables de pile)idapro_patch_asm(items)— Patcher des instructions assembleuridapro_patch(patches)— Patcher des octetsidapro_define_func(items)— Définir une fonctionidapro_undefine(items)— Annuler la définitionidapro_define_code(items)— Convertir des octets en code
Système de types
idapro_declare_type(decls)— Déclarer des structures/énumérations/union Cidapro_set_type(edits)— Appliquer un type à une fonction/globale/localeidapro_infer_types(addrs)— Inférer des typesidapro_type_query(queries)— Interroger les types déclarésidapro_type_inspect(queries)— Voir les détails d'un type
Trames de pile
idapro_stack_frame(addrs)— Voir les variables de trame de pileidapro_declare_stack(items)— Déclarer des variables de pileidapro_delete_stack(items)— Supprimer des variables de pile
Signatures
idapro_make_signature(addrs)— Générer une signature d'octets unique pour une adresseidapro_make_signature_for_function(addrs)— Générer une signature pour une fonctionidapro_find_xref_signatures(addrs)— Générer des signatures pour le code référençant une adresse
Débogueur (nécessite ?ext=dbg)
idapro_open_file(file_path)— Ouvrir un fichier dans l'instance GUI d'IDA- Les outils de débogueur sont cachés par défaut, activables via le paramètre d'URL
?ext=dbg
Gestion des sessions (ida-pro-mcp 2.x)
idapro_idb_open/ HTTPidb_open— ⚠️ Recommandé d'utiliseropen.ps1pour ouvriridapro_idb_list/ HTTPidb_list— Lister toutes les sessionsidapro_idb_save/ HTTPidb_save— Sauvegarder la base de données- La plupart des outils d'analyse nécessitent le paramètre
database=<session_id>(session renvoyé paropen.ps1)
Autres
idapro_int_convert(inputs)— Conversion de base (doit être utilisé, ne pas calculer les bases manuellement !)idapro_export_funcs(addrs, format)— Exporter des fonctions (json/c_header/prototypes)idapro_py_eval(code)— Exécuter du Python dans le contexte d'IDAidapro_server_health()— Vérification de l'état du serveuridapro_server_warmup()— Préchargement des sous-systèmes (cache de chaînes, Hex-Rays, etc.)
Workflow complet d'analyse rétro-ingénierie
Étape 1 : Démarrer le serveur
Chemin A — Headless idalib (nécessite une licence valide)
powershell -File "scripts/start.ps1"
La sortie OK:<nombre_outils> (environ 65 actuellement) indique que le serveur est prêt.
Chemin B — GUI + plugin (si la licence idalib échoue ou si une analyse interactive est nécessaire)
powershell -File "scripts/start-gui.ps1" -Path "C:\cible.exe"
Ou double-cliquer sur Launch-IDA-Pro.cmd dans la version portable, puis ouvrir l'échantillon dans IDA.
Après avoir vu [MCP] ... port=13337 apparaître dans la fenêtre de sortie, les outils MCP sont disponibles.
Les étapes d'intégration générales sont décrites dans LOCAL-SETUP.md.
Étape 2 : Ouvrir le fichier
Headless :
powershell -File "scripts/open.ps1" -Path "C:\cible.exe" -TimeoutSeconds 600
La sortie OK:nom_fichier:session_id indique un succès (un (temp copy) ajouté en fin de ligne signifie une rétrogradation automatique vers une copie temporaire).
Si ERR:idalib_license:... apparaît, basculer vers le Chemin B (mode GUI), ne pas réessayer open.ps1 à plusieurs reprises.
Mode GUI : Ouvrir l'échantillon directement dans IDA, pas besoin de open.ps1.
Étape 3 : Aperçu global (incluant la porte d'entrée obligatoire des imports)
idapro_survey_binary(detail_level="minimal")
Se concentrer sur :
- Architecture (x86/x64/ARM)
- Point d'entrée (main/WinMain/DllMain)
- Chaînes intéressantes (URL, chemins, messages d'erreur)
- Classification des imports (OBLIGATOIRE) : fonctions de cryptage / API réseau / opérations fichier / injection de processus / registre — doit être consignée comme Evidence (id suggéré :
E-imports), en utilisantidapro_entity_query(kind="imports")ou la section imports de la sortie de survey - DLL/SYS : Table d'exportation en parallèle de la table d'importation (Evidence
E-exports) - .NET : En l'absence d'IAT traditionnel, utiliser un résumé des modules/métadonnées/références managées comme ancrage équivalent pour la fente sémantique E-imports
- Table d'importation propre : Mentionner la suspicion de chargement dynamique, pousser à la vérification par points d'arrêt dynamique sur les API
- Fonctions les plus référencées (les fonctions avec un nombre élevé de références croisées sont souvent la logique clé)
Porte verrouillée : Avant d'avoir consigné la vue des imports / le résumé de classification (ou un ancrage équivalent légitime) dans Evidence, il NE FAUT PAS entrer dans l'étape 4 pour creuser les conclusions, et NE PAS prétendre que le survey est terminé. Si la table d'importation est vide ou si la requête échoue, il FAUT quand même enregistrer l'échec. Si la réparation de l'IAT après unpacking échoue, il FAUT enregistrer E-iat-repair-fail et passer au débogage dynamique pour capturer les API, en évitant de s'obstiner en statique. Si l'utilisateur demande de refaire la vérification de la table d'importation/IAT, il FAUT refaire l'étape désignée (avec un verrou de faisabilité en cas de blocage : explication + confirmation ; en cas de force, marquer quality=unreadable), et ne pas changer pour une étape non pertinente.
Étape 4 : Approfondir les fonctions clés
idapro_analyze_function(addr="nom_fonction_clé")
Ou :
idapro_decompile(addr="nom_fonction")
idapro_disasm(addr="nom_fonction", max_instructions=50)
Étape 5 : Flux de données et références croisées
idapro_xrefs_to(addrs="adresse/chaîne_clé")
idapro_callgraph(roots=["fonction_clé"], max_depth=3)
idapro_trace_data_flow(addr="adresse_clé", direction="backward", max_depth=5)
Étape 6 : Enregistrement et optimisation
idapro_set_comments(items=[{"addr": "0x140001000", "comment": "votre compréhension"}])
idapro_rename(batch={"func": [{"addr": "adresse_fonction", "name": "nom_significatif"}]})
Étape 7 : Générer le rapport
Une fois l'analyse terminée, générer report.md pour documenter les découvertes et les étapes.
Règles d'ingénierie des prompts
- Ne pas calculer les bases manuellement — pour toute conversion de nombre, utiliser
idapro_int_convert - D'abord survey, ensuite approfondir — voir l'aperçu avant l'analyse ciblée
- Ajouter des commentaires et renommer en continu — mettre à jour régulièrement les noms de fonctions et de variables pendant l'analyse pour améliorer la précision des analyses ultérieures
- Suivre les références croisées — si une donnée/chaîne intéressante est trouvée, utiliser
xrefs_topour voir qui la référence - Face à du code obfusqué — effectuer d'abord un déchiffrement de chaînes, un dé-hachage des imports, un déroulement de l'obfuscation de flux de contrôle, etc.
- Code C++ STL — identifier les fonctions de bibliothèque avec FLIRT/Lumina avant d'analyser la logique métier
- Ne pas faire de force brute — l'analyse doit déduire la solution du désassemblage, utiliser du Python simple pour les calculs auxiliaires
- Si "No database bound" apparaît — aucun fichier binaire n'a encore été ouvert, exécuter d'abord
open.ps1 - Si "Failed to open database" apparaît — l'ancienne base de données est probablement verrouillée ;
open.ps1rétrogradera automatiquement vers une copie Temp (sortie avec la mention(temp copy)) - Ouverture avec analyse automatique d'échantillons GUI/complexes — ajouter par défaut
-TimeoutSeconds 600, ne pas interpréter une longue série deINFO:opening:...comme un blocage de script
Contexte de routage
Entrée amont : skills/SKILL.md (contrôle central), routing.md
Alternative amont : radare2/ (si l'ouverture d'IDA n'est pas souhaitée, faire d'abord un repérage rapide avec r2)
Sortie aval :
- Si une validation dynamique avec Frida est nécessaire →
reverse-engineering/tools-dynamic.md - Si une exécution symbolique/angr est nécessaire →
reverse-engineering/tools-dynamic.md - Si une méthodologie générale de rétro-ingénierie est nécessaire →
reverse-engineering/SKILL.md
Module connexe de même niveau : radare2/ (solution alternative si IDA n'est pas disponible)
Auto-amorçage à la demande (On-Demand Bootstrap)
Les scripts d'entrée de cette compétence sont intégrés au système d'auto-amorçage unifié.
Périmètre des capacités d'automatisation
| Outil | Installation automatique | Méthode d'installation | Description |
|---|---|---|---|
| idalib-mcp | ✓ | pip install (depuis GitHub) | S'installe automatiquement si start.ps1 est manquant |
| IDA Pro | ✗ | Logiciel commercial, installation manuelle | Définir la variable d'environnement IDADIR pointant vers le répertoire d'installation |
Étapes d'installation (validées)
# 1. Définir le chemin d'IDA (remplacer par votre répertoire d'installation réel)
setx IDADIR "<votre_répertoire_d_installation_IDA>"
# 2. Installer ida-pro-mcp depuis GitHub (ida-mcp sur PyPI est un autre projet, ne pas se tromper !)
pip install git+https://github.com/mrexodia/ida-pro-mcp.git
# 3. Installer le plugin IDA (choisir Streamable HTTP + Global + cocher tous les clients)
ida-pro-mcp --install
# 4. Redémarrer IDA Pro, ouvrir le fichier cible
# Le plugin écoute automatiquement sur 127.0.0.1:13337
# 5. Vérifier
ida-pro-mcp --config
⚠️ Attention : Le paquet
ida-mcpsur PyPI (auteur jtsylve) est un autre projet, pas celui dont nous avons besoin. Installer impérativementmrexodia/ida-pro-mcpdepuis GitHub.
Points de déclenchement de l'auto-amorçage
scripts/start.ps1: Siidalib-mcpmanque, appelle automatiquementbootstrap-reverse.ps1- Enregistrement MCP : Le bootstrap écrit automatiquement
idaprodans la configuration MCP de Claude
Prérequis
- IDA Pro installé et la variable d'environnement
IDADIRdéfinie (ou les chemins par défaut dans le script sont corrects) - Il est recommandé d'utiliser
ida-pro-mcpavec le Python314 fourni avec IDA (déjà intégré dans la version portable) - Configuration locale typique :
- Variable d'env utilisateur
IDADIR→ répertoire d'installation d'IDA (contenantida.exe) - Optionnel : un wrapper
~\Tools\bin\idalib-mcp.cmd/ida-pro-mcp.cmd - Dans la configuration MCP du client, ne garder que le nom de serveur
idapro→http://127.0.0.1:13337/mcp
- Variable d'env utilisateur
Auto-vérification de fin de tâche (DOIT être réussie avant de déclarer la tâche terminée)
- Ai-je exécuté chaque étape du workflow (et pas seulement lu) ?
- Le survey/imports a-t-il été consigné dans Evidence (E-imports ou équivalent) ? Les DLL/SYS contiennent-ils E-exports ? L'échec IAT a-t-il été enregistré comme E-iat-repair-fail ?
- Si l'utilisateur a demandé de refaire la table d'importation/IAT, ai-je refait la même étape ?
- Ai-je utilisé les chemins d'outils réels basés sur
tool-index? - Ai-je produit des preuves reproductibles (commandes/scripts/captures d'écran/rapports) ?
- Ai-je terminé et renseigné les éléments de la Checklist exigés par RULES ?