
Uma ferramenta GUI e CLI para remover inchaço de executáveis

Debloat é uma ferramenta GUI e CLI para remover o excesso de lixo de executáveis com bloat.
Por excesso de lixo, quero dizer 100 - 800 MB de bytes de lixo adicionados a um binário para impedi-lo de ser enviado a uma sandbox. Esse método de adicionar lixo é chamado de "inflar" ou "bombar" um binário. O Debloat atualmente lida com as 10 táticas mais comuns de inflar um binário.
Por ser construído com Python, o aplicativo pode ser facilmente aproveitado em outros fluxos de trabalho. Atualmente, o debloat é usado pelo AssemblyLine do CCCS e pelo MWDB do CERT Polska.
O programa pode ser compilado para Windows, MacOS e Linux. A GUI e a CLI têm opções mínimas: a intenção é que seja o mais simples possível e a lógica dentro do programa lida com os diferentes casos de uso automaticamente.
Binários compilados já foram incluídos nas Releases.
O debloat pode ser instalado usando pip install debloat. Use debloat para iniciar a CLI e debloat-gui para iniciar a GUI.
Para usuários avançados, o Debloat também pode ser importado em outros scripts e as funções de processamento podem ser chamadas individualmente.
A GUI do Debloat tem a intenção de ser o mais intuitiva possível. Quando iniciada, você pode arrastar e soltar o arquivo com bloat na barra de texto e pressionar o botão "Process file". Algumas informações técnicas serão exibidas na caixa de texto com rolagem e o arquivo sem bloat será gravado no diretório de onde o arquivo foi obtido. Parece fácil? É mesmo!
Processar arquivos levará alguns segundos.

Após a instalação usando pip install debloat, use o comando debloat.
debloat pode receber dois argumentos. O primeiro argumento é obrigatório: o arquivo a ter o bloat removido. O segundo argumento é opcional: o local de saída. Quando nenhuma saída é fornecida, ele será gravado no mesmo diretório do arquivo original.
A GUI também pode ser iniciada pela CLI usando o comando debloat-gui.
Ainda não. Com base na minha análise recente, o debloat consegue remover o lixo de arquivos com bloat em 97,8% das vezes.
Em versões anteriores, debloat podia acidentalmente remover demais do binário. Isso não ocorre mais, a menos que você use a opção "--last-ditch". Se você algum dia precisar dessa opção, considere compartilhar a amostra para uma análise adicional. Essa opção agora foi adicionada à GUI. Funcionalmente, o que a função faz é remover todo o overlay, se houver um. Em alguns casos, isso é necessário, pois nenhum padrão para o lixo foi encontrado---esse é o caso mais comum em amostras que não comprimem bem.
Bloat anexado ao final de um PE assinado.
Na imagem abaixo, o bloat foi anexado ao final do executável.

Executável empacotado, assinado ou não assinado.
Na imagem abaixo, o bloat foi anexado ao executável após o empacotamento.

Executável assinado inclui o bloat na seção .rsrc do PE.
Na imagem abaixo, o bloat é identificado na seção .rsrc e removido do PE.

Casos em que o bloat é adicionado dentro de uma seção do PE.
Na imagem abaixo, o bloat foi incluído em uma seção do PE chamada [0].

Casos em que o executável é um executável Nullsoft Scriptable Installer System (NSIS, também conhecido como Nullsoft) Esses exe são instaladores que podem conter um ou mais arquivos. Os arquivos contidos podem ou não ser maliciosos. (Às vezes, os atores adicionam arquivos simplesmente para aumentar o tamanho do arquivo.) Todos os arquivos dentro do instalador são extraídos para um novo diretório. O diretório também contém o script do instalador, que pode ser consultado para determinar quais arquivos podem ser maliciosos.
Na imagem abaixo, o Malcat identificou o executável como um instalador NSIS.

Existem casos de uso em que a ferramenta não funciona. No entanto, pretendo resolvê-los antes de publicar muitas informações sobre eles.
Parece haver um número limitado de ferramentas para processar facilmente executáveis com bloat. As duas ferramentas que vi com mais frequência são “foremost”, que se destina a recuperar binários de uma imagem de disco, e “pecheck”.
Foremost funciona melhor nos casos em que os bytes de lixo são nulos (0x00) e tem dificuldades quando o binário tem uma assinatura falsa ou real. Seu uso na remoção de bloat de arquivos não é o propósito original.
Pecheck vem sendo desenvolvido há mais de 14 anos e tem algumas opções de linha de comando confusas. A opção de remover conteúdo com bloat não é a função principal do script. O Pecheck precisa ser combinado com outra ferramenta (disitool) para lidar com executáveis assinados. Na minha experiência, há outras ocasiões em que o pecheck pode se confundir e retornar um executável com o dobro do tamanho do executável original com bloat. Todos esses fatores parecem OK se você estiver lidando com um pequeno número de binários, mas, à medida que o número de binários e métodos aumenta, é necessária uma ferramenta específica para remover bloat.
Binary Refinery é uma ferramenta incrível. Ela foi escrita com a intenção de ser um CyberChef da linha de comando. Embora ambas as ferramentas sejam incríveis, elas têm uma limitação que exige que o usuário saiba quais fórmulas devem ser aplicadas.
Existem métodos manuais bons e sólidos para remover bloat de binários, mas esses métodos podem ser tediosos e nem todos os analistas têm as habilidades para fazê-lo. Esta ferramenta elimina o fardo de precisar saber como remover bloat manualmente. Além disso, ela permite uma melhor escalabilidade. Os princípios usados no script permitem uma melhor escalabilidade se a automação for desejada.
Siga os comandos de compilação adequados à sua plataforma. A principal diferença entre os comandos de compilação é o formato do ícone.
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
Considere entrar no Discord do debloat.
Um grande agradecimento a Jesko Hüttenhain, criador do Binary Refinery. A extração de NSIS é baseada na engenharia reversa que ele fez do formato de arquivo NSIS. Confira o Binary Refinery se você ainda não conhece.
Processamento em lote: processar todos os arquivos de um diretório e gerar um relatório.
Melhor suporte para usar os métodos de processamento fora do debloat.
Suporte para remoção de bloat sem descompactar.