- Engenharia reversa com uso de modelos de linguagem de grande porte
1. Introdução ao LLM4Decompile e ao Decompile-Eval
- Nosso objetivo é criar e lançar o primeiro LLM open source dedicado à descompilação e construir o primeiro benchmark de descompilação focado em recompilabilidade e reexecutabilidade para avaliar suas capacidades.
- Um milhão de amostras de código C coletadas do AnghaBench foram compiladas em código assembly usando GCC, formando assim um conjunto de dados de 4 bilhões de tokens de pares assembly-código-fonte.
- Com esse conjunto de dados, foi feito o fine-tuning do modelo DeepSeek-Coder, um dos principais code LLMs, e foi construído o benchmark de avaliação Decompile-Eval com base em questões do HumanEval e amostras de teste.
- A avaliação é realizada sob duas perspectivas: se o código descompilado pode ser recompilado com sucesso e se consegue passar por todas as asserções dos casos de teste.
2. Resultados da avaliação
Métricas
- Recompilabilidade e reexecutabilidade são indicadores importantes para verificar a eficácia do processo de descompilação.
- Se o código descompilado puder ser recompilado, isso fornece uma forte evidência de integridade sintática.
- Como a sintaxe por si só não garante equivalência semântica com o programa original, a reexecutabilidade é uma medida importante para avaliar a precisão semântica.
- Recompilabilidade e reexecutabilidade representam recuperação de sintaxe e preservação semântica, que são essenciais para uma descompilação utilizável e robusta.
3. Como usar o modelo
- O LLM4Decompile inclui modelos com 1,3 bilhão a 33 bilhões de parâmetros, disponíveis no Hugging Face.
- Exemplos de modelos: llm4decompile-1.3b, llm4decompile-6.7b, llm4decompile-33b, llm4decompile-6.7b-nsp, llm4decompile-6.7b-uo
- O modelo NSP foi treinado com código assembly e tem reexecutabilidade média de cerca de 0,17.
- O modelo UO foi treinado sem conhecimento prévio do nível de otimização (O0~O3) e tem reexecutabilidade média de cerca de 0,21.
- Exemplo de uso do modelo: compilar código C em binário, desmontar o binário em instruções assembly e usar o LLM4Decompile para traduzir as instruções assembly para C.
4. Como usar o Decompile-Eval
- Os dados são armazenados em formato de lista JSON em
llm4decompile/decompile-eval/decompile-eval.json.
- São fornecidos métodos para executar a avaliação em uma única GPU e um único processo, bem como usando TGI (10 vezes mais rápido, com suporte a múltiplas GPUs e múltiplos processos).
5. Em andamento
- LLM4Binary: há planos para incluir um conjunto de dados maior para pré-treinar o modelo com código assembly e código C.
- Decompiler-ALL: há planos para oferecer suporte a mais linguagens/plataformas e configurações (ex.: descompilação de múltiplas funções).
6. Licença
Opinião do GN⁺
- O LLM4Decompile apresenta uma abordagem inovadora em comparação com os métodos tradicionais de descompilação de binários, especialmente ao usar modelos de linguagem de grande porte para permitir uma descompilação mais precisa e eficiente.
- Essa tecnologia pode ser muito útil na área de segurança de software, ajudando em análise de malware e manutenção de sistemas legados.
- O fato de a reexecutabilidade do código descompilado não ser perfeita sugere que essa tecnologia ainda tem espaço para melhorias. São necessárias pesquisas adicionais para aumentar a precisão e a eficiência em ambientes reais.
- Entre as ferramentas existentes com funcionalidades semelhantes estão descompiladores comerciais e open source como Ghidra e IDA Pro, mas o LLM4Decompile oferece uma nova abordagem baseada em machine learning.
- Ao adotar essa tecnologia, é preciso considerar a qualidade e o alcance dos dados de treinamento, a precisão do modelo e a velocidade de execução. As vantagens potenciais incluem alta precisão e flexibilidade, enquanto a complexidade dos modelos de grande porte e a demanda por recursos computacionais podem ser desvantagens.
1 comentários
Comentários no Hacker News
Opinião sobre os resultados de "re-executabilidade":
Pergunta sobre a confiabilidade do resultado descompilado:
Excelente caso de uso para fine-tuning de LLM:
Interesse em treinar módulos de descompilação baseados em desenvolvedores:
Interesse no caso de uso ideal para descompiladores e na geração de datasets:
Apresentação de um projeto pessoal de descompilador baseado em LLM em andamento:
Preocupação com benchmarks sem comparação com abordagens baseadas em IA:
Interesse na grande diferença entre as pontuações de recompilabilidade e re-executabilidade:
Curiosidade sobre comparação com outros descompiladores que não usam LLM:
Curiosidade sobre o modelo 6b ter apresentado desempenho superior ao modelo 33b: