
CLI natif pour agent encapsulant IDA Pro IDALib pour une analyse binaire sans état avec sortie JSON : désassemblage, décompilation Hex-Rays, CFG, xrefs, chaînes de caractères, et traitement IDB par lots ou en parallèle.
CLI native pour agents dédiée à IDA Pro IDALib — chaque commande prend un seul flag -d/--db, chaque réponse est du JSON.
-d/--db <PATH> (un binaire ou un .i64) ; pas de démon, pas de gestion de session.Prérequis : IDA Pro 9.1 (sous licence, lancé une fois) · SDK IDA 9.1 décompressé (uniquement au moment de la compilation) · Rust + LLVM/Clang (prérequis bindgen)
export IDADIR="/Applications/IDA Professional 9.1.app/Contents/MacOS" # IDA install dir
export IDASDKDIR=/path/to/idasdk91 # unpacked SDK (absolute path!)
git clone <this-repo> && cd idalib-cli
cargo install --path .
idalib-cli info # ✅ verify tool version, IDA version, license
Le SDK est nécessaire uniquement au moment de la compilation ; le binaire se lie à vos bibliothèques IDA locales à l'exécution. Vérifications de développement sans SDK :
cargo test --no-default-features --features stub-idalib.
Chaque commande nécessite -d/--db <PATH> — un fichier IDB (.i64) ou un binaire (un
IDB est créé à côté lors de la première utilisation). Les adresses acceptent 0x401000 ou
401000. La sortie est toujours un seul document JSON ; les erreurs vont sur stderr avec un
code de sortie non nul.
| Commande | Description |
|---|---|
idalib-cli -d <bin-or-i64> db info | Chemins résolus, état IDB, taille |
| Commande | Description |
|---|---|
idalib-cli -d <db> meta | Type de fichier, compilateur, bitness |
idalib-cli -d <db> processor | Informations sur le processeur |
idalib-cli -d <db> segments | Tous les segments |
idalib-cli -d <db> segments-by-range -a <ea> | Segment contenant une adresse |
idalib-cli -d <db> functions [-u] | Liste des fonctions (-u = ignorer lib/thunk) |
idalib-cli -d <db> function -a <ea> | Une fonction : CFG, blocs, xrefs |
idalib-cli -d <db> disasm -a <ea> [-n N] | Désassembler N instructions (par défaut 8) |
idalib-cli -d <db> decompile -a <ea> [--all-blocks] | Pseudo-code Hex-Rays |
idalib-cli -d <db> insn -a <ea> | Instruction unique (+ classification group/is_call/is_ret) |
idalib-cli -d <db> strings | Liste des chaînes |
idalib-cli -d <db> names | Emplacements nommés |
idalib-cli -d <db> xrefs [-a <ea>] [--all] [--from] | Xrefs vers une adresse (par défaut) ou depuis celle-ci (--from), ou toutes |
idalib-cli -d <db> find --text <s> | Rechercher des occurrences de texte |
idalib-cli -d <db> find --imm 0x1337 | Rechercher des occurrences de valeur immédiate |
idalib-cli -d <db> find --pattern 554889e5 | Rechercher un motif d'octets hexadécimal |
idalib-cli -d <db> bytes -a <ea> [-n N] [--width byte|word|dword|qword] | Octets bruts (hexdump) ou entiers little-endian |
idalib-cli -d <db> entries | Points d'entrée |
| Commande | Description |
|---|---|
idalib-cli -d <db> comments get|set|append|remove -a <ea> [-c "text"] | Commentaires |
idalib-cli -d <db> bookmarks list|add|get|remove -a <ea> [-d "desc"] | Signets |
idalib-cli -d <db> rename -a <ea> -n <name> | Renommer une fonction / un label de données |
idalib-cli -d <db> set-type -a <ea> -t "int f(int, char *);" | Appliquer une déclaration de type C (prototype de fonction / type de données) |
idalib-cli -d <db> signatures --make [--only-pat] | Générer des signatures FLIRT |
| Commande | Description |
|---|---|
idalib-cli -d <db> batch -- <op> [<op>...] | Opérations séquentielles, IDB ouvert une seule fois |
idalib-cli parallel -d <list|glob> [--jobs N] -- <op> | Une opération sur plusieurs DBs, un sous-processus chacune |
idalib-cli info [--version|--ida|--all] | Version de l'outil / d'IDA, licence |
🔎 Triage d'un binaire inconnu
idalib-cli -d ./sample meta # what is it? (filetype/compiler/bitness)
idalib-cli -d ./sample segments # memory layout
idalib-cli -d ./sample strings # quick hints
idalib-cli -d ./sample functions -u # user code only
🔍 Approfondir une fonction
idalib-cli -d ./sample function -a 0x401000 # CFG + blocks + xrefs
idalib-cli -d ./sample decompile -a 0x401000 # read the pseudo-code
idalib-cli -d ./sample disasm -a 0x401000 -n 20 # or the raw instructions
idalib-cli -d ./sample xrefs -a 0x401000 --all # who calls it
📝 Annoter les découvertes (survit entre les processus/agents)
idalib-cli -d ./sample comments set -a 0x401000 -c "parses config, see 0x402100"
idalib-cli -d ./sample bookmarks add -a 0x401000 -d "entry point"
idalib-cli -d ./sample comments get -a 0x401000 # verify
⚡ Analyse en masse de nombreux échantillons
# first pass: create IDBs + overview for every sample
idalib-cli parallel -d "./samples/*.bin" -- "batch -- meta functions -u"
# deep pass: decompile one hot function in every IDB
idalib-cli parallel -d "./samples/*.i64" --jobs 8 -- "decompile -a 0x401000"
🔎 Rechercher & inspecter des données brutes
idalib-cli -d ./sample find --text "MAGIC" # string hits
idalib-cli -d ./sample find --imm 0x1337 # immediate-value hits
idalib-cli -d ./sample find --pattern 554889e5 # byte pattern (prologue)
idalib-cli -d ./sample bytes -a 0x401000 -n 32 # hexdump
idalib-cli -d ./sample bytes -a 0x401000 --width qword -n 4
idalib-cli -d ./sample xrefs -a 0x401000 --from # outgoing refs (calls)
idalib-cli -d ./sample rename -a 0x401000 -n decrypt # label it
idalib-cli -d ./sample set-type -a 0x401000 -t "int f(const char *, int);" # set prototype
🤖 Inspection par lots adaptée aux agents (un seul document JSON)
idalib-cli -d ./sample batch -- "meta" "segments" "functions -u" "decompile -a 0x401000"
Guide de workflow pour agents : skills/idalib-cli/SKILL.md ; un exemple
de bout en bout exécutable dans examples/workflow.sh.
decompile){
"id": 7,
"start": "0x401000",
"end": "0x401080",
"size": 128,
"name": "main",
"blocks": 3,
"decompiled": true,
"pseudocode": "int __cdecl main(...) { ... }"
}
Fichier optionnel ~/.idapro/idalib-cli/config.toml (répertoire de base : $IDALIB_CLI_HOME) :