
Ein GUI- und CLI-Tool zum Entfernen von Bloat aus ausführbaren Dateien

Debloat ist ein GUI- und CLI-Tool zum Entfernen von überschüssigem Müll aus aufgeblähten ausführbaren Dateien.
Mit überschüssigem Müll meine ich 100 - 800 MB an Junk-Bytes, die einer Binärdatei hinzugefügt werden, um zu verhindern, dass sie in eine Sandbox gelangt. Diese Methode des Hinzufügens von Junk wird als „inflating“ oder „pumping“ einer Binärdatei bezeichnet. Debloat deckt derzeit die 10 häufigsten Inflationstechniken ab.
Da das Programm in Python entwickelt wurde, lässt es sich leicht in andere Arbeitsabläufe einbinden. Derzeit wird debloat von dem AssemblyLine des CCCS und dem MWDB von CERT Polska verwendet.
Das Programm kann für Windows, macOS und Linux kompiliert werden. Die GUI und die CLI haben nur minimale Optionen: Das Tool soll so einfach wie möglich sein, und die Logik innerhalb des Programms übernimmt die verschiedenen Anwendungsfälle automatisch.
Kompilierte Binärdateien sind bereits in den Releases enthalten.
Debloat kann mit pip install debloat installiert werden. Verwende debloat, um die CLI zu starten, und debloat-gui, um die GUI zu starten.
Für fortgeschrittene Benutzer kann Debloat auch in andere Skripte importiert werden, und die Verarbeitungsfunktionen können einzeln aufgerufen werden.
Die GUI von Debloat soll so intuitiv wie möglich sein. Nach dem Start kannst du eine aufgeblähte Datei per Drag & Drop auf die Textleiste ziehen und auf die Schaltfläche „Process file“ klicken. Einige technische Informationen werden im scrollenden Textfeld ausgegeben, und die Datei ohne Bloat wird in das Verzeichnis geschrieben, aus dem die Datei stammt. Klingt einfach? Ist es auch!
Die Verarbeitung von Dateien dauert ein paar Sekunden.

Nach der Installation mit pip install debloat verwende den Befehl debloat.
debloat akzeptiert zwei Argumente. Das erste Argument ist erforderlich: die Datei, die debloatet werden soll. Das zweite Argument ist optional: der Ausgabeort. Wenn keine Ausgabe angegeben wird, wird die Datei in dasselbe Verzeichnis wie die Originaldatei geschrieben.
Die GUI kann auch über die CLI mit dem Befehl debloat-gui gestartet werden.
Noch nicht. Nach meiner aktuellen Analyse ist debloat in der Lage, in 97,8 % der Fälle Junk aus aufgeblähten Dateien zu entfernen.
In früheren Versionen konnte debloat versehentlich zu viel von der Binärdatei entfernen. Das ist nicht mehr der Fall, es sei denn, du verwendest den Schalter "--last-ditch". Falls du diesen Schalter jemals benötigst, ziehe in Betracht, das Sample für weitere Analysen zu teilen. Diese Option wurde inzwischen zur GUI hinzugefügt. Funktionell entfernt die Funktion das gesamte Overlay, sofern eines vorhanden ist. In einigen Fällen ist dies notwendig, da kein Muster für den Junk gefunden wurde---dies ist am häufigsten bei Samples der Fall, die sich nicht gut komprimieren lassen.
Bloat, der an das Ende einer signierten PE angehängt wurde.
Im Bild unten wurde der Bloat an das Ende der ausführbaren Datei angehängt.

Signierte oder unsignierte gepackte ausführbare Datei.
Im Bild unten wurde der Bloat nach dem Packen an die ausführbare Datei angehängt.

Signierte ausführbare Datei mit Bloat im .rsrc-Abschnitt der PE.
Im Bild unten wird der Bloat im .rsrc-Abschnitt identifiziert und aus der PE entfernt.

Fälle, in denen Bloat innerhalb eines PE-Abschnitts hinzugefügt wird.
Im Bild unten wurde der Bloat in einen PE-Abschnitt namens [0] eingefügt.

