
Un outil GUI et CLI pour supprimer le superflu des exécutables.

Debloat est un outil avec interface graphique et interface en ligne de commande pour supprimer les déchets superflus des exécutables gonflés.
Par déchets superflus, j'entends les 100 à 800 Mo d'octets parasites ajoutés à un binaire pour l'empêcher d'être exécuté dans un sandbox. Cette méthode d'ajout de déchets est appelée « inflation » ou « pompage » d'un binaire. Debloat gère actuellement les 10 tactiques d'inflation les plus courantes.
Étant écrit en Python, l'application peut facilement être intégrée à d'autres flux de travail. Actuellement, debloat est utilisé par AssemblyLine du CCCS et MWDB de CERT Polska.
Le programme peut être compilé pour Windows, MacOS, Linux. L'interface graphique et l'interface en ligne de commande offrent un minimum d'options : elles se veulent aussi simples que possible et la logique du programme gère automatiquement les différents cas d'utilisation.
Les binaires compilés sont déjà inclus dans les versions.
Debloat peut être installé avec pip install debloat. Utilisez debloat pour lancer l'interface en ligne de commande et debloat-gui pour lancer l'interface graphique.
Pour les utilisateurs avancés, Debloat peut également être importé dans d'autres scripts et les fonctions de traitement peuvent être appelées individuellement.
L'interface graphique de Debloat se veut aussi intuitive que possible. Une fois lancée, vous pouvez glisser-déposer un fichier gonflé sur la barre de texte et appuyer sur le bouton « Process file ». Quelques informations techniques seront affichées dans la zone de texte défilante et le fichier sans ballast sera écrit dans le répertoire d'origine du fichier. Ça a l'air facile ? Ça l'est !
Le traitement des fichiers prend quelques secondes.

Après l'installation avec pip install debloat, utilisez la commande debloat.
debloat accepte deux arguments. Le premier argument est obligatoire : le fichier à déballaster. Le deuxième argument est facultatif : l'emplacement de sortie. Lorsqu'aucune sortie n'est fournie, le fichier est écrit dans le même répertoire que le fichier d'origine.
L'interface graphique peut également être lancée depuis l'interface en ligne de commande avec la commande debloat-gui.
Pas encore. D'après mon analyse récente, debloat est capable de supprimer les déchets des fichiers gonflés dans 97,8 % des cas.
Dans les versions précédentes, debloat pouvait accidentellement supprimer une trop grande partie du binaire. Ce n'est plus le cas, sauf si vous utilisez l'option "--last-ditch". Si vous avez un jour besoin de cette option, pensez à partager l'échantillon pour une analyse supplémentaire. Cette option a désormais été ajoutée à l'interface graphique. Fonctionnellement, la fonction supprime la totalité de l'overlay, s'il y en a un. Dans certains cas, c'est nécessaire car aucun motif de déchets n'a été trouvé---c'est le cas le plus courant avec les échantillons qui ne se compressent pas bien.
Ballast ajouté à la fin d'un PE signé.
Dans l'image ci-dessous, le ballast a été ajouté à la fin de l'exécutable.

Exécutable packé, signé ou non signé.
Dans l'image ci-dessous, le ballast a été ajouté à l'exécutable après le packing.

Exécutable signé contenant du ballast dans la section .rsrc du PE.
Dans l'image ci-dessous, le ballast est identifié dans la section .rsrc et est supprimé du PE.

Cas où le ballast est ajouté à l'intérieur d'une section du PE.
Dans l'image ci-dessous, le ballast a été inclus dans une section PE nommée [0].

Cas où l'exécutable est un exécutable Nullsoft Scriptable Installer System (NSIS, également appelé Nullsoft). Ces exe sont des installeurs qui peuvent contenir un ou plusieurs fichiers. Les fichiers contenus peuvent être malveillants ou non. (Parfois, les acteurs ajoutent des fichiers uniquement pour augmenter la taille du fichier.) Tous les fichiers de l'installeur sont extraits vers un nouveau répertoire. Le répertoire contient également le script de l'installeur, qui peut être consulté pour déterminer quels fichiers peuvent être malveillants. Dans l'image ci-dessous, Malcat a identifié l'exécutable comme étant un installeur NSIS.
Il existe des cas d'utilisation où l'outil ne fonctionne pas. Cependant, je prévois de les résoudre avant d'en publier trop de détails.
Il semble y avoir un nombre limité d'outils permettant de traiter facilement les exécutables gonflés. Les deux outils que j'ai vus le plus souvent sont « foremost », destiné à récupérer les binaires à partir d'une image disque, et « pecheck ».
Foremost fonctionne mieux lorsque les octets de déchets sont nuls (0x00) et il rencontre des difficultés lorsque le binaire possède une signature réelle ou factice. Son utilisation pour supprimer le ballast des fichiers n'est pas sa fonction d'origine.
Pecheck a été développé pendant plus de 14 ans et propose des options de ligne de commande quelque peu déroutantes. L'option permettant de supprimer le contenu gonflé n'est pas la fonction principale du script. Pecheck doit être combiné avec un autre outil (disitool) afin de traiter les exécutables signés. Dans mon expérience, il arrive aussi que pecheck se perde et renvoie un exécutable deux fois plus gros que l'exécutable gonflé d'origine. Tous ces facteurs semblent acceptables si vous traitez un petit nombre de binaires, mais à mesure que le nombre de binaires et de méthodes augmente, un outil spécifique à la suppression du ballast est nécessaire.
Binary Refinery est un outil incroyable. Il a été écrit dans l'intention d'être un CyberChef de la ligne de commande. Bien que ces deux outils soient incroyables, ils présentent tous deux une lacune : l'utilisateur doit savoir quelles formules appliquer.
Il existe des méthodes manuelles solides et fiables pour supprimer le ballast des binaires, mais ces méthodes peuvent être fastidieuses et tous les analystes n'ont pas les compétences nécessaires. Cet outil supprime la nécessité de savoir comment retirer manuellement le ballast. De plus, il permet une meilleure extensibilité. Les principes utilisés dans le script permettent une meilleure mise à l'échelle si l'automatisation est souhaitée.
Suivez les commandes de compilation adaptées à votre plateforme. La principale différence entre les commandes de compilation est le format de l'icône.
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
Pensez à rejoindre le Discord debloat.
Un grand merci à Jesko Hüttenhain, créateur de Binary Refinery. L'extraction NSIS est basée sur son reverse engineering du format de fichier NSIS. Jetez un œil à Binary Refinery si ce n'est pas déjà fait.
Traitement par lots : traiter tous les fichiers d'un répertoire et générer un rapport.
Meilleure prise en charge de l'utilisation des méthodes de traitement en dehors de debloat.
Prise en charge de la suppression du ballast sans décompression.
