LLM4Decompile: Descompilando código binario con LLM

Rendimiento y entrenamiento del modelo

  • Se informa que un modelo más pequeño de 6B supera a uno de 33B; los comentaristas atribuyen esto al subentrenamiento de los modelos grandes y a la sensibilidad a la calidad de los datos, los programas de LR, etc.
  • El modelo descompilador se ajusta a partir de DeepSeek-Coder; entrenarlo desde cero se considera inviable dado que solo hay ~4B tokens frente a billones para los LLM generales.
  • Se comentan necesidades aproximadas de hardware: ~2GB de VRAM para 1B de parámetros, ~14GB para 7B, ~80GB para 33B.

Comparación con GPT‑4 y otros LLM

  • GPT‑4 funciona sorprendentemente bien en descompilación pese a no tener entrenamiento específico para la tarea.
  • Produce C sintácticamente válido (recompilable) con más frecuencia que el modelo especializado, pero es peor en corrección semántica (re-ejecutabilidad).
  • También se informa del uso de GPT‑4/3.5 para desofuscar JavaScript y embellecer código, con éxito parcial pero no completo.

Relación con descompiladores tradicionales e ingeniería inversa

  • Varios señalan que los descompiladores modernos de código nativo (IDA, Ghidra, Binja, rev.ng, etc.) son referencias sólidas y deberían formar parte de los benchmarks, usando métricas previas como gotos, complejidad ciclomática y distancia de edición de grafos.
  • Algunos profesionales sostienen que la descompilación de binarios complejos, especialmente ensamblador escrito a mano o código altamente optimizado, probablemente no pueda ser totalmente automática; las herramientas principalmente amplifican el esfuerzo experto.
  • Otros señalan la diversidad de compiladores, la no determinismo y la falta de biyección entre binarios y código fuente como límites duros; el round-tripping exacto a menudo es imposible.

Evaluación, corrección y “alucinaciones”

  • El proyecto actualmente mide:
    • Recompilabilidad: ¿compila el C generado?
    • Re-ejecutabilidad: ¿pasa el binario recompilado los casos de prueba?
  • Las tasas de re-ejecutabilidad son bajas (≈10–15%), incluso cuando la recompilabilidad es mucho mayor, lo que subraya las brechas semánticas.
  • Hay debate sobre si el round-tripping o los binarios idénticos son una métrica realista; muchos destacan la calidad de las pruebas y el fuzzing como comprobaciones más prácticas.
  • Algunos proponen verificación formal: el LLM genera código más una prueba; un verificador no basado en LLM comprueba la equivalencia. Otros cuestionan la viabilidad y los límites de la indecidibilidad.

Casos de uso, alcance y direcciones futuras

  • Usos sugeridos: ayudar en ingeniería inversa, análisis de seguridad, análisis de malware y JavaScript ofuscado, detección de toolchain, elevación a representaciones intermedias (p. ej., RzIL) y experimentos de atribución de autoría.
  • Muchos ven los LLM como “copilotos” superpuestos a desensambladores/IR existentes más que como descompiladores autónomos.
  • La generación de conjuntos de datos a partir de C de código abierto (y posiblemente código sintético) se considera una ventaja clave de esta línea de investigación.