
Agent-ориентированный CLI, обёртывающий IDA Pro IDALib для не сохраняющего состояние анализа бинарных файлов с выводом в JSON: дизассемблирование, декомпиляция Hex-Rays, CFG, перекрёстные ссылки, строки, а также пакетная или параллельная обработка IDB.
Требования: IDA Pro 9.1 (лицензированный, запущенный хотя бы раз) · распакованный IDA 9.1 SDK (только для сборки) · Rust + LLVM/Clang (требования 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
SDK нужен только во время сборки; бинарный файл связывается с вашими локальными библиотеками IDA во время выполнения. Проверки при разработке без SDK:
cargo test --no-default-features --features stub-idalib.
Каждой команде нужен -d/--db <PATH> — файл IDB (.i64) или бинарный файл (IDB
создаётся рядом с ним при первом использовании). Адреса принимаются в виде 0x401000 или
401000. Вывод всегда один JSON-документ; ошибки идут в stderr с
ненулевым кодом возврата.
| Команда | Описание |
|---|---|
idalib-cli -d <bin-or-i64> db info | Разрешённые пути, состояние IDB, размер |
| Команда | Описание |
|---|---|
idalib-cli -d <db> meta | Тип файла, компилятор, разрядность |
idalib-cli -d <db> processor | Информация о процессоре |
idalib-cli -d <db> segments | Все сегменты |
idalib-cli -d <db> segments-by-range -a <ea> | Сегмент, содержащий адрес |
idalib-cli -d <db> functions [-u] | Список функций (-u = пропустить lib/thunk) |
idalib-cli -d <db> function -a <ea> | Одна функция: CFG, блоки, перекрёстные ссылки |
idalib-cli -d <db> disasm -a <ea> [-n N] | Дизассемблировать N инструкций (по умолчанию 8) |
idalib-cli -d <db> decompile -a <ea> [--all-blocks] | Псевдокод Hex-Rays |
idalib-cli -d <db> insn -a <ea> | Одна инструкция (+ классификация group/is_call/is_ret) |
idalib-cli -d <db> strings | Список строк |
idalib-cli -d <db> names | Именованные локации |
idalib-cli -d <db> xrefs [-a <ea>] [--all] [--from] | Перекрёстные ссылки на адрес (по умолчанию) или из него (--from), либо все |
idalib-cli -d <db> find --text <s> | Поиск текстовых совпадений |
idalib-cli -d <db> find --imm 0x1337 | Поиск совпадений непосредственных значений |
idalib-cli -d <db> find --pattern 554889e5 | Поиск шестнадцатеричного байтового шаблона |
idalib-cli -d <db> bytes -a <ea> [-n N] [--width byte|word|dword|qword] | Сырые байты (hexdump) или целые числа little-endian |
idalib-cli -d <db> entries | Точки входа |
| Команда | Описание |
|---|---|
idalib-cli -d <db> comments get|set|append|remove -a <ea> [-c "text"] | Комментарии |
idalib-cli -d <db> bookmarks list|add|get|remove -a <ea> [-d "desc"] | Закладки |
idalib-cli -d <db> rename -a <ea> -n <name> | Переименовать функцию / метку данных |
idalib-cli -d <db> set-type -a <ea> -t "int f(int, char *);" | Применить объявление типа C (прототип функции / тип данных) |
idalib-cli -d <db> signatures --make [--only-pat] | Сгенерировать FLIRT-сигнатуры |
| Команда | Описание |
|---|---|
idalib-cli -d <db> batch -- <op> [<op>...] | Последовательные операции, IDB открывается один раз |
idalib-cli parallel -d <list|glob> [--jobs N] -- <op> | Одна операция на множестве БД, отдельный подпроцесс для каждой |
idalib-cli info [--version|--ida|--all] | Версия инструмента / IDA, лицензия |
🔎 Триаж неизвестного бинарного файла
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
🔍 Углублённое изучение функции
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
📝 Аннотирование находок (сохраняется между процессами/агентами)
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
⚡ Массовый анализ множества образцов
# 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"
🔎 Поиск и просмотр сырых данных
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
🤖 Пакетная инспекция, удобная для агентов (один JSON-документ)
idalib-cli -d ./sample batch -- "meta" "segments" "functions -u" "decompile -a 0x401000"
Руководство по рабочему процессу агента: skills/idalib-cli/SKILL.md; запускаемый
сквозной пример в examples/workflow.sh.
decompile){
"id": 7,
"start": "0x401000",
"end": "0x401080",
"size": 128,
"name": "main",
"blocks": 3,
"decompiled": true,
"pseudocode": "int __cdecl main(...) { ... }"
}
Необязательный файл ~/.idapro/idalib-cli/config.toml (базовый каталог: $IDALIB_CLI_HOME):
| Поле | Описание |
|---|---|
| idadir | Каталог установки IDA (по умолчанию: определяется автоматически) |
| idb_dir | Где создаются новые IDB (по умолчанию: рядом с бинарным файлом) |
| default_db | Используется, когда -d опущен |
| save | Сохранять IDB после каждой команды (по умолчанию true) |
| auto_analyse | Запускать полный автоанализ при создании IDB (по умолчанию true) |
Рядом с бинарным файлом: ./target.bin → ./target.bin.i64. Задайте idb_dir в
конфигурации, чтобы изменить расположение.
batch открывает IDB один раз и выполняет каждую операцию через этот дескриптор (сохраняет один раз
в конце) — лучше всего, когда нужно несколько фактов об одной базе данных. parallel
запускает один подпроцесс на каждую базу данных (IDALib не потокобезопасен, поэтому изоляция
обеспечивается процессом) с пулом воркеров, ограниченным --jobs — лучше всего для множества образцов.
-d принимает один путь, список через запятую или glob (*.i64).
Нет. Один процесс на IDB за раз. parallel соблюдает это, запуская один
подпроцесс на каждую базу данных; для ручной работы нескольких агентов дайте каждому агенту свою
цель -d.
idalib-rs генерирует свои FFI-привязки во время компиляции, разбирая заголовки SDK
(bindgen). SDK поставляется только с вашей лицензией Hex-Rays и никогда не
распространяется и не встраивается — собранный бинарный файл связывается с вашей собственной установкой IDA
во время выполнения.
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
Версии инструмента имеют вид x.y.z; одна ветка разработки + одна ветка релиза на минорную версию:
| Ref | Назначение | Пример |
|---|---|---|
main | последняя разработка (цель слияния v*_dev) | — |
v0.9_dev | ветка разработки для инструмента 0.9.x | текущая работа |
v0.9_release | стабильная ветка для инструмента 0.9.x (только исправления) | бэкпорты |
v0.9.1 (тег) | точка релиза | текущий релиз |
| Версия инструмента | Совместимая IDA | idalib-rs |
|---|---|---|
| 0.9.x | 9.1 | 0.6.1 (зафиксирована =0.6.1) |
следующая (v0.10_*) | новая версия IDA | обновлённая зависимость |
Поддержка новой версии IDA = обновить зависимость idalib, обновить
[package.metadata.ida] в Cargo.toml, открыть новую линию веток (v0.10_*).
Распространяется под Apache License 2.0. Поле license в
Cargo.toml объявляет MIT OR Apache-2.0 для совместимости с
зависимостями idalib-rs; этот репозиторий
поставляет только текст Apache-2.0. Никогда не коммитьте и не распространяйте IDA SDK.