Prendere un programma Windows, aprirlo senza disporre del suo codice sorgente e chiedere a un’intelligenza artificiale di spiegare come gestisce una determinata operazione. Non semplicemente descrivere ciò che appare sullo schermo, ma esaminare le istruzioni eseguibili, individuare le funzioni coinvolte, seguirne le chiamate e ricostruire gli algoritmi utilizzati dal software. È questo l’obiettivo di REA (Reverse Engineer Anything), un progetto open source che integra gli strumenti tradizionali di reverse engineering con gli agenti AI specializzati nello sviluppo software.
Anziché costringere l’utente a esplorare manualmente migliaia di istruzioni assembly, REA permette di formulare domande in linguaggio naturale: quale funzione gestisce un pulsante? Dove vengono salvati i dati? Com’è effettuato un determinato calcolo? Quali componenti comunicano tra loro?
L’AI può avvalersi di strumenti di analisi, estrarre codice decompilato, identificare riferimenti incrociati e costruire una risposta accompagnata da elementi tecnici verificabili.
REA può lavorare con eseguibili nativi (in un altro articolo abbiamo visto cosa succede facendo doppio clic su un EXE in Windows), librerie, applicazioni JavaScript ed Electron e, attraverso funzionalità dedicate, anche con il codice e il comportamento delle applicazioni Web.
Come funziona REA: l’AI non sostituisce il disassemblatore
REA non è un modello linguistico che riceve in ingresso un file .exe e ne analizza direttamente il funzionamento. È piuttosto un livello di integrazione tra un agente AI e una serie di strumenti capaci di esaminare il software.
Per i programmi nativi, il lavoro di analisi viene svolto da strumenti specializzati come Ghidra, IDA o Hopper, a seconda del sistema operativo e della configurazione disponibile. Il disassemblatore traduce le istruzioni macchina in assembly; il decompilatore cerca di ricostruire una rappresentazione di livello superiore, generalmente simile al linguaggio C. REA, a sua volta, rende queste informazioni accessibili all’agente AI, che può collegarle, interpretarle e approfondirle.
L’integrazione avviene attraverso l’uso del Model Context Protocol (MCP), che consente all’agente di richiamare strumenti esterni; REA aggiunge inoltre istruzioni operative che guidano l’agente nell’indagine.
Un’analisi può quindi diventare un processo iterativo: l’AI individua una funzione interessante, richiede il codice decompilato, segue le chiamate verso altre funzioni e confronta i risultati con il comportamento osservabile dell’applicazione.
Il vantaggio consiste nel rendere molto più accessibile un’indagine che normalmente richiede competenze approfondite in architettura dei processori, linguaggi di programmazione e analisi binaria.

