
CLI nativo para agentes que encapsula o IDA Pro IDALib para análise binária sem estado com saída JSON: desmontagem, descompilação Hex-Rays, CFG, xrefs, strings e processamento de IDB em lote ou paralelo.
Pré-requisitos: IDA Pro 9.1 (licenciado, iniciado uma vez) · SDK do IDA 9.1 descompactado (apenas em tempo de build) · Rust + LLVM/Clang (requisitos do 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
O SDK é necessário apenas em tempo de build; o binário vincula suas bibliotecas locais do IDA em tempo de execução. Verificações de desenvolvimento sem um SDK:
cargo test --no-default-features --features stub-idalib.
Todo comando precisa de -d/--db <PATH> — um arquivo IDB (.i64) ou um binário (um
IDB é criado ao lado dele no primeiro uso). Endereços aceitam 0x401000 ou
401000. A saída é sempre um documento JSON; erros vão para stderr com um
código de saída diferente de zero.
| Comando | Descrição |
|---|---|
idalib-cli -d <bin-or-i64> db info | Caminhos resolvidos, estado do IDB, tamanho |
| Comando | Descrição |
|---|---|
idalib-cli -d <db> meta | Tipo de arquivo, compilador, bits |
idalib-cli -d <db> processor | Informações do processador |
idalib-cli -d <db> segments | Todos os segmentos |
idalib-cli -d <db> segments-by-range -a <ea> | Segmento que contém um endereço |
idalib-cli -d <db> functions [-u] | Lista de funções (-u = ignorar lib/thunk) |
idalib-cli -d <db> function -a <ea> | Uma função: CFG, blocos, xrefs |
idalib-cli -d <db> disasm -a <ea> [-n N] | Desmonta N instruções (padrão 8) |
idalib-cli -d <db> decompile -a <ea> [--all-blocks] | Pseudo-código Hex-Rays |
idalib-cli -d <db> insn -a <ea> | Instrução única (+ classificação group/is_call/is_ret) |
idalib-cli -d <db> strings | Lista de strings |
idalib-cli -d <db> names | Locais nomeados |
idalib-cli -d <db> xrefs [-a <ea>] [--all] [--from] | Xrefs para um endereço (padrão) ou a partir dele (--from), ou todos |
idalib-cli -d <db> find --text <s> | Busca ocorrências de texto |
idalib-cli -d <db> find --imm 0x1337 | Busca ocorrências de valor imediato |
idalib-cli -d <db> find --pattern 554889e5 | Busca um padrão de bytes hex |
idalib-cli -d <db> bytes -a <ea> [-n N] [--width byte|word|dword|qword] | Bytes brutos (hexdump) ou inteiros little-endian |
idalib-cli -d <db> entries | Pontos de entrada |
| Comando | Descrição |
|---|---|
idalib-cli -d <db> comments get|set|append|remove -a <ea> [-c "text"] | Comentários |
idalib-cli -d <db> bookmarks list|add|get|remove -a <ea> [-d "desc"] | Favoritos |
idalib-cli -d <db> rename -a <ea> -n <name> | Renomeia uma função / rótulo de dados |
idalib-cli -d <db> set-type -a <ea> -t "int f(int, char *);" | Aplica uma declaração de tipo C (protótipo de função / tipo de dados) |
idalib-cli -d <db> signatures --make [--only-pat] | Gera assinaturas FLIRT |
| Comando | Descrição |
|---|---|
idalib-cli -d <db> batch -- <op> [<op>...] | Operações sequenciais, IDB aberto uma vez |
idalib-cli parallel -d <list|glob> [--jobs N] -- <op> | Uma operação em muitos DBs, subprocesso para cada |
idalib-cli info [--version|--ida|--all] | Versão da ferramenta / IDA, licença |
🔎 Triagem de um binário desconhecido
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
🔍 Aprofundar em uma função
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
📝 Anotar descobertas (sobrevive entre processos/agentes)
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
⚡ Análise em massa de muitas amostras
# 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"
🔎 Buscar e inspecionar dados brutos
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
🤖 Inspeção em lote amigável para agentes (um documento JSON)
idalib-cli -d ./sample batch -- "meta" "segments" "functions -u" "decompile -a 0x401000"
Guia de fluxo de trabalho para agentes: skills/idalib-cli/SKILL.md; um exemplo
executável de ponta a ponta em examples/workflow.sh.
decompile){
"id": 7,
"start": "0x401000",
"end": "0x401080",
"size": 128,
"name": "main",
"blocks": 3,
"decompiled": true,
"pseudocode": "int __cdecl main(...) { ... }"
}
Opcional ~/.idapro/idalib-cli/config.toml (diretório base: $IDALIB_CLI_HOME):
| Campo | Descrição |
|---|---|
| idadir | Diretório de instalação do IDA (padrão: detectado automaticamente) |
| idb_dir | Onde novos IDBs são criados (padrão: ao lado do binário) |
| default_db | Usado quando -d é omitido |
| save | Salva o IDB após cada comando (padrão true) |
| auto_analyse | Executa análise automática completa ao criar um IDB (padrão true) |
Ao lado do binário: ./target.bin → ./target.bin.i64. Defina idb_dir na
configuração para alterar o local.
batch abre o IDB uma vez e executa cada operação contra esse handle (salva uma vez
no final) — melhor quando você precisa de vários fatos sobre um banco de dados. parallel
gera um subprocesso por banco de dados (o IDALib não é thread-safe, então o isolamento é
por processo) com um pool de workers limitado por --jobs — melhor para muitas amostras.
-d aceita um único caminho, uma lista separada por vírgulas ou um glob (*.i64).
Não. Um processo por IDB por vez. parallel respeita isso gerando um
subprocesso por banco de dados; para trabalho manual com múltiplos agentes, dê a cada agente seu próprio
alvo -d.
idalib-rs gera seus bindings FFI em tempo de compilação analisando os cabeçalhos
do SDK (bindgen). O SDK é fornecido apenas com sua licença Hex-Rays e nunca é
redistribuído ou embutido — o binário compilado vincula sua própria instalação do IDA
em tempo de execução.
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
As versões da ferramenta são x.y.z; um branch de desenvolvimento + um de release por minor:
| Ref | Propósito | Exemplo |
|---|---|---|
main | desenvolvimento mais recente (alvo de merge de v*_dev) | — |
v0.9_dev | branch de desenvolvimento para a ferramenta 0.9.x | trabalho atual |
v0.9_release | branch estável para a ferramenta 0.9.x (apenas correções) | backports |
v0.9.1 (tag) | ponto de release | release atual |
| Versão da ferramenta | IDA compatível | idalib-rs |
|---|---|---|
| 0.9.x | 9.1 | 0.6.1 (fixado em =0.6.1) |
próxima (v0.10_*) | nova versão do IDA | dependência atualizada |
Suportar uma nova versão do IDA = atualizar a dependência idalib, atualizar
[package.metadata.ida] em Cargo.toml, abrir uma nova linha de branch (v0.10_*).
Distribuído sob a Apache License 2.0. O campo license em
Cargo.toml declara MIT OR Apache-2.0 para compatibilidade com as
dependências do idalib-rs; este repositório
fornece apenas o texto da Apache-2.0. Nunca faça commit ou redistribua o SDK do IDA.