- Ingeniería inversa con modelos de lenguaje de gran escala
1. Introducción a LLM4Decompile y Decompile-Eval
- Nuestro objetivo es crear y lanzar el primer LLM de código abierto dedicado a la descompilación, y construir el primer benchmark de descompilación enfocado en la recompilabilidad y la reejecutabilidad para evaluar sus capacidades.
- Se recopilaron un millón de muestras de código C de AnghaBench y se compilaron a código ensamblador usando GCC, con lo que se construyó un dataset de 4 mil millones de tokens de pares ensamblador-código fuente.
- Con este dataset, se ajustó finamente el modelo DeepSeek-Coder, un LLM líder para código, y se construyó Decompile-Eval como benchmark de evaluación basado en preguntas de HumanEval y muestras de prueba.
- La evaluación se realiza desde dos perspectivas: si el código descompilado puede recompilarse con éxito y si puede pasar todas las aserciones de los casos de prueba.
2. Resultados de la evaluación
Métricas
- La recompilabilidad y la reejecutabilidad son indicadores importantes para verificar la efectividad del proceso de descompilación.
- Si el código descompilado puede recompilarse, esto proporciona una fuerte evidencia de integridad sintáctica.
- Como la sintaxis por sí sola no garantiza que sea semánticamente idéntico al programa original, la reejecutabilidad es una medida clave para evaluar la precisión semántica.
- La recompilabilidad y la reejecutabilidad representan la recuperación sintáctica y la preservación semántica, elementos esenciales para una descompilación útil y robusta.
3. Cómo usar el modelo
- LLM4Decompile incluye modelos con entre 1.3 y 33 mil millones de parámetros, disponibles en Hugging Face.
- Ejemplos de modelos: llm4decompile-1.3b, llm4decompile-6.7b, llm4decompile-33b, llm4decompile-6.7b-nsp, llm4decompile-6.7b-uo
- El modelo NSP fue entrenado con código ensamblador y su reejecutabilidad promedio es de aproximadamente 0.17.
- El modelo UO fue entrenado sin conocimiento previo del nivel de optimización (O0~O3) y su reejecutabilidad promedio es de aproximadamente 0.21.
- Ejemplo de uso del modelo: compilar código C a binario, desensamblar el binario en instrucciones ensamblador y usar LLM4Decompile para traducir las instrucciones ensamblador a C.
4. Cómo usar Decompile-Eval
- Los datos están almacenados como una lista JSON en
llm4decompile/decompile-eval/decompile-eval.json.
- Se ofrecen métodos para ejecutar la evaluación en una sola GPU y un solo proceso, así como usando TGI (10 veces más rápido, con soporte para múltiples GPU y multiproceso).
5. En progreso
- LLM4Binary: se planea incluir un dataset más grande para preentrenar el modelo con código ensamblador y código C.
- Decompiler-ALL: se planea ampliar el soporte a más lenguajes/plataformas y configuraciones (por ejemplo, descompilación de múltiples funciones).
6. Licencia
Opinión de GN⁺
- LLM4Decompile propone un enfoque innovador frente a los métodos tradicionales de descompilación binaria, especialmente al aprovechar modelos de lenguaje de gran escala para hacer posible una descompilación más precisa y eficiente.
- Esta tecnología puede ser muy útil en el campo de la seguridad de software, y podría ayudar en el análisis de malware o el mantenimiento de sistemas heredados.
- El hecho de que la reejecutabilidad del código descompilado no sea perfecta sugiere que esta tecnología todavía tiene margen de mejora. Se necesita más investigación para aumentar la precisión y la eficiencia en entornos reales.
- Entre las herramientas existentes con funciones similares están descompiladores comerciales y de código abierto como Ghidra o IDA Pro, pero LLM4Decompile ofrece un nuevo enfoque basado en machine learning.
- Al adoptar esta tecnología, es necesario considerar la calidad y el alcance de los datos de entrenamiento, la precisión del modelo y la velocidad de ejecución. Sus ventajas potenciales son una alta precisión y flexibilidad, mientras que la complejidad de los modelos de gran escala y los requisitos de recursos computacionales pueden ser desventajas.
1 comentarios
Comentarios de Hacker News
Opinión sobre los resultados de "re-ejecutabilidad":
Pregunta sobre la confiabilidad del resultado descompilado:
Un excelente caso de uso para el ajuste fino de LLM:
Interés en entrenar módulos de descompilación basados en desarrolladores:
Interés en el caso de uso ideal del descompilador y en la creación de datasets:
Presentación de un proyecto personal de descompilador basado en LLM en curso:
Preocupación por benchmarks sin comparación con enfoques basados en IA:
Interés en la gran diferencia entre las puntuaciones de recompilabilidad y re-ejecutabilidad:
Curiosidad por la comparación con otros descompiladores que no son LLM:
Curiosidad por que el modelo 6b haya rendido mejor que el modelo 33b: