
Tutorial passo-passo sull'utilizzo del modello AI locale Google Gemma 4 E4B per fare reverse engineering di un crackme Windows con Ghidra, inclusa la configurazione per l'inferenza locale e la rinomina automatica di funzioni/variabili.
Stavo giocando con il nuovo modello locale open weights Gemma E4B rilasciato da Google, e con mia sorpresa ho riscontrato un grande successo nell'usarlo per scenari di reverse engineering offline locale. Volevo scrivere questo tutorial per diffondere la notizia che l'AI locale è ora abbastanza buona per molti compiti basilari di reversing, e che le cose probabilmente miglioreranno rapidamente d'ora in poi.
Una delle parti più noiose del fare reversing di un nuovo binario è all'inizio, quando non hai alcuna intuizione su quali siano le funzioni e variabili importanti. Ci sono molti trucchi che i reverser usano per iniziare, tra cui guardare i riferimenti alle stringhe, il binary diffing o il matching di funzioni simili.
L'AI è molto utile qui, e personalmente ho avuto grande successo nell'usare l'API OpenAI per annotare un binario o ripulire l'output del decompilatore. Tuttavia, ci sono diversi svantaggi nell'usare queste API:
Costo - La decompilazione e il disassemblaggio generano tonnellate di token. Le API addebitano $ per token, quindi binari più grandi possono richiedere parecchi $$$ da analizzare. Se hai a che fare con un target grande con molti binari che si aggiornano ogni settimana, questi costi possono salire rapidamente e sono proibitivi per i reverse engineer hobbisti.
Privacy - Quando usi un'API remota, l'host dell'AI ha visibilità su ciò che stai facendo. Questo è un punto di non ritorno in alcuni scenari professionali.
Controllo - Quando ti affidi a un'API remota, non hai controllo su quali modelli ti vengono serviti, né su qual è la qualità dei modelli. Se fai affidamento su di loro per cose critiche, questo può essere un problema quando diventano lenti o vanno giù quando ne hai bisogno, o quando la qualità del loro output si degrada al punto da diventare inutilizzabili.
Eseguire i propri modelli AI locali risolve alcuni di questi punti dolenti:
Costo - Può essere molto più economico eseguire un modello locale piuttosto che affidarsi a un servizio ospitato. Mentre il tuo modello locale è probabilmente più piccolo e più lento di uno di un buon fornitore, se è abbastanza buono e funziona in un tempo ragionevole, può avere senso risparmiare denaro eseguendo il proprio modello, specialmente se stai elaborando grandi quantità di dati per compiti semplici.
Privacy - Quando esegui il modello localmente, non ci sono chiamate di rete in corso e hai il controllo completo della tua privacy. Nessuno può vedere per cosa stai usando il modello sulla tua macchina.
Controllo - La bellezza di un modello open weights è che nessuno può portartelo via. OpenAI o Anthropic potrebbero un giorno rendere i loro modelli SotA non disponibili, sia attraverso aumenti di prezzo che rimuovendo esplicitamente le loro API. Ma con un modello open weights, hai il controllo del tuo destino, nel bene e nel male.
I modelli AI locali hanno i loro svantaggi però:
Dimensione - Più grande è il tuo modello, più è intelligente. Tuttavia, la maggior parte dei modelli grandi non può essere eseguita su hardware consumer. Per questo motivo, se stai eseguendo un modello locale, è probabile che tu stia eseguendo un modello 10x-100x più piccolo di un modello SotA (State-of-the-Art). Questa diminuzione di dimensioni porta direttamente a una diminuzione dell'intelligenza del modello, rendendoli inadatti a molti compiti che le persone danno per scontati nei modelli SotA come ChatGPT/Codex o Claude.
Velocità - I modelli locali probabilmente saranno più lenti sulla tua macchina rispetto all'uso di un'API AI. Di nuovo, questo è dovuto alle limitazioni dell'hardware consumer e ad alcuni trucchi che i fornitori di API possono fare che generalmente non sono disponibili per te.
Configurazione - Eseguire modelli AI locali è come cercare di far funzionare Linux su un portatile ricondizionato rispetto a entrare nell'Apple Store e comprare un nuovo Macbook Air. L'esperienza di Codex e Claude Code è l'esperienza Apple Store dell'AI. L'esperienza del modello AI locale è il tizio con il fedora in garage che sbatte su un computer traballante cercando di farlo funzionare. Come minimo, devi preoccuparti delle seguenti cose:
Non è un percorso facile, e molte persone si arrendono e presumono che i modelli AI locali non siano all'altezza del compito, perché non hanno mai trovato la giusta combinazione di hardware/modello/impostazioni/prompting/harness per farli funzionare per il loro compito. Anche se in molti casi hanno ragione, spero che questo tutorial almeno faccia luce su quanto siano avanzati i modelli locali, su come possano aiutare nel reverse engineering e ispiri le persone a dare una possibilità all'AI locale.
(la password dell'archivio è crackmes.one). Ho ospitato un link alternativo qui nel repository nel caso il link originale non fosse più disponibile.
Ghidra 12.04 è usato per disassemblaggio e decompilazione. Dovrai installare OpenJDK 21 per usarlo: https://github.com/nationalsecurityagency/ghidra
Mentre lavoravo a questo tutorial, ho vibe-codato con Claude Code un plugin per Ghidra per rinominare funzioni e variabili con l'AI. Puoi scaricare il plugin da qui: https://github.com/markoglasgow/Ghidra_FastAIRenamer_Plugin
Per installarlo, basta spostare il file zip ghidra_12.0.4_PUBLIC_20260427_FastAIRenamerPlugin.zip in ${GHIDRA_HOME}\Extensions\Ghidra, quindi eseguire Ghidra lanciando ${GHIDRA_HOME}\ghidraRun.bat. Per attivare il plugin, nella schermata iniziale di Ghidra, dal menu in alto seleziona File -> Install Extensions, poi nel browser dei plugin spunta la casella accanto a FastAIRenamerPlugin, quindi clicca Ok. Ghidra ti chiederà di riavviarsi, quindi fallo subito.