Engenharia Reversa: Descompilando Código Binário com Modelos de Linguagem de Grande Porte
Atualizações
[2025-10-04]: Lançamento do SK²Decompile: descompilação binária em duas fases baseada em LLM, do Esqueleto à Pele. Fase 1 — Recuperação de Estrutura (Esqueleto): transforma código binário/pseudocódigo em representações intermediárias ofuscadas 🤗 Link HF. Fase 2 — Nomeação de Identificadores (Pele): gera código-fonte legível por humanos com identificadores significativos 🤗 Link HF.
[2025-05-20]: Lançamento do decompile-bench, contendo dois milhões de pares de funções binário-fonte para treinamento e 70 mil pares de funções para avaliação. Consulte a pasta decompile-bench para mais detalhes.
[2024-10-17]: Lançamento do decompile-ghidra-100k, um subconjunto de 100 mil amostras de treinamento (25 mil por nível de otimização). Disponibilizamos um script de treinamento que executa em ~3.5 horas em uma única GPU A100 40G. Ele alcança uma taxa de re-executabilidade de 0.26, com custo total inferior a US$ 20 para replicação rápida do LLM4Decompile.
[2024-09-26]: Atualização de um notebook no Colab para demonstrar o uso do modelo LLM4Decompile, incluindo exemplos para os modelos LLM4Decompile-End e LLM4Decompile-Ref.
[2024-09-23]: Lançamento do LLM4Decompile-9B-v2, ajustado com base no Yi-Coder-9B, que alcançou uma taxa de re-executabilidade de 0.6494 no benchmark Decompile.
[2024-06-19]: Lançamento da série V2 (LLM4Decompile-Ref). Os modelos V2 (1.3B-22B), construídos sobre o Ghidra, foram treinados com 2 bilhões de tokens para refinar o pseudocódigo descompilado pelo Ghidra. A versão 22B-V2 supera a 6.7B-V1.5 em 40.1% adicionais. Consulte a pasta ghidra para mais detalhes.
[2024-05-13]: Lançamento da série V1.5 (LLM4Decompile-End, que descompila o binário diretamente usando LLM). Os modelos V1.5 foram treinados com um conjunto de dados maior (15B tokens) e um comprimento máximo de token de 4,096, com desempenho notável (melhoria superior a 100%) em comparação ao modelo anterior.
[2024-03-16]: Adição do modelo llm4decompile-6.7b-uo, treinado sem conhecimento prévio dos níveis de otimização (O0~O3); a re-executabilidade média é de cerca de 0.219, sendo o de melhor desempenho entre nossos modelos.
Sobre
O LLM4Decompile é o modelo de linguagem de grande porte de código aberto pioneiro dedicado à descompilação. Sua versão atual suporta a descompilação de binários Linux x86_64, dos níveis de otimização O0 a O3 do GCC, em código-fonte C legível por humanos. Nossa equipe está comprometida em expandir as capacidades dessa ferramenta, com esforços contínuos para incorporar uma gama mais ampla de arquiteturas e configurações.
O LLM4Decompile-End foca em descompilar o binário diretamente. O LLM4Decompile-Ref refina o pseudocódigo descompilado pelo Ghidra.
Avaliação
Framework
Durante a compilação, o Pré-processador processa o código-fonte (SRC) para eliminar comentários e expandir macros ou includes. O código limpo é então encaminhado ao Compilador, que o converte em código de montagem (ASM). Esse ASM é transformado em código binário (0s e 1s) pelo Assembler. O linker finaliza o processo vinculando as chamadas de função para criar um arquivo executável. A descompilação, por outro lado, envolve a conversão do código binário de volta em um arquivo-fonte. Por serem treinados em texto, os LLMs não têm a capacidade de processar dados binários diretamente. Portanto, os binários devem primeiro ser desmontados pelo Objdump em linguagem de montagem (ASM). Cabe notar que o binário e o ASM desmontado são equivalentes e podem ser interconvertidos; por isso, nos referimos a eles de forma intercambiável. Por fim, a perda é calculada entre o código descompilado e o código-fonte para orientar o treinamento. Para avaliar a qualidade do código descompilado (SRC'), sua funcionalidade é testada por meio de asserções de teste (re-executabilidade).
Métricas
Re-executabilidade avalia se o código descompilado consegue ser executado corretamente e passar em todos os casos de teste predefinidos.
Benchmarks
HumanEval-Decompile Uma coleção de 164 funções C que dependem exclusivamente de bibliotecas C padrão.
ExeBench Uma coleção de 2,621 funções extraídas de projetos reais, cada uma utilizando funções, estruturas e macros definidas pelo usuário.
Resultados
Modelos
Nosso LLM4Decompile inclui modelos com tamanhos entre 1.3 bilhão e 33 bilhões de parâmetros, e disponibilizamos esses modelos no Hugging Face.