Decompiladores de LLM priorizan recompilación sobre preservación de código

Fuentes: LLM Decompilers Prioritize Recompilability Over Code Preservation

La decompilación de código compilado en C es fundamental para tareas de seguridad como la detección de vulnerabilidades y el análisis de malware. Tradicionalmente, herramientas como Ghidra y Hex-Rays emiten pseudocódigo o marcadores de posición para partes no resueltas, mientras que los decompiladores basados en modelos de lenguaje grandes (LLM) generan código C limpio e idiomático. Sin embargo, la comunidad ha evaluado estos últimos casi exclusivamente por su capacidad de recompilación y reejecución, métricas que pueden ser engañosas. Un estudio reciente demuestra que un código puede recompilarse y pasar todas las pruebas de entrada/salida estándar, pero divergir en entradas legítimas no probadas o ocultar vulnerabilidades reveladas sin dejar rastro visible en el código recompilado. Para abordar esta brecha, los autores proponen 'Decompile-Diverge', un oráculo de comparación conductual que no depende de pruebas fijas. Esta herramienta sintetiza conductores de prueba, genera un corpus de fuzzing a partir del código de referencia y reejecuta el código decompilado para detectar cambios en el comportamiento. En una evaluación con ocho sistemas en nueve configuraciones, el 4,9% de los candidatos que pasaban todas las pruebas de envío mostraban divergencias, alcanzando el 13% en un solo sistema. Al analizar 300 funciones de librerías de GitHub y 287 funciones basadas en CVE, se observó que la recompilabilidad y el acuerdo conductual podían separarse. El refinamiento más fuerte de los LLM aumentó la tasa de compilación de Ghidra del 75% al 90%, pero redujo la tasa de coincidencia del 74% al 62%. Además, hasta una décima parte de las vulnerabilidades reveladas mostraron 'Ausencia de Crash' en la salida. El análisis a nivel de fuente atribuye esta divergencia a campos, tipos y guardias introducidos que reemplazan los incógnitos visibles de las herramientas tradicionales.