
Vibe Reverse Engineer con IDA SQL: Un'interfaccia per IDA in SQL tramite tabelle virtuali live
Dai a qualsiasi agente AI la capacità di comprendere binari compilati.
IDASQL è un'interfaccia SQL per i database IDA Pro, creata da Elias Bachaalany. Espone oltre 30 tabelle virtuali che coprono funzioni, riferimenti incrociati, stringhe, tipi, import, disassembly e decompilazione. Utilizza le skill /idasql del tuo agente di codifica per lavorare completamente in modalità headless — l'agente esegue IDA in background per te — oppure apri l'interfaccia di IDA e collabora con il tuo agente di codifica per fare reverse engineering insieme. Niente IDAPython. Niente scripting. Solo SQL.
Perché SQL? SQL è il linguaggio di query universale che ogni agente AI già parla. IDASQL è agnostico rispetto all'agente: Claude, ChatGPT, Copilot, Cursor, agenti personalizzati, o nessun agente. Qualsiasi strumento in grado di eseguire una query SQL può analizzare un binario.
IDASQL supporta l'analisi, i riferimenti incrociati e il trasferimento di annotazioni tra uno o più database contemporaneamente. Ciò che puoi fare è limitato solo dalla tua immaginazione e dalla potenza del modello che utilizzi.
IDA Pro ha già il proprio formato di database che descrive funzioni, stringhe, riferimenti incrociati, tipi e altro. IDASQL mappa queste strutture interne a tabelle virtuali SQL live. Non esiste una fase separata di esportazione o indicizzazione: le query vengono eseguite direttamente sul database di IDA e le modifiche si riflettono in tempo reale.
| Modalità | Come avviare | Ideale per |
|---|---|---|
| CLI standalone | idasql -s binary.i64 -i | SQL diretto, scripting, pipeline |
| Plugin IDA | Seleziona idasql dal menu a discesa della CLI di IDA | SQL nell'interfaccia grafica, database live |
| Workflow con skill | /idasql:connect nella tua CLI di codifica | Analisi guidata dall'AI: l'agente emette query SQL in autonomia |
| You / Agent --> Natural language or SQL |
|
/idasql skills (LLM translates intent to SQL)
|
IDASQL --> IDA database(s)
|
Results --> LLM summarizes & reasons
I received your request to translate chunk 3 of 53 from English to Italian, but the input content is empty. There is no source text in the "INPUT:" section to translate.
Please provide the actual Markdown content for chunk 3, and I will translate it immediately according to all the specified rules.```
$ 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)
Un solo comando. Risultati immediati. Nessuno scripting richiesto.
Dopo aver installato il CLI e il plugin IDASQL, avvia il tuo agente di coding preferito e inizia il reverse engineering tramite prompt. IDASQL funziona interamente in modalità headless -- il tuo agente orchestra IDA Pro: avvio, analisi, decompilazione, annotazione, salvataggio -- oppure è integrato nella GUI di IDA, dove collabori con il tuo agente in tempo reale.
Apri il tuo agente di coding preferito (es. Claude Code) e digita:``` /idasql:connect Please open sample_malware.exe in the background and let's analyze it together.
L'agente avvia IDASQL in modalità headless in background. Da questo momento in poi, chatta in modo naturale con il database. Per esempio:```
/idasql:annotations Fully annotate the function I'm looking at, also use the decompiler skill.
Il modello ragiona autonomamente sull'approccio migliore per comprendere la funzione, ne esegue il reverse engineering completo e la annota.
Quando hai finito, chiedi all'agente di salvare e spegnersi:``` /idasql:connect Please save all databases and shut down IDASQL.
### Lavorare con più database
Puoi lavorare con due o più database contemporaneamente. Chiedi al tuo agente:```
/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.
Poi prosegui:``` Tell me, how many strings all these databases have in common?
L'agente funziona con tutti i database contemporaneamente. Puoi incrociare i riferimenti, confrontare e trasferire annotazioni tra di essi.
### Lavorare con l'interfaccia di IDA
Tutto quanto sopra funziona allo stesso modo dalla GUI di IDA. Per avviare il tuo agente con una sessione IDA aperta:
1. Nel prompt `idasql>` di IDA, digita: ```
.http start
Ora IDASQL e la tua interfaccia utente IDA sono connesse e lavorano insieme.
Le skill IDASQL danno al tuo agente di codifica il controllo completo sui database IDA tramite linguaggio naturale.
allthingsida/idasql-skills.ida.exe su Windows, ida su macOS/Linux)idasql --version dovrebbe funzionare dalla riga di comandoAll'interno di Claude Code, esegui:```text /plugin marketplace add allthingsida/idasql-skills
therefore, from that marketplace, install the `idasql` plugin. For Codex and other installation paths, see the [idasql-skills README](https://github.com/allthingsida/idasql-skills#installation).
#### Skill
| Skill | Descrizione |
|-------|-------------|
| `connect` | Connettersi ai database IDA: CLI, server HTTP, bootstrap della sessione, routing delle skill, contratti globali. |
| `disassembly` | Interrogare il disassembly IDA: funzioni, segmenti, istruzioni, blocchi, operandi, grafi. |
| `data` | Interrogare stringhe, byte e dati binari IDA: ricerca, ricostruzione, pattern di byte. |
| `xrefs` | Analizzare i cross-reference IDA: chiamanti, chiamati, import, riferimenti dati, ricerca grep. |
| `decompiler` | Decompilare funzioni IDA: pseudocodice, AST ctree, variabili locali, etichette. |
| `annotations` | Modificare i database IDA: commenti, rinomine, tipi, segnalibri, rendering di enum/struct. |
| `types` | Sistema dei tipi IDA: creare/modificare/applicare struct, union, enum, typedef, parse_decls. |
| `debugger` | Debugger IDA: breakpoint, patch dei byte, condizioni, inventario delle patch. |
| `storage` | Archiviazione persistente chiave-valore nei database IDA tramite netnode_kv. |
| `idapython` | Eseguire IDAPython tramite idasql: snippet, sandbox, cattura dell'output. |
| `functions` | Catalogo di riferimento completo delle funzioni SQL di idasql. |
| `analysis` | Analizzare binari IDA: triage, audit di sicurezza, rilevamento crypto/rete, query multi-tabella. |
| `resource` | Ri-risorsare binari IDA: annotazione ricorsiva, recupero strutture, ricostruzione dei tipi. |
| `ui-context` | Acquisire il contesto UI live di IDA: schermo, selezione, focus widget, ancoraggi di indirizzo. |
#### Prompt di Esempio```
/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.
Le skill /idasql guidano l'analisi dalla tua CLI di coding -- nessuno scripting IDAPython richiesto.
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!
Legacy input `.idb` a 32 bit vengono aggiornati da idalib a un `.i64` associato. Quando ciò accade, idasql termina prima di servire SQL, restituisce il codice di uscita `3` e stampa un oggetto JSON su stdout con `status:"upgraded"` e `reopen_with`. Ripeti la stessa operazione con `-s <reopen_with>`.
</details>
### Compilazione dai Sorgenti
#### Prerequisiti
- CMake 3.20+
- compilatore C++20
- IDA SDK 9.0+ (imposta la variabile d'ambiente `IDASDK`)```bash
cmake -S . -B build -DIDASQL_WITH_MCP=ON -DIDASQL_BUILD_EXAMPLES=OFF
cmake --build build --config Release
Opzioni CMake utili:
Note:
--http dalla CLI oppure .http start dalla CLI REPL/plugin.PRAGMA idasql.enable_idapython = 1;.IDASQL_WITH_MCP=ON recupera fastmcpp; OFF rimuove il supporto MCP e i comandi --mcp / .mcp.XSQL_WITH_THINCLIENT è forzato a ON e HTTPLIB_USE_OPENSSL_IF_AVAILABLE è forzato a OFF perché IDASQL usa HTTP locale in chiaro.30+ tabelle virtuali che coprono funzioni, stringhe, tipi, riferimenti incrociati, disassemblaggio, decompilazione e altro.
| Tabella | Descrizione |
|---|---|
comments | Commenti - addr, commenti normali e ripetibili (INSERT/UPDATE/DELETE) |
| Tabella | Descrizione |
|---|---|
grep | Tabella di ricerca entità unificata (pattern, name, kind, addr, ordinal, parent_name, full_name) |
| Tabella | Descrizione |
|---|---|
netnode_kv | Archiviazione persistente chiave-valore (netnode) |
| Tabella | Descrizione |
|---|---|
disasm_calls | Grafo delle chiamate - coppie caller/callee per funzione |
disasm_loops | Rilevamento dei cicli - header blocks e back edges |
| Funzione | Descrizione |
|---|---|
decompile(addr) | Decompila la funzione all'indirizzo (restituisce pseudocodice) |
disasm_at(addr) | Elenco di disassemblaggio canonico all'indirizzo |
get_ui_context_json() | JSON del contesto UI — attivo nel plugin GUI; uno stub "not applicable" in CLI/idalib |
Usa la tabella grep per ricerche SQL componibili su funzioni nominate, etichette,
segmenti, tipi e membri.```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;
## Integrazione
### HTTP REST API
Server HTTP stateless per una semplice integrazione. Nessun overhead di protocollo.```bash
idasql -s database.i64 --http 8080
The input content is empty — no source text was provided to translate. Please supply the chunk text.```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;"
Tutte le risposte `/query` utilizzano l'involucro dello script canonico — singola istruzione = array di un elemento:```
{
"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
}
Il fail-fast è il comportamento predefinito; passa continue_on_error=true (ad es. ?continue_on_error=1) per eseguire ogni istruzione indipendentemente dai fallimenti precedenti. Ogni results[i].error è canonico per i fallimenti delle singole istruzioni; first_error_index indica il primo fallimento o è null. In caso di errore dello splitter (ad es. una virgoletta non chiusa) la risposta è success:false, statement_count:0, results:[], oltre a un parse_error di livello superiore.
Per più database, esegui istanze separate:```bash idasql -s malware.i64 --http 8080 idasql -s kernel.i64 --http 8082
Endpoints: `/status`, `/help`, `/query`, `/shutdown`
#### Server HTTP dalla REPL
Avvia un server HTTP interattivamente dalla REPL o dalla CLI del plugin IDA:```
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.
Nel plugin IDA (non bloccante):``` idasql> .http start HTTP server started on port 8142 idasql> .http stop HTTP server stopped
Il server utilizza una porta casuale (8100-8199) per evitare conflitti con `--http`.
### Avvio automatico (Pinning)
`.pin` salva in modo persistente una preferenza del server nell'IDB (netnode `$ idasql config`) così che il **plugin IDA avvii automaticamente** un server HTTP o MCP ogni volta che quel database viene aperto — comodo per configurazioni multi-istanza in cui ogni database mantiene una porta stabile e nota.```
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
Dopo il pinning, riaprire il database avvia automaticamente il server — lo vedrai nella finestra di output di IDA al caricamento:``` 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` (oppure `.pin list`) mostra la configurazione attuale per entrambi i servizi:```
idasql> .pin
Autostart pins:
http 127.0.0.1:8099 (autostart: on)
mcp (not set)
.pin stesso
funziona sia nella CLI che nel plugin (la CLI si limita a leggere/scrivere il pin)..http start / .mcp start senza porta esplicita riutilizzano l'host/porta salvati..pin persistono solo quando si avvia con -w/--write
(come qualsiasi altra modifica IDB).Per client compatibili MCP (Model Context Protocol, uno standard per l'integrazione di strumenti AI):
--mcp e .mcp sono disponibili quando si compila con -DIDASQL_WITH_MCP=ON, che è l'impostazione predefinita. Compila con -DIDASQL_WITH_MCP=OFF per omettere il supporto MCP.```bash
idasql -s database.i64 --mcp idasql -s database.i64 --mcp 9500 # specific port
idasql -s database.i64 -i .mcp start
Configura il tuo client MCP:```json
{
"mcpServers": {
"idasql": { "url": "http://127.0.0.1:<port>/sse" }
}
}
Tools: idasql_query (query SQL diretta o script separato da punto e virgola)
IDASQL fa parte di una famiglia di strumenti che espongono diverse piattaforme di analisi binaria e informazioni di debug attraverso la stessa superficie SQL, tutti basati sul framework condiviso di tabelle virtuali libxsql. Una query che impari su uno strumento si trasferisce in gran parte agli altri — ad es. la stessa SELECT name, size FROM funcs ORDER BY size DESC LIMIT 10 funziona ovunque.
Piattaforme di reverse-engineering
Dati di debug e compilatore
Core
libxsql - Libreria C++17 header-only per esporre strutture dati C++ come tabelle virtuali SQLite. Fornisce l'API builder fluente per definire tabelle, pushdown dei vincoli e supporto client HTTP thin.
fastmcpp - Implementazione opzionale del server MCP usata quando si compila con -DIDASQL_WITH_MCP=ON.
In breve: puoi leggere, compilare, valutare, fare benchmark, impacchettare e usare idasql non modificato, anche a livello commerciale, se conservi le note e rispetti i termini della licenza. Puoi fare fork o applicare patch per preparare correzioni di bug, ottimizzazioni, funzionalità, test o miglioramenti alla documentazione da contribuire, nel rispetto delle regole sullo scopo dei contributi della licenza.
Non puoi mantenere un fork privato divergente, porting, rebranding, clone, sostituto compatibile con l'API, implementazione concorrente, né usare idasql come input per AI per ricreare o migliorare un'implementazione derivata senza previa autorizzazione scritta di Elias Bachaalany. Le implementazioni indipendenti che non sono copiate, materialmente derivate o sostanzialmente informate da idasql nel senso definito dalla licenza non sono vietate.
Richieste di permesso: apri un issue GitHub su allthingsida/idasql/issues.
Se idasql informa materialmente un progetto distribuito, preserva l'origine umana: accredita visibilmente idasql ed Elias Bachaalany nel tuo README/docs e nella UI About/credits quando applicabile. La licenza include una sezione esempi/FAQ per gli usi comuni consentiti e quelli che richiedono permesso. Le dipendenze di terze parti (libxsql, l'IDA SDK e le loro dipendenze transitive) rimangono soggette alle proprie licenze.
Vedi la Human-Origin Source License v1.0 completa.
| Opzione | Predefinito | Descrizione |
|---|
IDASQL_WITH_MCP | ON | Compila il supporto server MCP tramite fastmcpp. Disattiva per una build più piccola/offline o quando non ti serve --mcp / .mcp. |
IDASQL_BUILD_CLI | ON | Compila lo strumento da riga di comando standalone idasql. |
IDASQL_BUILD_PLUGIN | ON | Compila il plugin IDA. |
IDASQL_BUILD_EXAMPLES | ON | Compila i programmi di esempio in examples/. |
| Tabella | Descrizione |
|---|
funcs | Funzioni - name, addr, size, end addr, flags (INSERT/UPDATE/DELETE) |
segments | Segmenti - name, start/end addr, permissions, class (INSERT/UPDATE/DELETE) |
names | Posizioni nominate - addr, name, flags (INSERT/UPDATE/DELETE) |
entries | Punti di ingresso - export/program/tls callbacks (ordinal, addr, name) |
imports | Importazioni - module, name, addr, ordinal |
xrefs | Riferimenti incrociati - from/to addr, type, is_code |
blocks | Blocchi di base - start/end addr, func_addr, size |
fchunks | Chunk di funzione - split/tail chunks con proprietario |
instructions | Disassemblaggio - addr, mnemonic, operands, itype, func_addr (UPDATE operand format_spec / DELETE) |
instruction_operands | Operandi istruzione normalizzati - opnum, text, type, value; ottimizzato per addr e func_addr |
heads | Tutti gli head item (codice + dati) - lookup per indirizzo/navigazione per intervalli ottimizzati |
| Tabella | Descrizione |
|---|
strings | Stringhe - addr, content, length, type |
bytes | Byte grezzi - value/word/dword/qword scrivibili (UPDATE applica patch, DELETE ripristina), original_value, is_patched (enumerazione rapida delle patch tramite WHERE is_patched = 1) |
| Tabella | Descrizione |
|---|
pseudocode | Pseudocodice decompilato tramite Hex-Rays |
ctree | Nodi AST ctree Hex-Rays |
ctree_lvars | Variabili locali dalla decompilazione Hex-Rays |
ctree_call_args | Dettagli degli argomenti di chiamata Hex-Rays per sito di chiamata |
ctree_labels | Etichette ctree Hex-Rays (target goto) |
| Tabella | Descrizione |
|---|
types | Libreria tipi - struct, union, enum con membri (INSERT/UPDATE/DELETE) |
types_members | Dettagli dei membri di struct/union (INSERT/UPDATE/DELETE) |
types_enum_values | Valori dei membri enum (INSERT/UPDATE/DELETE) |
types_func_args | Dettagli degli argomenti dei tipi funzione |
local_types | Voci della libreria tipi locale |
bookmarks | Segnalibri - slot, addr, descrizione (INSERT/UPDATE/DELETE) |
breakpoints | Punti di interruzione - addr, type, enabled, condition (CRUD completo) |
hidden_ranges | Intervalli compressi/nascosti - start/end, descrizione, header, footer |
| Tabella | Descrizione |
|---|
binary | Riepilogo/panoramica database - processore, bitness, intervallo di indirizzi, conteggi |
db_info | Coppie chiave-valore dei metadati del database |
ida_info | Coppie chiave-valore delle informazioni di analisi IDA |
problems | Problemi/avvisi di analisi IDA |
signatures | Stato delle firme FLIRT |
fixups | Voci di fixup/rilocazione |
mappings | Mapping degli spazi di indirizzo |