Fälle, in denen die ausführbare Datei ein Nullsoft-Scriptable-Installer-System-Programm ist (NSIS, auch Nullsoft genannt) Bei diesen EXE-Dateien handelt es sich um Installationsprogramme, die eine oder mehrere Dateien enthalten können. Die enthaltenen Dateien können bösartig sein oder auch nicht. (Manchmal fügen Akteure Dateien nur hinzu, um die Dateigröße zu erhöhen.) Alle Dateien im Installationsprogramm werden in ein neues Verzeichnis extrahiert. Das Verzeichnis enthält außerdem das Skript des Installationsprogramms, das zurate gezogen werden kann, um festzustellen, welche Dateien möglicherweise bösartig sind. Im Bild unten hat Malcat die ausführbare Datei als NSIS-Installationsprogramm identifiziert.
Es gibt Anwendungsfälle, in denen das Tool nicht funktioniert. Ich plane jedoch, diese zu lösen, bevor ich zu viel darüber veröffentliche.
Es scheint nur eine begrenzte Anzahl von Tools zu geben, mit denen aufgeblähte ausführbare Dateien einfach verarbeitet werden können. Die beiden Tools, die ich am häufigsten gesehen habe, sind „foremost“, das für die Wiederherstellung von Binärdateien aus einem Festplatten-Image gedacht ist, und „pecheck“.
Foremost funktioniert am besten, wenn die Junk-Bytes Null sind (0x00), und hat Schwierigkeiten, wenn die Binärdatei eine gefälschte oder echte Signatur besitzt. Die Verwendung zum Entfernen von Bloat aus Dateien ist nicht sein ursprünglicher Zweck.
Pecheck wurde über 14+ Jahre entwickelt und hat einige verwirrende Befehlszeilenoptionen. Die Option zum Entfernen von aufgeblähtem Inhalt ist nicht die Hauptfunktion des Skripts. Pecheck muss mit einem anderen Tool (disitool) kombiniert werden, um signierte ausführbare Dateien zu verarbeiten. Meiner Erfahrung nach gibt es weitere Fälle, in denen pecheck durcheinanderkommen und eine ausführbare Datei zurückgeben kann, die doppelt so groß ist wie die ursprüngliche aufgeblähte Datei. All diese Faktoren scheinen in Ordnung zu sein, wenn man eine kleine Anzahl von Binärdateien verarbeitet, aber mit zunehmender Anzahl von Binärdateien und Methoden wird ein Tool benötigt, das speziell zum Entfernen von Bloat entwickelt wurde.
Binary Refinery ist ein erstaunliches Tool. Es wurde mit der Absicht geschrieben, ein CyberChef der Befehlszeile zu sein. Obwohl beide Tools erstaunlich sind, haben beide eine Schwäche: Der Benutzer muss wissen, welche Formeln angewendet werden sollen.
Es gibt gute und solide manuelle Methoden, um Bloat aus Binärdateien zu entfernen, aber diese Methoden können mühsam sein, und nicht alle Analysten haben die Fähigkeiten dazu. Dieses Tool nimmt die Last, wissen zu müssen, wie man Bloat manuell entfernt. Darüber hinaus ermöglicht es eine bessere Skalierung. Die im Skript verwendeten Prinzipien ermöglichen eine bessere Skalierung, wenn Automatisierung gewünscht ist.
Befolge die Build-Befehle, die zu deiner Plattform passen. Der Hauptunterschied zwischen den Build-Befehlen ist das Format des Symbols.
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
Ziehe in Betracht, dem debloat Discord beizutreten.
Ein großes Lob an Jesko Hüttenhain, den Entwickler von Binary Refinery. Die NSIS-Extraktion basiert auf seinem Reverse Engineering des NSIS-Dateiformats. Wirf einen Blick auf Binary Refinery, falls du es noch nicht getan hast.
Stapelverarbeitung: Alle Dateien in einem Verzeichnis verarbeiten und einen Bericht erstellen.
Bessere Unterstützung für die Verwendung von Verarbeitungsmethoden außerhalb von debloat.
Unterstützung für das Debloating ohne Entpacken.
