
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.
.i64Pré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) :
| Champ | Description |
|---|---|
| idadir | Répertoire d'installation d'IDA (par défaut : auto-détecté) |
| idb_dir | Où les nouveaux IDB sont créés (par défaut : à côté du binaire) |
| default_db | Utilisé lorsque -d est omis |
| save | Sauvegarder l'IDB après chaque commande (par défaut true) |
| auto_analyse | Exécuter l'auto-analyse complète lors de la création d'un IDB (par défaut true) |
À côté du binaire : ./target.bin → ./target.bin.i64. Définissez idb_dir dans la
configuration pour changer l'emplacement.
batch ouvre l'IDB une seule fois et exécute chaque opération sur ce handle (sauvegarde une fois
à la fin) — idéal lorsque vous avez besoin de plusieurs informations sur une seule base de données. parallel
lance un sous-processus par base de données (IDALib n'est pas thread-safe, donc l'isolation se fait
par processus) avec un pool de workers plafonné par --jobs — idéal pour de nombreux échantillons.
-d accepte un chemin unique, une liste séparée par des virgules, ou un glob (*.i64).
Non. Un processus par IDB à la fois. parallel respecte cela en lançant un
sous-processus par base de données ; pour le travail manuel multi-agents, donnez à chaque agent sa propre
cible -d.
idalib-rs génère ses bindings FFI au moment de la compilation en analysant les en-têtes du SDK
(bindgen). Le SDK n'est fourni qu'avec votre licence Hex-Rays et n'est jamais
redistribué ni intégré — le binaire compilé se lie à votre propre installation IDA
à l'exécution.
idalib-cli/
├── src/
│ ├── cli.rs # clap definitions; every command + -d/--db
│ ├── ops/ # metadata, comments, bookmarks, db, batch, parallel, ...
│ ├── session/ # config.toml handling
│ └── helpers/ # JSON output views
├── stubs/idalib/ # dev-only API stub (SDK-free checks, never shipped)
├── tests/ # integration tests
├── skills/idalib-cli/ # single agent skill (workflow guide)
└── examples/workflow.sh # runnable end-to-end example
Les versions de l'outil sont x.y.z ; une branche de développement + une branche de release par version mineure :
| Réf | Objectif | Exemple |
|---|---|---|
main | dernier développement (cible de fusion de v*_dev) | — |
v0.9_dev | branche de développement pour l'outil 0.9.x | travail en cours |
v0.9_release | branche stable pour l'outil 0.9.x (correctifs uniquement) | backports |
v0.9.1 (tag) | point de release | release actuelle |
| Version de l'outil | IDA compatible | idalib-rs |
|---|---|---|
| 0.9.x | 9.1 | 0.6.1 (épinglé =0.6.1) |
suivante (v0.10_*) | nouvelle version d'IDA | dépendance mise à jour |
Prendre en charge une nouvelle version d'IDA = mettre à jour la dépendance idalib, mettre à jour
[package.metadata.ida] dans Cargo.toml, ouvrir une nouvelle ligne de branche (v0.10_*).
Distribué sous la Apache License 2.0. Le champ license dans
Cargo.toml déclare MIT OR Apache-2.0 pour la compatibilité avec les
dépendances idalib-rs ; ce dépôt
ne fournit que le texte Apache-2.0. Ne jamais committer ni redistribuer le SDK IDA.