
CLI nativo per agenti che incapsula IDA Pro IDALib per l'analisi binaria stateless con output JSON: disassemblaggio, decompilazione Hex-Rays, CFG, xref, stringhe e elaborazione IDB in batch o parallela.
Prerequisiti: IDA Pro 9.1 (con licenza, avviato almeno una volta) · IDA 9.1 SDK estratto (solo in fase di build) · Rust + LLVM/Clang (requisiti 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
L'SDK è necessario solo in fase di build; il binario collega le tue librerie IDA locali a runtime. Verifiche di sviluppo senza SDK:
cargo test --no-default-features --features stub-idalib.
Ogni comando richiede -d/--db <PATH> — un file IDB (.i64) o un binario (un
IDB viene creato accanto ad esso al primo utilizzo). Gli indirizzi accettano 0x401000 o
401000. L'output è sempre un documento JSON; gli errori vanno su stderr con un
codice di uscita non zero.
| Comando | Descrizione |
|---|---|
idalib-cli -d <bin-or-i64> db info | Percorsi risolti, stato IDB, dimensione |
| Comando | Descrizione |
|---|---|
idalib-cli -d <db> meta | Tipo di file, compilatore, bitness |
idalib-cli -d <db> processor | Informazioni sul processore |
idalib-cli -d <db> segments | Tutti i segmenti |
idalib-cli -d <db> segments-by-range -a <ea> | Segmento che contiene un indirizzo |
idalib-cli -d <db> functions [-u] | Elenco funzioni (-u = salta lib/thunk) |
idalib-cli -d <db> function -a <ea> | Una funzione: CFG, blocchi, xref |
idalib-cli -d <db> disasm -a <ea> [-n N] | Disassembla N istruzioni (default 8) |
idalib-cli -d <db> decompile -a <ea> [--all-blocks] | Pseudo-codice Hex-Rays |
idalib-cli -d <db> insn -a <ea> | Singola istruzione (+ classificazione group/is_call/is_ret) |
idalib-cli -d <db> strings | Elenco stringhe |
idalib-cli -d <db> names | Posizioni con nome |
idalib-cli -d <db> xrefs [-a <ea>] [--all] [--from] | Xref verso un indirizzo (default) o da esso (--from), o tutti |
idalib-cli -d <db> find --text <s> | Cerca occorrenze di testo |
idalib-cli -d <db> find --imm 0x1337 | Cerca occorrenze di valore immediato |
idalib-cli -d <db> find --pattern 554889e5 | Cerca un pattern di byte esadecimale |
idalib-cli -d <db> bytes -a <ea> [-n N] [--width byte|word|dword|qword] | Byte grezzi (hexdump) o interi little-endian |
idalib-cli -d <db> entries | Punti di ingresso |
| Comando | Descrizione |
|---|---|
idalib-cli -d <db> comments get|set|append|remove -a <ea> [-c "text"] | Commenti |
idalib-cli -d <db> bookmarks list|add|get|remove -a <ea> [-d "desc"] | Segnalibri |
idalib-cli -d <db> rename -a <ea> -n <name> | Rinomina una funzione / etichetta dati |
idalib-cli -d <db> set-type -a <ea> -t "int f(int, char *);" | Applica una dichiarazione di tipo C (prototipo di funzione / tipo di dato) |
idalib-cli -d <db> signatures --make [--only-pat] | Genera firme FLIRT |
| Comando | Descrizione |
|---|---|
idalib-cli -d <db> batch -- <op> [<op>...] | Operazioni sequenziali, IDB aperto una sola volta |
idalib-cli parallel -d <list|glob> [--jobs N] -- <op> | Un'operazione su molti DB, un sottoprocesso ciascuno |
idalib-cli info [--version|--ida|--all] | Versione tool / IDA, licenza |
🔎 Triage di un binario sconosciuto
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
🔍 Approfondire una funzione
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
📝 Annotare i risultati (sopravvive tra processi/agenti)
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
⚡ Analisi in blocco di molti campioni
# 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"
🔎 Cerca e ispeziona dati grezzi
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
🤖 Ispezione in batch per agenti (un documento JSON)
idalib-cli -d ./sample batch -- "meta" "segments" "functions -u" "decompile -a 0x401000"
Guida al flusso di lavoro per agenti: skills/idalib-cli/SKILL.md; un esempio
end-to-end eseguibile in examples/workflow.sh.
decompile){
"id": 7,
"start": "0x401000",
"end": "0x401080",
"size": 128,
"name": "main",
"blocks": 3,
"decompiled": true,
"pseudocode": "int __cdecl main(...) { ... }"
}
File opzionale ~/.idapro/idalib-cli/config.toml (directory base: $IDALIB_CLI_HOME):
| Campo | Descrizione |
|---|---|
| idadir | Directory di installazione IDA (default: rilevata automaticamente) |
| idb_dir | Dove vengono creati i nuovi IDB (default: accanto al binario) |
| default_db | Usato quando -d è omesso |
| save | Salva l'IDB dopo ogni comando (default true) |
| auto_analyse | Esegui l'auto-analisi completa quando crei un IDB (default true) |
Accanto al binario: ./target.bin → ./target.bin.i64. Imposta idb_dir nella
configurazione per cambiare la posizione.
batch apre l'IDB una volta e esegue ogni operazione su quell'handle (salva una volta
alla fine) — ideale quando ti servono diversi fatti su un singolo database. parallel
avvia un sottoprocesso per database (IDALib non è thread-safe, quindi l'isolamento è
per processo) con un pool di worker limitato da --jobs — ideale per molti campioni.
-d accetta un singolo percorso, una lista separata da virgole o un glob (*.i64).
No. Un processo per IDB alla volta. parallel rispetta questo avviando un
sottoprocesso per database; per il lavoro manuale multi-agente, assegna a ogni agente il proprio
target -d.
idalib-rs genera i suoi binding FFI in fase di compilazione analizzando gli header
dell'SDK (bindgen). L'SDK viene fornito solo con la tua licenza Hex-Rays e non viene mai
ridistribuito o incorporato — il binario compilato collega la tua installazione IDA
a runtime.
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
Le versioni del tool sono x.y.z; un branch di sviluppo + uno di release per ogni minor:
| Ref | Scopo | Esempio |
|---|---|---|
main | sviluppo più recente (target di merge di v*_dev) | — |
v0.9_dev | branch di sviluppo per il tool 0.9.x | lavoro corrente |
v0.9_release | branch stabile per il tool 0.9.x (solo fix) | backport |
v0.9.1 (tag) | punto di rilascio | release corrente |
| Versione tool | IDA compatibile | idalib-rs |
|---|---|---|
| 0.9.x | 9.1 | 0.6.1 (pinned =0.6.1) |
next (v0.10_*) | nuova versione IDA | dipendenza aggiornata |
Supportare una nuova versione IDA = aggiornare la dipendenza idalib, aggiornare
[package.metadata.ida] in Cargo.toml, aprire una nuova linea di branch (v0.10_*).
Distribuito sotto la Apache License 2.0. Il campo license in
Cargo.toml dichiara MIT OR Apache-2.0 per compatibilità con le
dipendenze di idalib-rs; questo repository
include solo il testo Apache-2.0. Non committare né ridistribuire mai l'IDA SDK.