Installare REA su Windows 11: tutti i passaggi
REA è distribuito attraverso il registro npm e necessita di una versione recente di Node.js: i requisiti ufficiali indicano Node.js 22 dalla versione 22.19, Node.js 24 dalla 24.11 oppure Node.js 26 e successive. Apriamo quindi una finestra PowerShell ed eseguiamo i comandi:
node -v
npm -v
Se Node.js non è installato, possiamo utilizzare il gestore di pacchetti di Windows:
winget install OpenJS.NodeJS.LTS
Al termine chiudiamo e riapriamo PowerShell, quindi ripetiamo i due comandi precedenti per verificare che Node.js e npm siano disponibili. Per installare e configurare REA, basta impartire la seguente istruzione:
npx rea-agents@latest setup
Il comando recupera il pacchetto necessario e avvia una procedura guidata.
REA rileva i client compatibili e permette di scegliere quello da configurare; tra le possibilità documentate figurano Codex, Claude Code, Cursor, Gemini CLI, Windsurf e altri agenti compatibili con MCP.
L’applicazione può registrare il proprio server MCP e aggiungere le istruzioni necessarie all’agente per utilizzare gli strumenti di analisi. La procedura prevede l’approvazione dell’utente e conserva copie di sicurezza delle configurazioni interessate. Completata l’installazione, bisogna riavviare il client AI, non soltanto aprire una nuova conversazione all’interno di un’applicazione rimasta attiva.
Usare REA senza un agente AI
È possibile utilizzare REA anche direttamente dal terminale. Per disporre permanentemente del comando rea si può scrivere quanto segue:
npm install --global rea-agents
rea --help
Il terminale restituisce risultati tecnici strutturati; l’agente AI li interpreta e può decidere quali ulteriori interrogazioni eseguire.
Se PowerShell impedisse l’esecuzione dello script associato a npx, si può utilizzare direttamente npx.cmd: la documentazione REA propone anche la modifica della execution policy per l’utente corrente:
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
È opportuno applicare tale modifica soltanto dopo averne valutato le implicazioni di sicurezza: non serve disabilitare indiscriminatamente le protezioni di PowerShell.
La procedura e i requisiti aggiornati sono disponibili nella guida ufficiale all’installazione di REA.
In entrambe le configurazioni, REA è già perfettamente in grado di analizzare applicazioni JavaScript ed Electron.
Reverse engineering di un file EXE su Windows: installare Ghidra e collegarlo a REA
Come anticipato in precedenza, REA promette di esaminare programmi compilati, per i quali il codice sorgente non è immediatamente disponibile. Per questo tipo di attività è necessario abbinare l’uso di disassemblatori e decompilatori.
Su Windows, una soluzione gratuita è Ghidra, distribuito come progetto open source. L’integrazione con Ghidra su Windows x64 è ancora sperimentale: supporta analisi in sola lettura di eseguibili PE e DLL x86/x64 presenti su unità NTFS locali fisse. Non bisogna quindi dare per scontato che qualsiasi eseguibile Windows sia analizzabile con la stessa affidabilità.
Per l’integrazione servono Ghidra 12.1.x e un JDK a 64 bit versione 21 o successiva: possiamo scaricare Ghidra dal repository ufficiale su GitHub e utilizzare, per Java, una distribuzione compatibile come Eclipse Temurin:
winget install EclipseAdoptium.Temurin.21.JDK
Una volta completata l’installazione, REA mette a disposizione un comando diagnostico:
npx -y rea-agents@latest doctor --provider ghidra --json
Se il controllo evidenzia errori, questi andranno sistemati prima di proseguire. Quando la configurazione risulta valida, impartiamo il comando seguente di modo che REA possa registrare il collegamento al provider Ghidra all’interno dell’agente scelto:
npx rea-agents@latest setup
Le variabili impostate con $env: valgono per la sessione PowerShell corrente: prima di lanciare nuovi processi in altre sessioni può quindi essere necessario configurarle nuovamente o renderle persistenti tramite le impostazioni di Windows.
La prova su un eseguibile .EXE: chiediamo all’AI di ricostruire un algoritmo
Un buon esperimento non consiste nel chiedere all’intelligenza artificiale di spiegare genericamente tutto il funzionamento di un programma Windows: è preferibile selezionare una funzionalità circoscritta, per la quale sia possibile confrontare la ricostruzione con risultati osservabili.
Una volta collegato Ghidra all’agente AI, possiamo impartire una richiesta precisa:
Usa REA con il provider Ghidra per analizzare l’eseguibile
C:\REA\DXBall.exe.
Voglio identificare il codice che calcola il posizionamento stereo dei suoni quando la pallina colpisce un mattone.
Esamina le funzioni coinvolte, le istruzioni assembly, i chiamanti e le costanti numeriche. Ricostruisci la formula matematica e proponi un’implementazione equivalente in C.
Per ogni conclusione, mostra indirizzi, istruzioni o altri elementi verificabili nel binario.
Non eseguire né modificare il file originale.
L’agente dovrebbe poter avviare un’indagine progressiva (l’analisi di DXBall.exe è uno degli esempi citati nella documentazione ma ovviamente si può lavorare su qualunque eseguibile), richiamando gli strumenti di REA.
Se conosciamo già il nome o l’indirizzo di una funzione, possiamo anche interrogarla direttamente attraverso la CLI:
npx -y rea-agents@latest function "C:\REA\DXBall.exe" 0x00406400 --provider ghidra --json
L’indirizzo 0x00406400 è, in questo caso, quello utilizzato nell’esempio DX-Ball documentato.
Che cosa REA non può ricostruire automaticamente
Le potenzialità sono notevoli, ma bisogna fare attenzione a non attribuire all’AI capacità che nessun decompilatore può garantire.
Quando si compila un programma C o C++, molte informazioni presenti nei sorgenti originali possono andare perdute: i nomi delle variabili locali, i commenti e parte della struttura logica sono eliminati o trasformati; le ottimizzazioni possono inoltre modificare radicalmente la disposizione delle istruzioni.
Di conseguenza, il codice C generato da un decompilatore non coincide necessariamente con quello scritto dallo sviluppatore: è una cosa nota a chiunque si sia anche parzialmente dedicato a una qualunque attività di reverse engineering.
La situazione può diventare ancora più complessa in presenza di software protetto da tecniche di offuscamento, packing, crittografia o generazione dinamica del codice.
Un altro limite riguarda le conclusioni dell’agente AI: l’individuazione di una funzione sospetta o apparentemente significativa non dimostra automaticamente che sia eseguita durante una particolare operazione. Per confermare il comportamento reale possono servire ulteriori verifiche, come test con input differenti, debugging dinamico o confronto tra la funzione originale e quella ricostruita.
Inoltre, l’analisi statica di un file non equivale a una sandbox di sicurezza: un eseguibile sconosciuto non deve essere lanciato sul computer principale per il solo scopo di verificarne il funzionamento. Per le analisi dinamiche potenzialmente rischiose è preferibile utilizzare una macchina virtuale isolata.