
Agent-native CLI, das IDA Pro IDALib für zustandslose Binäranalyse mit JSON-Ausgabe kapselt: Disassemblierung, Hex-Rays-Dekompilierung, CFG, Xrefs, Strings sowie Batch- oder parallele IDB-Verarbeitung.
.i64Voraussetzungen: IDA Pro 9.1 (lizenziert, einmal gestartet) · IDA 9.1 SDK entpackt (nur zur Build-Zeit) · Rust + LLVM/Clang (bindgen-Anforderungen)
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
Das SDK wird nur zur Build-Zeit benötigt; die Binärdatei linkt zur Laufzeit gegen deine lokale IDA-Installation. Dev-Checks ohne SDK:
cargo test --no-default-features --features stub-idalib.
Jeder Befehl benötigt -d/--db <PATH> — eine IDB-Datei (.i64) oder eine Binärdatei (eine
IDB wird bei der ersten Verwendung daneben erstellt). Adressen akzeptieren 0x401000 oder
401000. Die Ausgabe ist immer ein JSON-Dokument; Fehler gehen an stderr mit einem
Nicht-Null-Exit-Code.
| Befehl | Beschreibung |
|---|---|
idalib-cli -d <bin-or-i64> db info | Aufgelöste Pfade, IDB-Zustand, Größe |
| Befehl | Beschreibung |
|---|---|
idalib-cli -d <db> meta | Dateityp, Compiler, Bitness |
idalib-cli -d <db> processor | Prozessor-Info |
idalib-cli -d <db> segments | Alle Segmente |
idalib-cli -d <db> segments-by-range -a <ea> | Segment, das eine Adresse enthält |
idalib-cli -d <db> functions [-u] | Funktionsliste (-u = lib/thunk überspringen) |
idalib-cli -d <db> function -a <ea> | Eine Funktion: CFG, Blöcke, Xrefs |
idalib-cli -d <db> disasm -a <ea> [-n N] | N Instruktionen disassemblieren (Standard 8) |
idalib-cli -d <db> decompile -a <ea> [--all-blocks] | Hex-Rays-Pseudocode |
idalib-cli -d <db> insn -a <ea> | Einzelne Instruktion (+ group/is_call/is_ret-Klassifizierung) |
idalib-cli -d <db> strings | String-Liste |
idalib-cli -d <db> names | Benannte Speicherorte |
idalib-cli -d <db> xrefs [-a <ea>] [--all] [--from] | Xrefs zu einer Adresse (Standard) oder von ihr (--from), oder alle |
idalib-cli -d <db> find --text <s> | Text-Treffer suchen |
idalib-cli -d <db> find --imm 0x1337 | Immediate-Wert-Treffer suchen |
idalib-cli -d <db> find --pattern 554889e5 | Ein Hex-Byte-Muster suchen |
idalib-cli -d <db> bytes -a <ea> [-n N] [--width byte|word|dword|qword] | Rohbytes (Hexdump) oder Little-Endian-Integer |
idalib-cli -d <db> entries | Einstiegspunkte |
| Befehl | Beschreibung |
|---|---|
idalib-cli -d <db> comments get|set|append|remove -a <ea> [-c "text"] | Kommentare |
idalib-cli -d <db> bookmarks list|add|get|remove -a <ea> [-d "desc"] | Lesezeichen |
idalib-cli -d <db> rename -a <ea> -n <name> | Eine Funktion / ein Datenlabel umbenennen |
idalib-cli -d <db> set-type -a <ea> -t "int f(int, char *);" | Eine C-Typdeklaration anwenden (Funktionsprototyp / Datentyp) |
idalib-cli -d <db> signatures --make [--only-pat] | FLIRT-Signaturen generieren |
| Befehl | Beschreibung |
|---|---|
idalib-cli -d <db> batch -- <op> [<op>...] | Sequenzielle Ops, IDB einmal geöffnet |
idalib-cli parallel -d <list|glob> [--jobs N] -- <op> | Eine Op über viele DBs, jeweils als Subprozess |
idalib-cli info [--version|--ida|--all] | Tool-/IDA-Version, Lizenz |
🔎 Eine unbekannte Binärdatei triagieren
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
🔍 In eine Funktion eintauchen
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
📝 Erkenntnisse annotieren (überlebt über Prozesse/Agenten hinweg)
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
⚡ Massenanalyse vieler Samples
# 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"
🔎 Rohdaten suchen & inspizieren
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
🤖 Agent-freundliche gebündelte Inspektion (ein JSON-Dokument)
idalib-cli -d ./sample batch -- "meta" "segments" "functions -u" "decompile -a 0x401000"
Agent-Workflow-Anleitung: skills/idalib-cli/SKILL.md; ein ausführbares
End-to-End-Beispiel in examples/workflow.sh.
decompile){
"id": 7,
"start": "0x401000",
"end": "0x401080",
"size": 128,
"name": "main",
"blocks": 3,
"decompiled": true,
"pseudocode": "int __cdecl main(...) { ... }"
}
Optional ~/.idapro/idalib-cli/config.toml (Basisverzeichnis: $IDALIB_CLI_HOME):
| Feld | Beschreibung |
|---|---|
| idadir | IDA-Installationsverzeichnis (Standard: automatisch erkannt) |
| idb_dir | Wo neue IDBs erstellt werden (Standard: neben der Binärdatei) |
| default_db | Wird verwendet, wenn -d weggelassen wird |
| save | IDB nach jedem Befehl speichern (Standard true) |
| auto_analyse | Vollständige Auto-Analyse beim Erstellen einer IDB ausführen (Standard true) |
Neben die Binärdatei: ./target.bin → ./target.bin.i64. Setze idb_dir in der
Konfiguration, um den Speicherort zu ändern.
batch öffnet die IDB einmal und führt jede Op gegen dieses Handle aus (speichert einmal
am Ende) — am besten, wenn du mehrere Fakten über eine Datenbank benötigst. parallel
startet einen Subprozess pro Datenbank (IDALib ist nicht thread-sicher, daher Isolation
per Prozess) mit einem Worker-Pool, begrenzt durch --jobs — am besten für viele Samples.
-d akzeptiert einen einzelnen Pfad, eine kommagetrennte Liste oder ein Glob (*.i64).
Nein. Ein Prozess pro IDB gleichzeitig. parallel respektiert dies, indem es einen
Subprozess pro Datenbank startet; für manuelle Multi-Agent-Arbeit gib jedem Agenten sein
eigenes -d-Ziel.
idalib-rs generiert seine FFI-Bindings zur Kompilierzeit durch Parsen der SDK-Header
(bindgen). Das SDK wird nur mit deiner Hex-Rays-Lizenz ausgeliefert und niemals
weiterverbreitet oder eingebettet — die gebaute Binärdatei linkt zur Laufzeit gegen deine
eigene IDA-Installation.
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
Tool-Versionen sind x.y.z; ein Dev- + ein Release-Branch pro Minor:
| Ref | Zweck | Beispiel |
|---|---|---|
main | neueste Entwicklung (Merge-Ziel von v*_dev) | — |
v0.9_dev | Entwicklungsbranch für Tool 0.9.x | aktuelle Arbeit |
v0.9_release | stabiler Branch für Tool 0.9.x (nur Fixes) | Backports |
v0.9.1 (Tag) | Release-Punkt | aktuelles Release |
| Tool-Version | Kompatible IDA | idalib-rs |
|---|---|---|
| 0.9.x | 9.1 | 0.6.1 (gepinnt =0.6.1) |
nächste (v0.10_*) | neue IDA-Version | aktualisierte Abhängigkeit |
Eine neue IDA-Version unterstützen = die idalib-Abhängigkeit aktualisieren,
[package.metadata.ida] in Cargo.toml aktualisieren, eine neue Branch-Linie (v0.10_*) öffnen.
Vertrieben unter der Apache License 2.0. Das license-Feld in
Cargo.toml deklariert MIT OR Apache-2.0 für Kompatibilität mit
idalib-rs-Abhängigkeiten; dieses Repository
liefert nur den Apache-2.0-Text mit. Das IDA SDK niemals committen oder weiterverbreiten.