Evidenze focalizzate sul reverse engineering di malware con ispezione approfondita di PE/.NET, ricostruzione con Ghidra, verifiche incrociate con IA, YARA e debug di ELF
AIDebug è una CLI e interfaccia terminale per il reverse engineering di malware incentrata sulle evidenze. Combina triage offline deterministico, ispezione esadecimale dell'intero file, analisi approfondita della struttura PE, disassemblaggio Capstone, ricostruzione Ghidra, cross-check opzionali con LLM, debugging locale di ELF, esercizi di apprendimento compilati e report per la revisione dell'analista.
Versione sorgente corrente: AIDebug 3.1.0. Consulta le note di rilascio 3.1.0.
L'ultima release pubblicata immutabile rimane AIDebug v3.0.0, disponibile come
1200km-aidebug, finché il tag 3.1.0 abbinato alla versione e la release GitHub non completano il workflow di pubblicazione verificato.
Installa il pacchetto stabile da PyPI:
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install 1200km-aidebug==3.0.0
aidebug --version
Installa le capacità opzionali secondo necessità:
# Provider LLM remoti/locali e generazione YARA validata
python -m pip install "1200km-aidebug[ai]==3.0.0"
# Strumentazione dinamica Frida
python -m pip install "1200km-aidebug[dynamic]==3.0.0"
# Tutte le integrazioni Python opzionali
python -m pip install "1200km-aidebug[all]==3.0.0"
Per lo sviluppo:
git clone https://github.com/anpa1200/AIDebug.git
cd AIDebug
python3 -m venv .venv
source .venv/bin/activate
python -m pip install -e ".[dev,dynamic]"
Ghidra, GDB, Bubblewrap, un compilatore C e i componenti target di Frida sono strumenti esterni utilizzati solo dai workflow che li richiedono.
Apri un campione PE o ELF nell'interfaccia terminale principale:
aidebug --binary /path/to/sample.exe --offline
Esegui l'analisi deterministica senza l'interfaccia a schermo intero ed esporta le evidenze:
aidebug --binary /path/to/sample.exe \
--offline --no-tui --report --json-export --yara \
--out-dir reports/
Usa la ricostruzione Ghidra:
aidebug --binary /path/to/sample.exe --offline --no-tui --decompile
aidebug --binary /path/to/sample.exe --offline --no-tui \
--decompile-all reports/sample-reconstruction.c
Analizza un'unità di traduzione C tramite un artefatto ELF temporaneo e non eseguito:
aidebug --source /path/to/example.c --offline --no-tui
Identifica un file arbitrario indipendentemente dall'estensione del nome:
aidebug --identify /path/to/renamed-or-unknown-file --offline
--identify riporta JSON strutturato con tipo dichiarato, tipo MIME, estensioni
comuni, confidenza, metodo, evidenze, SHA-256 e dimensione. La copertura
deterministica include formati eseguibili e bytecode comuni, archivi e immagini
disco, contenitori Office/OpenDocument/EPUB, documenti, immagini, audio/video,
catture di pacchetti, database, artefatti di registro/log eventi, script e testo.
I formati basati su ZIP vengono ispezionati tramite nomi di membri limitati e
piccole letture di metadati; i file non vengono mai eseguiti o estratti.
Installa python-magic insieme al database libmagic del sistema operativo per
firme aggiuntive note alla piattaforma locale:
python -m pip install python-magic
Quando nessuna firma deterministica, struttura o regola testuale corrisponde, un
provider AI configurato può dedurre un candidato da metadati limitati: estensione,
dimensione, SHA-256, fino a 96 byte di intestazione, 32 byte di coda, entropia del
campione e rapporto NUL. Il corpo del file, le stringhe estratte e il percorso del
filesystem non vengono inviati. I risultati solo-AI sono etichettati ai-inference,
limitati al 60% di confidenza e richiedono la validazione dell'analista. Usa
--offline per disabilitare completamente il fallback; un tipo non risolto viene
riportato come Unknown con stato di uscita 2.
Premi S nell'interfaccia terminale principale, oppure avvia direttamente nel workspace:
aidebug --binary /path/to/sample.exe --offline --strings
Il workspace preserva gli offset di file, gli indirizzi mappati quando disponibili, codifica, lunghezze in byte e caratteri, informazioni sulle occorrenze duplicate, contesto di sezione, confidenza, punteggio di triage e le ragioni deterministiche per ogni classificazione. I filtri coprono lunghezza minima, codifica, categoria e ricerca a testo libero; l'ordinamento delle colonne e la paginazione mantengono utilizzabili inventari di grandi dimensioni. Ogni codifica selezionata scansiona l'intero artefatto limitato per dimensione. L'inventario conservato è limitato a 25.000 record e 4.096 caratteri visualizzati per valore; i conteggi esatti di candidati/omissioni e la copertura completa dei byte rendono visibile entrambi i limiti. Ogni record conserva al massimo 32 annotazioni DLL/API e 4.096 caratteri di descrizione; gli overflow avversari vengono riportati nelle ragioni del record.
Il rilevamento è multi-etichetta. Un singolo valore può essere simultaneamente una
DLL, un percorso Windows, un URL, un indirizzo IP, una chiave di registro, un comando,
un frammento PowerShell, una named pipe, un hash, un candidato credenziale, uno user
agent o un altro tipo di evidenza supportato. I candidati dominio vengono normalizzati
IDNA e verificati rispetto a uno snapshot offline incluso della zona root IANA; gli
indirizzi IP devono occupare un token valido completo e le assegnazioni di
configurazione devono corrispondere a una grammatica conservativa a riga intera.
Questo impedisce che brevi frammenti binari vengano promossi solo perché contengono
un punto, due punti o un segno di uguale. Le etichette correlate condividono una
famiglia di confidenza, quindi ip_address più ipv6 non viene trattato come due
osservazioni indipendenti. Le DLL e le API note ricevono brevi descrizioni di capacità
neutre; i nomi sconosciuti ricevono un fallback esplicito non verificato invece di uno
scopo ipotizzato. Un nome estratto è evidenza di presenza, non prova che il codice lo
abbia invocato o che il campione sia dannoso.
Stampa l'inventario deterministico localmente, filtra la vista CLI visualizzata o scrivi l'inventario completo canonico come JSON di sola proprietà:
aidebug --binary /path/to/sample.exe --strings --no-tui
aidebug --binary /path/to/sample.exe --strings --no-tui \
--string-encoding ascii --min-string-length 6 --string-category url
aidebug --binary /path/to/sample.exe --strings --no-tui \
--strings-output reports/sample-strings.json
La revisione AI delle stringhe è un'azione separata opt-in. Premi A all'interno del
workspace e conferma l'avviso privacy/costo, oppure richiedila esplicitamente in modalità CLI:
aidebug --binary /path/to/sample.exe --strings --no-tui \
--analyze-strings --accept-ai-cost \
--strings-output reports/sample-strings-ai.json
A ogni stringa conservata viene assegnato un ID di evidenza stabile. Dopo la conferma
esplicita, il percorso AI pianifica ogni record conservato in blocchi deterministici e
limitati; i fallimenti del provider o della validazione si fermano in modo sicuro e
rimangono visibili. Le risposte devono rendere conto di ogni ID fornito e
superare una rigorosa validazione locale di schema, enum, riferimenti e grounding IOC
prima di essere accettate. Un riduttore finale vede i risultati validati piuttosto che
l'inventario grezzo. I limiti di estrazione, i batch falliti
e i conteggi revisionati/inviati vengono sempre riportati; una copertura incompleta
forza una valutazione complessiva unknown. Le stringhe possono contenere password,
token API, dati dei clienti e prompt injection scritti da attaccanti, quindi rivedi il
confine AI remoto prima di abilitare questa funzionalità.
Ispeziona le analisi precedenti per file o SHA-256:
aidebug --history /path/to/sample.exe
aidebug --history 0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
Carica un file PE e premi X (o P) nella GUI principale. AIDebug presenta i
byte esatti che ha sottoposto a hash e organizza le evidenze strutturali in viste
limitate e navigabili.
| Area | Evidenze |
|---|---|
| Intestazioni | DOS, NT, COFF, Optional Header, caratteristiche, directory dati e flag di mitigazione |
| Sezioni | Campi completi IMAGE_SECTION_HEADER, intervalli mappati, entropia e permessi |
| Import ed export | Descrittor di import, voci INT/IAT, import ritardati, ordinali, nomi, RVA e forwarder |
| Risorse | Gerarchia tipo/nome/lingua, metadati, hash, anteprime ed export sicuro senza sovrascrittura |
| Relocazioni e ASLR | Blocchi/voci di relocazione e valutazione strutturale di compatibilità ASLR |
| TLS | Directory TLS, dati modello, indice, tabella callback, mapping ed evidenze di terminazione |
| Eccezioni e unwind | Funzioni runtime x64, UNWIND_INFO, operazioni, handler e record concatenati |
| Configurazione di caricamento | Campi versionati, flag Guard, evidenze di stack-cookie e mitigazione exploit |
| CFG | Puntatori check/dispatch, target Guard Function ID, ordinamento, soppressione e controlli di coerenza |
| Authenticode | Record di certificato, evidenze PKCS#7/X.509, confronto digest immagine PE e verifica firmatario |
| Debug e provenienza | Rich header, Debug Directory, CodeView RSDS/NB10, GUID PDB, età e percorso |
| Overlay | Offset esatto, dimensione, hash, entropia, anteprima ed export sicuro |
| .NET / CLR | Intestazione COR20, root e stream di metadati, tabelle ECMA-335, assembly, riferimenti e risorse |
AIDebug non esegue un PE durante la creazione di queste viste. La verifica statica dei certificati non è la fiducia root di Windows o la validazione di revoca, i metadati Rich non sono attribuzione, i metadati strong-name non sono fiducia dell'editore e i flag di mitigazione statici non sono prova di una policy runtime efficace.
Questi articoli forniscono i workflow a lungo formato e gli screenshot che completano la documentazione del repository:
Apri il catalogo completo o inizia con un caso specifico:
aidebug --learn
aidebug --learn mov-load
aidebug --learn lea-arithmetic
aidebug --learn switch-dispatch
Ogni caso incluso è un file autonomo in learning/cases/.
AIDebug compila il caso selezionato in un ELF x86-64 temporaneo, mostra il
sorgente C esatto e le istruzioni generate dal compilatore, chiede a Ghidra una
ricostruzione indipendente, registra la provenienza della build e rimuove l'artefatto
temporaneo. Il binario della lezione generato non viene mai eseguito.
Usa --no-tui per l'output testuale, oppure carica una raccolta esterna revisionata:
aidebug --learn movsxd --no-tui
aidebug --learn --learning-collection /path/to/reviewed-cases
L'analisi AI è opzionale. La modalità offline deterministica rimane disponibile senza credenziali.
python -m pip install "1200km-aidebug[ai]==3.0.0"
cp .env.example .env
chmod 600 .env
Configura esattamente un provider, oppure imposta AIDEBUG_LLM_PROVIDER esplicitamente
quando esistono più credenziali:
AIDEBUG_LLM_PROVIDER=anthropic
ANTHROPIC_API_KEY=replace_with_your_key
# Alternative:
# OPENAI_API_KEY=replace_with_your_key
# GEMINI_API_KEY=replace_with_your_key
# OLLAMA_BASE_URL=http://127.0.0.1:11434/v1
Usa AIDEBUG_ENV_FILE=/absolute/path/to/private.env per mantenere la configurazione
lontana da directory di analisi non fidate. L'analisi bulk remota richiede l'acknowledgement
esplicito --accept-ai-cost. Rivedi il confine dati AI remoto
prima di inviare evidenze di campioni a qualsiasi provider.
La modalità attiva basata su GDB esegue l'ELF locale selezionato. Usala solo all'interno di un laboratorio isolato e autorizzato:
aidebug --binary ./sample.elf --mode debug --breakpoint main
I comandi disponibili includono break, continue, step, next, finish,
registers, changes, io, disassemble e quit. La modalità dinamica Frida è
disponibile separatamente per workflow di strumentazione locali o remoti supportati.
| Output | Uso previsto |
|---|---|
| Report HTML | Revisione umana e note sui casi |
| JSON versionato | Input per integrazione personalizzata; non uno schema nativo del fornitore o STIX |
| JSON Intelligence Stringhe | Inventario canonico delle stringhe conservate più annotazioni AI validate opzionali e copertura |
| Candidati YARA | Semi di ingegneria del rilevamento compilati localmente che richiedono revisione e test |
| Candidati ATT&CK | Ipotesi a livello di tecnica che richiedono validazione dell'analista |
| Visualizzazione CFG | Revisione del flusso di controllo a livello di funzione |
| Cronologia SQLite | Evidenze di sessione locali e ripristino dei risultati basato su SHA-256 |
flowchart LR
Input[PE, ELF, o sorgente C] --> Parse[Parsing limitato e hashing]
Parse --> Structure[Evidenze struttura hex e PE]
Parse --> Strings[Intelligence stringhe deterministica]
Parse --> Disasm[Disassemblaggio Capstone]
Disasm --> Patterns[Pattern deterministici]
Disasm --> Ghidra[Ricostruzione Ghidra]
Patterns --> Offline[Risultati offline]
Patterns --> AI[Cross-check LLM opzionale]
Strings --> StringAI[Revisione AI stringhe a blocchi opt-in]
Ghidra --> AI
Offline --> Reports[HTML, JSON, YARA, CFG]
AI --> Reports
StringAI --> StringJSON[JSON stringhe strutturato]
Reports --> History[Cronologia indicizzata SHA-256]Usa AIDebug solo su software e sistemi che sei autorizzato a esaminare, all'interno di una VM o di un laboratorio di analisi malware isolato.
Leggi il modello di sicurezza completo, la policy di sicurezza e il piano di limitazioni e validazione prima di analizzare campioni non fidati.
| Documento | Scopo |
|---|---|
| Workflow analista | Processo di analisi ripetibile |
| Modello di sicurezza | Confini di fiducia e operazione sicura |
| Piano di validazione | Affermazioni di capacità testabili |
| Evidenze di esempio | Screenshot illustrativi e artefatti mock |
| Confronto | Ambito e posizionamento |
| Prontezza del rilascio | Gate di rilascio riproducibili |
| Note di rilascio AIDebug 3.1 | Modifiche della release sorgente corrente |
| Note di rilascio AIDebug 3.0 | Modifiche della release pubblicata precedente |
| Changelog | Cronologia versioni |
Esegui i controlli locali rapidi:
python -m ruff check .
python -m pytest -q
Esegui il gate di rilascio isolato completo:
./scripts/release-readiness.sh
Consulta CONTRIBUTING.md per le linee guida sui contributi. Non allegare malware live, credenziali, dati di casi privati o evidenze non oscurate a issue o pull request.
AIDebug è rilasciato sotto la Licenza MIT.