
IDA Pro IDALibをラップしたエージェントネイティブCLI。ステートレスなJSON出力のバイナリ解析(逆アセンブル、Hex-Rays逆コンパイル、CFG、xref、文字列)と、バッチまたは並列の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 を受け付けます。出力は常に 1 つの 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> | 1 つの関数: CFG、ブロック、xref |
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] | 指定アドレスへの xref(デフォルト)またはそこからの xref(--from)、あるいはすべて |
idalib-cli -d <db> find --text <s> | テキストヒットを検索 |
idalib-cli -d <db> find --imm 0x1337 | 即値ヒットを検索 |
idalib-cli -d <db> find --pattern 554889e5 | 16 進バイトパターンを検索 |
idalib-cli -d <db> bytes -a <ea> [-n N] [--width byte|word|dword|qword] | 生バイト(hexdump)またはリトルエンディアン整数 |
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> | 1 つのオペレーションを多数の DB へ、それぞれサブプロセスで実行 |
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
🤖 エージェントフレンドリーな一括検査(1 つの 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 を一度だけ開き、そのハンドルに対してすべてのオペレーションを実行します(最後に一度だけ保存)— 1 つのデータベースについて複数の情報が必要な場合に最適です。parallel はデータベースごとに 1 つのサブプロセスを起動し(IDALib はスレッドセーフではないため、プロセス単位で分離します)、--jobs で上限を設定したワーカープールを使用します — 多数のサンプルに最適です。
-d は単一のパス、カンマ区切りのリスト、または glob(*.i64)を受け付けます。
できません。一度に 1 つの IDB につき 1 つのプロセスです。parallel はデータベースごとに 1 つの
サブプロセスを起動することでこれを守ります。手動でのマルチエージェント作業では、各エージェントに
それぞれ独自の -d ターゲットを与えてください。
idalib-rs はコンパイル時に SDK ヘッダーを解析して FFI バインディングを生成します(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 です。マイナーごとに 1 つの dev ブランチと 1 つの release ブランチがあります:
| 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 依存関係を更新し、Cargo.toml の
[package.metadata.ida] を更新し、新しいブランチライン(v0.10_*)を開く。
Apache License 2.0 の下で配布されています。Cargo.toml の license フィールドは
idalib-rs の依存関係との互換性のために
MIT OR Apache-2.0 を宣言していますが、このリポジトリは Apache-2.0 のテキストのみを同梱しています。
IDA SDK をコミットしたり再配布したりしないでください。