
Una herramienta GUI y CLI para eliminar el bloat de los ejecutables

Debloat es una herramienta GUI y CLI para eliminar la basura excesiva de ejecutables inflados.
Con "basura excesiva" me refiero a 100 - 800 MB de bytes basura añadidos a un binario para evitar que entre en un sandbox. Este método de añadir basura se llama "inflar" o "bombear" un binario. Debloat actualmente maneja las 10 tácticas de inflado más comunes.
Al estar construida con Python, la aplicación se puede aprovechar fácilmente en otros flujos de trabajo. Actualmente, debloat es utilizada por AssemblyLine de CCCS y MWDB de CERT Polska.
El programa puede compilarse para Windows, MacOS y Linux. La GUI y la CLI tienen opciones mínimas: se pretende que sea lo más simple posible y la lógica dentro del programa maneja los diferentes casos de uso automáticamente.
Los binarios compilados ya están incluidos en los Releases.
Debloat se puede instalar usando pip install debloat. Usa debloat para lanzar la CLI y debloat-gui para lanzar la GUI.
Para usuarios avanzados, Debloat también se puede importar en otros scripts y las funciones de procesamiento se pueden llamar individualmente.
La GUI de Debloat pretende ser lo más intuitiva posible. Al iniciarla, puedes arrastrar y soltar un archivo inflado en la barra de texto y pulsar el botón "Procesar archivo". Alguna información técnica se imprimirá en el cuadro de texto desplazable y el archivo sin inflado se escribirá en el directorio del que se tomó el archivo. ¿Suena fácil? ¡Lo es!
Procesar archivos tomará unos segundos.

Después de instalar con pip install debloat usa el comando debloat.
debloat puede aceptar dos argumentos. El primer argumento es obligatorio: el archivo a debloat. El segundo argumento es opcional: la ubicación de salida. Cuando no se proporciona una salida, se escribirá en el mismo directorio que el archivo original.
La GUI también se puede lanzar desde la CLI usando el comando debloat-gui.
Aún no. Según mi análisis reciente, debloat es capaz de eliminar la basura de archivos inflados el 97.8% de las veces.
En versiones anteriores, debloat podía eliminar accidentalmente demasiado del binario. Eso ya no ocurre a menos que uses la opción "--last-ditch". Si alguna vez necesitas esta opción, considera compartir la muestra para un análisis adicional. Esta opción se ha añadido ahora a la GUI. Funcionalmente, lo que hace la función es eliminar todo el overlay, si lo hay. En algunos casos esto es necesario ya que no se encontró ningún patrón para la basura---esto es más común en muestras que no comprimen bien.
Inflado añadido al final de un PE firmado.
En la imagen de abajo, el inflado se ha añadido al final del ejecutable.

Ejecutable empaquetado firmado o sin firmar.
En la imagen de abajo, el inflado se ha añadido al ejecutable después del empaquetado.

Ejecutable firmado incluye inflado en la sección .rsrc del PE.
En la imagen de abajo, el inflado se identifica en la sección .rsrc y se elimina del PE.

Casos donde el inflado se añade dentro de una sección del PE.
En la imagen de abajo, el inflado se ha incluido en una sección del PE llamada [0].

Casos donde el ejecutable es un ejecutable Nullsoft Scriptable Installer System (NSIS, también conocido como Nullsoft) Estos exe son instaladores que pueden contener uno o más archivos. Los archivos contenidos pueden ser maliciosos o no. (A veces los actores añaden archivos simplemente para aumentar el tamaño del archivo.) Todos los archivos dentro del instalador se extraen a un nuevo directorio. El directorio también contiene el script del instalador, que se puede consultar para determinar qué archivos pueden ser maliciosos. En la imagen de abajo, Malcat ha identificado el ejecutable como un instalador NSIS.
Hay casos de uso donde la herramienta no funciona. Sin embargo, planeo resolverlos antes de publicar demasiado sobre ellos.
Parece haber un número limitado de herramientas para procesar fácilmente ejecutables inflados. Las dos herramientas que más he visto son “foremost”, que está pensada para recuperar binarios de una imagen de disco, y “pecheck”.
Foremost funciona mejor en casos donde los bytes basura son nulos (0x00) y tiene dificultades cuando el binario tiene una firma falsa o real. Su uso para eliminar inflado de archivos no es su propósito original.
Pecheck se ha desarrollado durante más de 14 años y tiene algunas opciones de línea de comandos confusas. Eliminar contenido inflado no es la función principal del script. Pecheck debe combinarse con otra herramienta (disitool) para manejar ejecutables firmados. En mi experiencia, hay otras ocasiones en las que pecheck puede confundirse y devolver un ejecutable del doble de tamaño que el ejecutable inflado original. Todos estos factores parecen aceptables si manejas un número pequeño de binarios, pero a medida que aumentan el número de binarios y métodos, se necesita una herramienta específica para eliminar inflado.
Binary Refinery es una herramienta increíble. Fue escrita con la intención de ser un CyberChef de la línea de comandos. Aunque ambas herramientas son increíbles, ambas tienen una limitación que requiere que el usuario sepa qué fórmulas deben aplicarse.
Existen buenos métodos manuales sólidos para eliminar el inflado de los binarios, pero estos métodos pueden ser tediosos y no todos los analistas tienen las habilidades para hacerlo. Esta herramienta elimina la carga de tener que saber cómo quitar el inflado manualmente. Además, permite una mejor escala. Los principios utilizados en el script permiten una mejor escala si se desea automatización.
Sigue los comandos de compilación apropiados para tu plataforma. La principal diferencia entre los comandos de compilación es el formato del icono.
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
Considera unirte al Discord de debloat.
Un gran reconocimiento a Jesko Hüttenhain, creador de Binary Refinery. La extracción de NSIS se basa en su ingeniería inversa del formato de archivo NSIS. Echa un vistazo a Binary Refinery si no lo has hecho.
Procesamiento por lotes: procesar todos los archivos de un directorio y producir un informe.
Mejor soporte para usar métodos de procesamiento fuera de debloat.
Soporte para debloat sin descomprimir.
