
Uno strumento con GUI e CLI per rimuovere il bloat dagli eseguibili

Debloat è uno strumento con interfaccia grafica e da riga di comando per rimuovere la spazzatura in eccesso da eseguibili "gonfiati".
Per spazzatura in eccesso intendo 100 - 800 MB di byte inutili aggiunti a un binario per evitare che finisca in una sandbox. Questo metodo di aggiunta di spazzatura è chiamato "inflating" o "pumping" di un binario. Debloat attualmente gestisce le 10 tattiche di gonfiaggio più comuni.
Essendo sviluppato in Python, l'applicazione può essere facilmente integrata in altri flussi di lavoro. Attualmente, debloat è utilizzato da CCCS's AssemblyLine e CERT Polska's MWDB.
Il programma può essere compilato per Windows, MacOS, Linux. La GUI e la CLI hanno opzioni minime: l'intento è di essere il più semplice possibile e la logica interna del programma gestisce automaticamente i diversi casi d'uso.
I binari compilati sono già inclusi nelle Release.
Debloat può essere installato usando pip install debloat. Usa debloat per avviare la CLI e debloat-gui per avviare la GUI.
Per utenti avanzati, Debloat può anche essere importato in altri script e le funzioni di elaborazione possono essere chiamate singolarmente.
La GUI di Debloat punta a essere il più intuitiva possibile. Una volta avviata, puoi trascinare e rilasciare il file "gonfiato" sulla barra di testo e premere il pulsante "Process file". Alcune informazioni tecniche verranno stampate nella casella di testo scorrevole e il file senza spazzatura verrà scritto nella directory da cui è stato prelevato il file. Sembra facile? Lo è!
L'elaborazione dei file richiederà alcuni secondi.

Dopo l'installazione con pip install debloat usa il comando debloat.
debloat accetta due argomenti. Il primo argomento è obbligatorio: il file da debloatare. Il secondo argomento è opzionale: la posizione di output. Quando non viene fornito un output, il file verrà scritto nella stessa directory del file originale.
La GUI può anche essere avviata dalla CLI usando il comando debloat-gui.
Non ancora. In base alla mia analisi recente, debloat riesce a rimuovere la spazzatura dai file gonfiati nel 97,8% dei casi.
Nelle versioni precedenti, debloat poteva accidentalmente rimuovere troppo dal binario. Non è più così, a meno che non si usi l'opzione "--last-ditch". Se mai dovessi aver bisogno di questa opzione, considera di condividere il campione per ulteriori analisi. Questa opzione è stata ora aggiunta anche alla GUI. Funzionalmente, ciò che fa è rimuovere l'intero overlay, se presente. In alcuni casi è necessario perché non è stato trovato alcun pattern per la spazzatura—questo è il caso più comune nei campioni che non si comprimono bene.
Spazzatura aggiunta alla fine di un PE firmato.
Nell'immagine qui sotto, la spazzatura è stata aggiunta alla fine dell'eseguibile.

Eseguibile impacchettato firmato o non firmato.
Nell'immagine qui sotto, la spazzatura è stata aggiunta all'eseguibile dopo l'impacchettamento.

L'eseguibile firmato include spazzatura nella sezione .rsrc del PE.
Nell'immagine qui sotto, la spazzatura viene identificata nella sezione .rsrc e viene rimossa dal PE.

Casi in cui la spazzatura viene aggiunta all'interno di una sezione del PE.
Nell'immagine qui sotto, la spazzatura è stata inclusa in una sezione del PE chiamata [0].

Casi in cui l'eseguibile è un eseguibile del sistema di installazione scriptabile Nullsoft (NSIS, anche noto come Nullsoft) Questi exe sono installer che possono contenere uno o più file. I file contenuti possono essere malevoli o meno. (A volte gli attori aggiungono file semplicemente per aumentare la dimensione del file.) Tutti i file all'interno dell'installer vengono estratti in una nuova directory. La directory contiene anche lo script dell'installer che può essere consultato per determinare quali file potrebbero essere malevoli. Nell'immagine qui sotto, Malcat ha identificato l'eseguibile come un installer NSIS.
Ci sono casi d'uso in cui lo strumento non funziona. Tuttavia, ho intenzione di risolverli prima di pubblicare troppo al riguardo.
Sembra esserci un numero limitato di strumenti per elaborare facilmente eseguibili "gonfiati". I due strumenti che ho visto più spesso sono "foremost", pensato per recuperare binari da un'immagine disco, e "pecheck".
Foremost funziona meglio nei casi in cui i byte di spazzatura sono nulli (0x00) e fa fatica quando il binario ha una firma falsa o reale. Il suo uso per rimuovere la spazzatura dai file non è il suo scopo originale.
Pecheck è stato sviluppato per oltre 14 anni e ha alcune opzioni da riga di comando confuse. L'opzione per rimuovere il contenuto "gonfiato" non è la funzione principale dello script. Pecheck deve essere combinato con un altro strumento (disitool) per gestire gli eseguibili firmati. Nella mia esperienza, ci sono altri momenti in cui pecheck può confondersi e restituire un eseguibile grande il doppio dell'eseguibile "gonfiato" originale. Tutti questi fattori sembrano accettabili se si gestisce un piccolo numero di binari, ma man mano che il numero di binari e metodi aumenta, serve uno strumento specifico per rimuovere la spazzatura.
Binary Refinery è uno strumento fantastico. È stato scritto con l'intenzione di essere una CyberChef da riga di comando. Sebbene entrambi gli strumenti siano fantastici, hanno entrambi un limite: richiedono che l'utente sappia quali formule applicare.
Esistono buoni e solidi metodi manuali per rimuovere la spazzatura dai binari, ma questi metodi possono essere noiosi e non tutti gli analisti hanno le competenze per farlo. Questo strumento elimina l'onere di dover sapere come rimuovere manualmente la spazzatura. Inoltre, consente una migliore scalabilità. I principi usati nello script consentono una migliore scalabilità se si desidera l'automazione.
Segui i comandi di build appropriati per la tua piattaforma. La differenza principale tra i comandi di build è il formato dell'icona.
MacOS
pyinstaller --onefile --noconsole --additional-hooks-dir=./hook --icon=debloat.icns gui.py
Windows
pyinstaller --onefile --noconsole --additional-hooks-dir=./hook --icon=debloat.ico gui.py
Linux
pyinstaller --onefile --noconsole --icon=debloat.ico --collect-all tkinterdnd2 gui.py
Prendi in considerazione l'idea di unirti al Discord di debloat.
Un grande ringraziamento a Jesko Hüttenhain, creatore di Binary Refinery. L'estrazione NSIS si basa sul suo reverse engineering del formato file NSIS. Dai un'occhiata a Binary Refinery se non lo hai già fatto.
Elaborazione batch: processare tutti i file in una directory e produrre un report.
Supporto migliore per l'uso dei metodi di elaborazione al di fuori di debloat.
Supporto per debloatare senza decomprimere.
