LLM4Decompile: Descompilando código binário com LLM

Desempenho do modelo e treinamento

  • O modelo menor de 6B supostamente supera um de 33B; comentaristas atribuem isso ao subtreinamento de modelos grandes e à sensibilidade à qualidade dos dados, agendas de LR etc.
  • O modelo de descompilação é ajustado a partir do DeepSeek-Coder; treinamento do zero é visto como inviável, dado que há apenas ~4B tokens vs. trilhões para LLMs gerais.
  • Necessidades aproximadas de hardware discutidas: ~2GB de VRAM para 1B de parâmetros, ~14GB para 7B, ~80GB para 33B.

Comparação com GPT‑4 e outros LLMs

  • O GPT‑4 se sai surpreendentemente bem em descompilação, apesar de não ter treinamento específico para a tarefa.
  • Ele produz C sintaticamente válido (recompilável) com mais frequência do que o modelo especializado, mas é pior em correção semântica (reexecutabilidade).
  • Pessoas também relatam usar GPT‑4/3.5 para desofuscar JavaScript e embelezar código, com sucesso parcial, mas não completo.

Relação com descompiladores tradicionais e engenharia reversa

  • Vários observam que descompiladores modernos de código nativo (IDA, Ghidra, Binja, rev.ng etc.) são fortes referências e deveriam fazer parte dos benchmarks, usando métricas anteriores como gotos, complexidade ciclomática e distância de edição de grafos.
  • Alguns praticantes argumentam que a descompilação de binários complexos, especialmente assembly escrito à mão ou código fortemente otimizado, provavelmente não pode ser totalmente automática; as ferramentas principalmente ampliam o esforço do especialista.
  • Outros apontam a diversidade de compiladores, a não determinismo e a ausência de bijeção entre binários e código-fonte como limites difíceis; a ida e volta exata muitas vezes é impossível.

Avaliação, correção e “alucinações”

  • O projeto atualmente mede:
    • Recompilabilidade: o C gerado compila?
    • Reexecutabilidade: o binário recompilado passa nos casos de teste?
  • As taxas de reexecutabilidade são baixas (≈10–15%), mesmo quando a recompilabilidade é muito maior, evidenciando lacunas semânticas.
  • Há debate sobre se ida e volta ou binários idênticos são uma métrica realista; muitos enfatizam a qualidade dos testes e fuzzing como verificações mais práticas.
  • Alguns propõem verificação formal: a LLM gera código mais uma prova; um verificador não-LLM checa a equivalência. Outros questionam a viabilidade e os limites da indecidibilidade.

Casos de uso, escopo e direções futuras

  • Usos sugeridos: auxiliar engenharia reversa, análise de segurança, análise de malware e de JavaScript ofuscado, detecção de toolchain, elevação para representações intermediárias (por exemplo, RzIL) e experimentos de atribuição de autoria.
  • Muitos veem LLMs como “copilotos” sobrepostos a desassembladores/IRs existentes, em vez de descompiladores independentes.
  • A geração de conjuntos de dados a partir de C de código aberto (e possivelmente código sintético) é vista como uma vantagem-chave dessa direção de pesquisa.