
Vibe Reverse Engineer with IDA SQL: 라이브 가상 테이블을 통한 SQL 기반 IDA 인터페이스
모든 AI 에이전트가 컴파일된 바이너리를 이해할 수 있게 하세요.
IDASQL은 Elias Bachaalany가 만든 IDA Pro 데이터베이스용 SQL 인터페이스입니다. 함수, 상호 참조, 문자열, 타입, 임포트, 디스어셈블리, 디컴파일을 다루는 30개 이상의 가상 테이블을 제공합니다. 코딩 에이전트의 /idasql 스킬을 사용하면 완전히 헤드리스로 작업할 수 있습니다. 에이전트가 백그라운드에서 IDA를 실행해 줍니다. 또는 IDA의 UI를 열고 코딩 에이전트와 협력하여 함께 리버스 엔지니어링할 수도 있습니다. IDAPython도, 스크립팅도 필요 없습니다. 오직 SQL만으로 가능합니다.
왜 SQL인가요? SQL은 모든 AI 에이전트가 이미 구사하는 보편적인 질의 언어입니다. IDASQL은 에이전트에 구애받지 않습니다. Claude, ChatGPT, Copilot, Cursor, 맞춤형 에이전트, 또는 에이전트가 전혀 없어도 됩니다. SQL 쿼리를 실행할 수 있는 도구라면 무엇이든 바이너리를 분석할 수 있습니다.
IDASQL은 하나 이상의 데이터베이스에서 동시에 주석을 분석하고 상호 참조하며 전송하는 것을 지원합니다. 할 수 있는 일은 오직 상상력과 사용하는 모델의 성능에 의해서만 제한됩니다.
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
The source input for chunk 3 is empty. Please provide the Markdown content you'd like translated.```
$ 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)
명령 하나. 즉각적인 결과. 스크립팅 불필요.
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.
에이전트는 백그라운드에서 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.
### 여러 데이터베이스 작업
두 개 이상의 데이터베이스를 동시에 작업할 수 있습니다. 에이전트에 프롬프트를 입력하세요:```
/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)를 참조하세요.
#### 스킬
| 스킬 | 설명 |
|-------|-------------|
| `connect` | IDA 데이터베이스에 연결: CLI, HTTP 서버, 세션 부트스트랩, 스킬 라우팅, 전역 계약. |
| `disassembly` | IDA 디스어셈블리 쿼리: 함수, 세그먼트, 명령어, 블록, 피연산자, 그래프. |
| `data` | IDA 문자열, 바이트 및 바이너리 데이터 쿼리: 검색, 재구축, 바이트 패턴. |
| `xrefs` | IDA 상호 참조 분석: 호출자, 피호출자, 임포트, 데이터 참조, grep 검색. |
| `decompiler` | IDA 함수 디컴파일: 의사 코드, ctree AST, 지역 변수, 레이블. |
| `annotations` | IDA 데이터베이스 편집: 주석, 이름 변경, 타입, 북마크, enum/구조체 렌더링. |
| `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`가 포함된 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
유용한 CMake 스위치:
| 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/ 아래의 예제 프로그램을 빌드합니다. |
참고:
--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입니다.함수, 문자열, 타입, 상호 참조, 디스어셈블리, 디컴파일 등을 다루는 30개 이상의 가상 테이블.
| 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 | 디스어셈블리 - addr, mnemonic, operands, itype, func_addr (UPDATE operand format_spec / DELETE) |
instruction_operands | 정규화된 명령어 피연산자 - opnum, text, type, value; addr 및 func_addr로 최적화됨 |
heads | 모든 head 항목 (코드 + 데이터) - 최적화된 주소 조회/범위 탐색 |
| Table | Description |
|---|---|
strings | 문자열 - addr, content, length, type |
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 | 로컬 타입 라이브러리 항목 |
| Table | Description |
|---|---|
comments | 주석 - addr, 일반 및 반복 주석 (INSERT/UPDATE/DELETE) |
bookmarks | 북마크 - slot, addr, description (INSERT/UPDATE/DELETE) |
breakpoints | 중단점 - addr, type, enabled, condition (전체 CRUD) |
hidden_ranges | 접혀 있거나 숨겨진 범위 - start/end, description, header, footer |
| Table | Description |
|---|---|
grep | 통합 엔터티 검색 테이블 (pattern, name, kind, addr, ordinal, parent_name, full_name) |
| Table | Description |
|---|---|
binary | 데이터베이스 요약/개요 - 프로세서, 비트 수, 주소 범위, 개수 |
db_info | 데이터베이스 메타데이터 키-값 쌍 |
ida_info | IDA 분석 정보 키-값 쌍 |
problems | IDA 분석 문제/경고 |
signatures | FLIRT 시그니처 상태 |
fixups | Fixup/재배치 항목 |
mappings | 주소 공간 매핑 |
| 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에서는 "해당 없음" 스텁 |
grep 테이블을 사용하여 명명된 함수, 레이블, 세그먼트, 타입 및 멤버에 대한 구성 가능한 SQL 검색을 수행하세요.```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
간단한 통합을 위한 무상태(Stateless) HTTP 서버. 프로토콜 오버헤드가 없습니다.```bash
idasql -s database.i64 --http 8080
(empty)```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` 응답은 표준 스크립트 엔벨로프를 사용합니다 — 단일 명령문 = 항목이 하나인 배열:```
{
"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가 기본값입니다. 이전 실패와 관계없이 모든 문(statement)을 실행하려면 continue_on_error=true(예: ?continue_on_error=1)를 전달하세요. 각 results[i].error는 문별 실패의 표준 정보이며, first_error_index는 가장 먼저 발생한 실패를 가리키거나 null입니다. 분할기(splitter) 실패(예: 닫히지 않은 따옴표)의 경우 응답은 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는 pin을 읽고 쓰기만 합니다)..http start / .mcp start에 명시적 포트가 없으면 고정된 호스트/포트를 재사용합니다..pin 변경 사항은 -w/--write로 시작한 경우에만 유지됩니다
(다른 IDB 편집과 마찬가지로).MCP 호환 클라이언트(Model Context Protocol, AI 도구 통합을 위한 표준)의 경우:
--mcp 및 .mcp는 기본값인 -DIDASQL_WITH_MCP=ON으로 빌드할 때 사용할 수 있습니다. -DIDASQL_WITH_MCP=OFF로 빌드하면 MCP 지원이 제외됩니다.```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 (직접 SQL 쿼리 또는 세미콜론으로 구분된 스크립트)
IDASQL은 서로 다른 바이너리 분석 및 디버그 정보 플랫폼을 동일한 SQL 인터페이스로 노출하는 도구 계열의 일부이며, 모두 공유 libxsql 가상 테이블 프레임워크를 기반으로 합니다. 한 도구에서 익힌 쿼리는 대부분 다른 도구에도 그대로 적용됩니다. 예를 들어 동일한 SELECT name, size FROM funcs ORDER BY size DESC LIMIT 10은 어디서든 실행됩니다.
리버스 엔지니어링 플랫폼
디버그 정보 및 컴파일러 데이터
핵심
요약하면: 고지 사항을 유지하고 라이선스 조건을 준수한다면 수정되지 않은 idasql을 상업적 용도를 포함하여 읽고, 빌드하고, 평가하고, 벤치마킹하고, 패키징하고, 사용할 수 있습니다. 라이선스의 기여 목적 규칙에 따라 버그 수정, 최적화, 기능, 테스트 또는 문서 개선을 준비하여 다시 기여하기 위해 포크하거나 패치할 수 있습니다.
Elias Bachaalany의 사전 서면 허가 없이는 분기된 사설 포크, 포팅, 리브랜딩, 클론, API 호환 대체 구현, 경쟁 구현을 유지하거나, 파생 구현을 재창조하거나 개선하기 위한 AI 입력으로 idasql을 사용할 수 없습니다. 라이선스가 정의한 의미에서 idasql에서 복사되거나, 실질적으로 파생되거나, 상당 부분 영향을 받지 않은 독립적 구현은 금지되지 않습니다.
허가 요청: allthingsida/idasql/issues에서 GitHub 이슈를 열어 주세요.
idasql이 배포되는 프로젝트에 실질적인 정보를 제공하는 경우 인간 출처를 보존하세요. 해당되는 경우 README/문서와 정보/크레딧 UI에 idasql과 Elias Bachaalany를 눈에 띄게 표시하십시오. 라이선스에는 일반적인 허용 용도와 허가가 필요한 용도에 대한 예시/FAQ 섹션이 포함되어 있습니다. 타사 종속성(libxsql, IDA SDK 및 해당 전이적 종속성)은 각각의 라이선스가 적용됩니다.
전체 Human-Origin Source License v1.0을 참조하세요.