
Vibe Reverse Engineer with IDA SQL: ライブ仮想テーブル経由で SQL から IDA を操作するインターフェース
どんなAIエージェントにもコンパイル済みバイナリを理解させる能力を与える。
IDASQLは、IDA ProデータベースのためのSQLインターフェースで、Elias Bachaalanyによって作成されました。関数、クロスリファレンス、文字列、型、インポート、逆アセンブリ、逆コンパイルをカバーする30以上の仮想テーブルを公開します。コーディングエージェントから/idasqlスキルを使って完全にヘッドレスで作業できます(エージェントがバックグラウンドでIDAを実行します)。またはIDAのUIを開いて、コーディングエージェントと協力して一緒にリバースエンジニアリングすることもできます。IDAPythonは不要です。スクリプトも不要です。SQLだけです。
なぜSQLなのか? SQLは、あらゆるAIエージェントがすでに話す普遍的なクエリ言語です。IDASQLはエージェント非依存です。Claude、ChatGPT、Copilot、Cursor、カスタムエージェント、あるいはエージェントなしでも構いません。SQLクエリを発行できるツールはどれでもバイナリを解析できます。
IDASQLは、1つ以上のデータベース間での解析、クロスリファレンス、注釈の転送を同時にサポートします。できることは、あなたの想像力と使用するモデルの能力によってのみ制限されます。
IDA Proには、関数、文字列、クロスリファレンス、型などを記述する独自のデータベース形式がすでにあります。IDASQLはこれらの内部構造をライブな SQL仮想テーブルにマッピングします。別途エクスポートやインデックス作成の手順はありません。クエリはIDAのデータベースに対して直接実行され、変更はライブで反映されます。
| モード | 開始方法 | 最適な用途 |
|---|
| スタンドアロンCLI | idasql -s binary.i64 -i | 直接SQL、スクリプティング、パイプライン |
| IDAプラグイン | IDAのCLIドロップダウンからidasqlを選択 | GUI内でのSQL、ライブデータベース |
| スキルワークフロー | コーディングCLIでの/idasql:connect | AI駆動の解析 -- エージェントが自律的にSQLクエリを発行 |
| You / Agent --> Natural language or SQL |
|
/idasql skills (LLM translates intent to SQL)
|
IDASQL --> IDA database(s)
|
Results --> LLM summarizes & reasons
## 🔄 **仕組み**
Klydaは、3つの異なるプロバイダーにインストールする必要がある3つの異なるプロファイルで構成されています。これらについての詳細は、[プロファイルのドキュメント](https://github.com/0xkoda/Klyda/blob/main/docs/profiles.md)を参照してください。
これらのプロファイルは以下の通りです:
- **コアノード** - Klydaの頭脳。
- **スカウトノード** - Telegramの脅威フィード。
- **C2リダイレクタノード** - フロント向けフィッシングノード。

## ▶️ **デプロイメント**
デプロイメントガイドはWikiで閲覧するか、以下のリンクをクリックしてください:
[デプロイメントガイド](https://github.com/0xkoda/Klyda/wiki)
## ⚠️ **免責事項**
Klydaは、MFAバイパス技術の仕組みを調査し理解するための教育および研究目的のみで作成されています。武器化はユーザーの全責任です。私は一切の責任を負いません。```
$ idasql -s WerFaultTool.exe.i64 -q "SELECT * FROM funcs LIMIT 5"
Opening: WerFaultTool.exe.i64...
Database opened successfully.
+------+-------------------------------------------------+------+----------+-------+
| addr | name | size | end_addr | flags |
+------+-------------------------------------------------+------+----------+-------+
| 16 | WerFaultTool.AboutForm::.ctor | 13 | 29 | 4096 |
| 32 | WerFaultTool.AboutForm::Dispose | 30 | 62 | 4096 |
| 64 | WerFaultTool.AboutForm::InitializeComponent | 295 | 359 | 4096 |
| 400 | WerFaultTool.WerFaultGUI::.ctor | 936 | 1336 | 4096 |
| 1344 | WerFaultTool.WerFaultGUI::CreateDynamicControls | 231 | 1575 | 4096 |
+------+-------------------------------------------------+------+----------+-------+
5 row(s)
1コマンド。即座に結果。スクリプト不要。
IDASQL CLI とプラグインをインストールしたら、お好みのコーディングエージェントを起動し、プロンプトを送るだけでリバースエンジニアリングを始められます。IDASQL は完全にヘッドレスで動作します -- エージェントが IDA Pro の起動、解析、逆コンパイル、注釈付け、保存をオーケストレーションします -- または IDA GUI 内でホストされ、エージェントとリアルタイムで共同作業できます。
お好みのコーディングエージェント(例: Claude Code)を開いて、次のように入力してください:``` /idasql:connect Please open sample_malware.exe in the background and let's analyze it together.
The agent starts IDASQL headlessly in the background. From this point on, chat naturally with the database. For instance:
エージェントはIDASQLをヘッドレスでバックグラウンドで起動します。この時点から、データベースと自然にチャットします。例えば:```
/idasql:annotations Fully annotate the function I'm looking at, also use the decompiler skill.
モデルは、関数を理解するための最善のアプローチを自律的に推論し、完全にリバースエンジニアリングして注釈を付けます。
完了したら、エージェントに保存してシャットダウンするよう依頼してください:``` /idasql:connect Please save all databases and shut down IDASQL.
### 複数のデータベースを操作する
2つ以上のデータベースを同時に操作できます。エージェントにプロンプトを送信してください:```
/idasql:connect In this folder, there are many *.exe files. Please use parallel agents to open IDASQL in the background and report how many functions each has.
その後、以下を実行します:``` Tell me, how many strings all these databases have in common?
エージェントはすべてのデータベースを同時に扱えます。データベース間で注釈を相互参照、比較、転送できます。
### IDA UIでの操作
上記のすべては、IDA GUIからも同様に機能します。開いているIDAセッションでエージェントを起動するには:
1. IDAの`idasql>`プロンプトで、次のように入力します: ```
.http start
これでIDASQLとお使いのIDA UIが接続され、連携して動作します。
IDASQLスキルは、コーディングエージェントに自然言語によるIDAデータベースの完全な制御を提供します。
allthingsida/idasql-skills マーケットプレイスからインストールします。ida.exe、macOS/Linuxでは ida)idasql --version が動作することClaude Code内で、次を実行します:```text /plugin marketplace add allthingsida/idasql-skills
次に、そのマーケットプレイスから `idasql` プラグインをインストールします。Codex およびその他のインストール方法については、[idasql-skills README](https://github.com/allthingsida/idasql-skills#installation) を参照してください。
#### スキル
| Skill | 説明 |
|-------|-------------|
| `connect` | IDA データベースに接続: CLI、HTTP サーバー、セッションブートストラップ、スキルルーティング、グローバルコントラクト。 |
| `disassembly` | IDA 逆アセンブリを照会: 関数、セグメント、命令、ブロック、オペランド、グラフ。 |
| `data` | IDA の文字列、バイト、バイナリデータを照会: 検索、再構築、バイトパターン。 |
| `xrefs` | IDA クロスリファレンスを解析: 呼び出し元、呼び出し先、インポート、データ参照、grep 検索。 |
| `decompiler` | IDA 関数を逆コンパイル: 疑似コード、ctree AST、ローカル変数、ラベル。 |
| `annotations` | IDA データベースを編集: コメント、名前変更、型、ブックマーク、enum/struct レンダリング。 |
| `types` | IDA 型システム: 構造体、共用体、列挙型、typedef、parse_decls の作成・変更・適用。 |
| `debugger` | IDA デバッガー: ブレークポイント、バイトパッチ、条件、パッチインベントリ。 |
| `storage` | netnode_kv による IDA データベース内の永続キー値ストレージ。 |
| `idapython` | idasql 経由で IDAPython を実行: スニペット、サンドボックス、出力キャプチャ。 |
| `functions` | 完全な idasql SQL 関数リファレンスカタログ。 |
| `analysis` | IDA バイナリを解析: トリアージ、セキュリティ監査、暗号・ネットワーク検出、複数テーブルクエリ。 |
| `resource` | IDA バイナリの再ソース: 再帰的注釈、構造復元、型再構築。 |
| `ui-context` | ライブの IDA UI コンテキストを取得: 画面、選択範囲、ウィジェットフォーカス、アドレスアンカー。 |
#### プロンプト例```
/idasql:analysis analyze this binary; tell me the most called functions.
/idasql:data find functions that reference "password" strings and rank by xrefs.
/idasql:xrefs show callers of CreateFileW and summarize error handling.
/idasql:data identify suspicious hardcoded URLs and the functions that reference them.
/idasql スキルは、コーディング CLI から分析を駆動します。IDAPython スクリプトは不要です。
idasql v0.0.18 - SQL interface to IDA databases
Usage: idasql -s [-q ] [-f ] [-i] [--export ]
Options: -s IDA database (.idb/.i64) OR raw binary (.exe/.dll/firmware/etc.) — raw binaries trigger fresh idalib analysis and string-list rebuild — legacy 32-bit .idb files upgrade to .i64 and require an explicit reopen --token Auth token for HTTP/MCP server mode (if server requires it) -q Execute SQL query or semicolon-separated script -f Execute SQL from file -i Interactive REPL mode -w, --write Save database on exit (persist changes) --export Export tables to SQL file (local mode only) --export-tables=X Tables to export: * (all, default) or table1,table2,... --http [port] Start HTTP REST server (default: 8080, local mode only) --bind Bind address for HTTP/MCP server (default: 127.0.0.1) --mcp [port] Start MCP server (default: random port, use in -i mode) Or use .mcp start in interactive mode -h, --help Show this help --version Show version
Examples: idasql -s test.i64 -q "SELECT name, size FROM funcs LIMIT 10" idasql -s test.i64 -q "SELECT * FROM binary; SELECT COUNT(*) FROM funcs;" idasql -s test.i64 -f queries.sql idasql -s test.i64 -i idasql -s test.i64 --export dump.sql idasql -s test.i64 --http 8080 idasql -s sample.exe --http # raw PE: idalib auto-analyzes, then serves SQL (default port 8080) idasql -s firmware.bin -q "SELECT * FROM binary" idasql -s test.i64 --mcp 9000
Thank you for using IDA. Have a nice day!
レガシー32ビットの `.idb` 入力は、idalib によって同じディレクトリ内の `.i64` にアップグレードされます。このとき、
idasql は SQL を処理する前に終了し、終了コード `3` を返して、
`status:"upgraded"` と `reopen_with` を含む1つの JSON オブジェクトを stdout に出力します。同じ
操作を `-s <reopen_with>` を指定して繰り返してください。
</details>
### ソースからのビルド
#### 前提条件
- CMake 3.20+
- C++20 コンパイラ
- IDA SDK 9.0+(`IDASDK` 環境変数を設定)```bash
cmake -S . -B build -DIDASQL_WITH_MCP=ON -DIDASQL_BUILD_EXAMPLES=OFF
cmake --build build --config Release
Useful CMake switches:
| Switch | Default | Description |
|---|---|---|
IDASQL_WITH_MCP | ON | fastmcpp によるMCPサーバーサポートをビルドします。--mcp / .mcp が不要な場合や、より小さく/オフラインのビルドを行う場合は無効にします。 |
IDASQL_BUILD_CLI | ON | スタンドアロンの idasql コマンドラインツールをビルドします。 |
IDASQL_BUILD_PLUGIN | ON | IDAプラグインをビルドします。 |
IDASQL_BUILD_EXAMPLES | ON | examples/ 以下のサンプルプログラムをビルドします。 |
Notes:
--httpを使用するか、REPL/プラグインCLIから.http startを使用します。PRAGMA idasql.enable_idapython = 1;で有効にしてください。IDASQL_WITH_MCP=ONはfastmcppを取得します。OFFにするとMCPサポートと--mcp / .mcpコマンドが削除されます。XSQL_WITH_THINCLIENTはONに強制され、HTTPLIB_USE_OPENSSL_IF_AVAILABLEはOFFに強制されます。IDASQLはローカルの平文HTTPを使用するためです。関数、文字列、型、クロスリファレンス、逆アセンブル、逆コンパイルなどをカバーする30以上の仮想テーブル。
| Table | Description |
|---|---|
comments | コメント - アドレス、通常コメントと繰り返しコメント (INSERT/UPDATE/DELETE) |
bookmarks |
| Table | Description |
|---|---|
grep | 統合エンティティ検索テーブル (パターン、名前、種類、アドレス、序数、親名、フルネーム) |
| Table | Description |
|---|---|
netnode_kv | 永続キーと値のストレージ (netnode) |
| Table | Description |
|---|---|
disasm_calls | コールグラフ - 関数ごとの呼び出し元/呼び出し先ペア |
disasm_loops | ループ検出 - ヘッダーブロックとバックエッジ |
| Function | Description |
|---|---|
decompile(addr) | アドレスの関数を逆コンパイルします (疑似コードを返します) |
disasm_at(addr) | アドレスの正規の逆アセンブル一覧 |
get_ui_context_json() | UIコンテキストJSON — GUIプラグインではライブ。CLI/idalibでは"該当なし"スタブ |
名前付き関数、ラベル、
セグメント、型、メンバーを対象とした合成可能なSQL検索には、grepテーブルを使用します。```sql
-- Search anything starting with "Create"
SELECT name, kind, printf('0x%X', addr) as addr
FROM grep
WHERE pattern = 'Create%'
LIMIT 20;
-- Search anywhere in name (plain text performs a contains search) SELECT name, kind, full_name FROM grep WHERE pattern = 'File' AND kind IN ('function', 'import') LIMIT 20;
-- Find struct members SELECT name, parent_name, full_name FROM grep WHERE pattern = 'dw%' AND kind = 'member';
-- Pagination SELECT name, kind, full_name FROM grep WHERE pattern = 'Create%' ORDER BY kind, name LIMIT 20 OFFSET 20;
## 統合
### HTTP REST API
シンプルな統合のためのステートレスHTTPサーバー。プロトコルオーバーヘッドなし。```bash
idasql -s database.i64 --http 8080
Please provide the Markdown content to translate.```bash curl http://localhost:8080/status curl -X POST http://localhost:8080/query -d "SELECT name FROM funcs LIMIT 5" curl -X POST http://localhost:8080/query -d "SELECT * FROM binary; SELECT COUNT(*) FROM funcs;"
すべての `/query` レスポンスは標準のスクリプトエンベロープを使用します — 単一ステートメント = 1エントリの配列:```
{
"success": true,
"statement_count": <N>,
"results": [
{ "statement_index": 0, "success": true, "columns": [...], "rows": [...], "row_count": <N>, "elapsed_ms": <ms>, "error": null },
...
],
"row_count_total": <N>,
"elapsed_ms_total": <ms>,
"first_error_index": null
}
Fail-fastはデフォルトです。continue_on_error=true(例: ?continue_on_error=1)を渡すと、以前の失敗に関係なくすべてのステートメントを実行します。各 results[i].error は、ステートメントごとの失敗を示す正規の情報です。first_error_index は最初の失敗を指すか、null になります。スプリッターの失敗(例: 終了していない引用符)の場合、レスポンスは success:false、statement_count:0、results:[] に加えて、トップレベルの parse_error を含みます。
複数のデータベースを使用する場合は、個別のインスタンスを実行してください:```bash idasql -s malware.i64 --http 8080 idasql -s kernel.i64 --http 8082
エンドポイント: `/status`, `/help`, `/query`, `/shutdown`
#### REPLからHTTPサーバー
REPLまたはIDAプラグインCLIから対話的にHTTPサーバーを起動します:```
idasql -s database.i64 -i
idasql> .http start
HTTP server started on port 8142
URL: http://127.0.0.1:8142
...
Press Ctrl+C to stop and return to REPL.
IDAプラグイン内(非ブロッキング):``` idasql> .http start HTTP server started on port 8142 idasql> .http stop HTTP server stopped
サーバーは `--http` との競合を避けるため、ランダムなポート (8100-8199) を使用します。
### 自動起動 (ピン留め)
`.pin` は、サーバー設定を IDB (netnode `$ idasql config`) に永続化し、
そのデータベースが開かれるたびに **IDA プラグインが HTTP または MCP サーバーを自動起動** します —
各データベースが安定した既知のポートを維持する、マルチインスタンス環境に便利です。```
idasql> .pin set http 8080 # pin HTTP at 127.0.0.1:8080 (autostart on)
idasql> .pin set mcp 0.0.0.0 9500 # bind override + port (port optional; omit or 0 = fresh random port each launch)
idasql> .pin list # show pinned config
idasql> .pin off http # disable autostart but keep host/port
idasql> .pin clear all # remove all pins
ピン留め後、データベースを再度開くとサーバーが自動的に起動します — 読み込み時にIDAの出力ウィンドウに 次のように表示されます:``` IDASQL v0.0.18: Query engine initialized IDASQL CLI: Installed IDASQL: autostart -> IDASQL HTTP server: http://127.0.0.1:8099 Type '.http stop' to stop the server.
`.pin`(または `.pin list`)は、両サービスの現在の設定を表示します:```
idasql> .pin
Autostart pins:
http 127.0.0.1:8099 (autostart: on)
mcp (not set)
.pin コマンド自体は
CLIとプラグインの両方で動作します(CLIは単にピンを読み書きするだけです)。.http start / .mcp start は明示的なポート指定なしで、固定されたホスト/ポートを再利用します。.pin の変更は -w/--write を指定して起動した場合のみ保持されます
(他のIDB編集と同様)。MCP互換クライアント(Model Context Protocol、AIツール統合の標準規格)向け:
--mcp と .mcp は、デフォルトである -DIDASQL_WITH_MCP=ON を指定してビルドした場合に利用可能です。MCPサポートを省略するには -DIDASQL_WITH_MCP=OFF を指定してビルドしてください。```bash
idasql -s database.i64 --mcp idasql -s database.i64 --mcp 9500 # specific port
idasql -s database.i64 -i .mcp start
MCPクライアントを設定してください:```json
{
"mcpServers": {
"idasql": { "url": "http://127.0.0.1:<port>/sse" }
}
}
Tools: idasql_query (direct SQL query or semicolon-separated script)
IDASQLは、異なるバイナリ解析およびデバッグ情報プラットフォームを同じSQLインターフェースを通じて公開するツール群の一部であり、すべて共通の libxsql 仮想テーブルフレームワーク上に構築されています。あるツールで覚えたクエリは、他のツールにもほぼそのまま引き継がれます。例えば、同じ SELECT name, size FROM funcs ORDER BY size DESC LIMIT 10 はどこでも実行できます。
リバースエンジニアリングプラットフォーム
デバッグ情報とコンパイラデータ
コア
libxsql - C++データ構造をSQLite仮想テーブルとして公開するためのヘッダオンリーC++17ライブラリ。テーブル定義のための流暢なビルダーAPI、制約プッシュダウン、HTTPシンクライアントサポートを提供します。
fastmcpp - -DIDASQL_WITH_MCP=ON でビルドするときに使用されるオプションのMCPサーバー実装。
要約すると、未変更のidasqlは、通知を保持しライセンス条項に従う限り、商用を含めて、読むこと、ビルドすること、評価すること、ベンチマークすること、パッケージ化すること、使用することができます。また、ライセンスの貢献目的ルールの範囲内で、バグ修正、最適化、機能、テスト、ドキュメント改善などをフィードバックのために準備する目的でフォークやパッチ適用を行うことができます。
Elias Bachaalany からの事前の書面による許可なしに、分岐したプライベートフォーク、ポート、リブランド、クローン、API互換の代替品、競合実装を維持したり、派生実装を再作成または改善するためのAI入力としてidasqlを使用したりすることはできません。ライセンスで定義された意味において、idasqlからコピーされたものでも、実質的に派生したものでも、大幅に情報を得たものでもない独立した実装は、禁止されていません。
許可のリクエスト: allthingsida/idasql/issues でGitHub Issueを開いてください。
idasqlが配布プロジェクトに実質的に情報を提供する場合は、人間の起源を保持してください。該当する場合、README/ドキュメントおよびAbout/クレジットUIにidasqlとElias Bachaalanyへのクレジットを明示してください。ライセンスには、一般的に許可される使用法と許可が必要な使用法のためのexamples/FAQセクションが含まれています。サードパーティの依存関係(libxsql、IDA SDK、およびそれらの推移的依存関係)は、それぞれ独自のライセンスの下にあります。
完全な Human-Origin Source License v1.0 を参照してください。
| Table | Description |
|---|
funcs | 関数 - 名前、アドレス、サイズ、終了アドレス、フラグ (INSERT/UPDATE/DELETE) |
segments | セグメント - 名前、開始/終了アドレス、パーミッション、クラス (INSERT/UPDATE/DELETE) |
names | 名前付き位置 - アドレス、名前、フラグ (INSERT/UPDATE/DELETE) |
entries | エントリポイント - エクスポート/プログラム/TLSコールバック (序数、アドレス、名前) |
imports | インポート - モジュール、名前、アドレス、序数 |
xrefs | クロスリファレンス - 参照元/参照先アドレス、タイプ、is_code |
blocks | 基本ブロック - 開始/終了アドレス、func_addr、サイズ |
fchunks | 関数チャンク - オーナーを持つ分割/末尾チャンク |
instructions | 逆アセンブル - アドレス、ニーモニック、オペランド、itype、func_addr (UPDATE オペランド format_spec / DELETE) |
instruction_operands | 正規化された命令オペランド - opnum、text、type、value。addrとfunc_addrで最適化されます |
heads | すべてのヘッドアイテム (コード + データ) - 最適化されたアドレス検索/範囲ナビゲーション |
| Table | Description |
|---|
strings | 文字列 - アドレス、コンテンツ、長さ、タイプ |
bytes | 生バイト - value/word/dword/qwordは書き込み可能 (UPDATEでパッチ、DELETEで元に戻す)、original_value、is_patched (WHERE is_patched = 1による高速パッチ列挙) |
| Table | Description |
|---|
pseudocode | Hex-Raysによる逆コンパイル済み疑似コード |
ctree | Hex-Rays ctree ASTノード |
ctree_lvars | Hex-Rays逆コンパイルによるローカル変数 |
ctree_call_args | 呼び出しサイトごとのHex-Rays呼び出し引数の詳細 |
ctree_labels | Hex-Rays ctreeラベル (gotoターゲット) |
| Table | Description |
|---|
types | 型ライブラリ - メンバーを持つ構造体、共用体、列挙型 (INSERT/UPDATE/DELETE) |
types_members | 構造体/共用体メンバーの詳細 (INSERT/UPDATE/DELETE) |
types_enum_values | 列挙型メンバーの値 (INSERT/UPDATE/DELETE) |
types_func_args | 関数型の引数の詳細 |
local_types | ローカル型ライブラリのエントリ |
| ブックマーク - スロット、アドレス、説明 (INSERT/UPDATE/DELETE) |
breakpoints | ブレークポイント - アドレス、タイプ、有効、条件 (完全なCRUD) |
hidden_ranges | 折りたたまれた/非表示の範囲 - 開始/終了、説明、ヘッダー、フッター |
| Table | Description |
|---|
binary | データベースの要約/概要 - プロセッサ、ビット数、アドレス範囲、カウント |
db_info | データベースメタデータのキーと値のペア |
ida_info | IDA解析情報のキーと値のペア |
problems | IDA解析の問題/警告 |
signatures | FLIRTシグネチャのステータス |
fixups | フィックスアップ/再配置エントリ |
mappings | アドレス空間マッピング |