Decompiler is a specialized type of reverse engineering tool extensively employed in program analysis tasks, particularly in program comprehension and vulnerability detection. However, current Solidity smart contract decompilers face significant limitations in reconstructing the original source code. In particular, the bottleneck of SOTA decompilers lies in inaccurate method identification, incorrect variable type recovery, and missing contract attributes. These deficiencies hinder downstream tasks and understanding of the program logic. To address these challenges, we propose SmartHalo, a new framework that enhances decompiler output by combining static analysis (SA) and large language models (LLM). SmartHalo leverages the complementary strengths of SA's accuracy in control and data flow analysis and LLM's capability in semantic prediction. More specifically, \system{} constructs a new data structure - Dependency Graph (DG), to extract semantic dependencies via static analysis. Then, it takes DG to create prompts for LLM optimization. Finally, the correctness of LLM outputs is validated through symbolic execution and formal verification. Evaluation on a dataset consisting of 465 randomly selected smart contract methods shows that SmartHalo significantly improves the quality of the decompiled code, compared to SOTA decompilers (e.g., Gigahorse). Notably, integrating GPT-4o with SmartHalo further enhances its performance, achieving precision rates of 87.39% for method boundaries, 90.39% for variable types, and 80.65% for contract attributes.
- ID del Artículo: 2501.08670
- Título: Augmenting Smart Contract Decompiler Output through Fine-grained Dependency Analysis and LLM-facilitated Semantic Recovery
- Autores: Zeqin Liao, Yuhong Nan, Zixu Gao, Henglong Liang, Sicheng Hao, Peifan Ren, Zibin Zheng
- Clasificación: cs.SE (Ingeniería de Software)
- Fecha de Publicación: Enero de 2025 (preimpresión arXiv)
- Enlace del Artículo: https://arxiv.org/abs/2501.08670
Los descompiladores de contratos inteligentes son herramientas de ingeniería inversa ampliamente utilizadas en análisis de programas, desempeñando un papel importante en la comprensión de programas y detección de vulnerabilidades. Sin embargo, los descompiladores actuales de contratos inteligentes Solidity presentan limitaciones significativas en la reconstrucción del código fuente original, manifestándose principalmente en tres aspectos: identificación imprecisa de funciones, recuperación errónea de tipos de variables y atributos de contrato faltantes. Para abordar estos desafíos, este artículo propone el marco SmartHalo, que combina análisis estático (SA) y modelos de lenguaje grande (LLM) para mejorar la salida del descompilador. SmartHalo aprovecha la precisión del SA en análisis de flujo de control y datos, así como la capacidad del LLM en predicción semántica. Específicamente, el marco construye una estructura de datos de grafo de dependencias (DG) para extraer relaciones de dependencia semántica, luego crea indicaciones optimizadas de LLM basadas en DG, y finalmente verifica la corrección de la salida del LLM mediante ejecución simbólica y verificación formal.
La descompilación de contratos inteligentes enfrenta tres problemas centrales:
- Identificación imprecisa de límites de función: Los descompiladores existentes no pueden determinar con precisión los límites de función, frecuentemente recuperando múltiples funciones como una sola o omitiendo funciones importantes
- Recuperación errónea de tipos de variables: Los errores de tipo producidos por el descompilador son inconsistentes con reglas de dominio estático, como recuperar incorrectamente el valor de retorno bytes32 de la función keccak256 como tipo uint256
- Atributos de contrato faltantes: Las variables de estado en contratos inteligentes registran atributos de contrato clave (como activos, identidades, enrutadores), pero están completamente ausentes en el código descompilado
Estos defectos obstaculizan seriamente las tareas posteriores:
- Afectan la precisión de la detección de vulnerabilidades, produciendo falsos positivos y falsos negativos
- Reducen la eficiencia de la comprensión de programas
- Limitan tareas de análisis avanzado como análisis de flujo de llamadas entre contratos
- SmartDagger: Solo puede recuperar parcialmente atributos de contrato de variables de estado, basado en modelos de aprendizaje profundo, con rendimiento degradado en contratos emergentes
- Neural-FEBI: No soporta recuperación de límites para funciones con modificadores o funciones heredadas
- SigRec/VarLifter/DeepInfer: Solo pueden recuperar parcialmente tipos de parámetros de firmas de función conocidas, dependiendo de reglas heurísticas predefinidas con baja cobertura
Basada en dos perspectivas clave:
- Patrones naturales de software: Los programadores tienden a utilizar estructuras de código similares, atributos de contrato, tipos de variables y límites de función en contextos similares
- Mejora sinérgica de SA y LLM: SA tiene alta precisión en el manejo de restricciones estáticas complejas, mientras que LLM tiene flexibilidad en la predicción de objetivos que carecen de restricciones estáticas
- Identificación y análisis sistematizado de las limitaciones clave de la salida actual del descompilador de contratos inteligentes
- Propuesta del marco SmartHalo, que combina innovadoramente análisis estático y modelos de lenguaje grande para optimizar la salida del descompilador
- Diseño de la estructura de datos de grafo de dependencias (DG), extrayendo tres tipos de relaciones de dependencia semántica (dependencia de estado, dependencia de flujo de control, dependencia de tipo)
- Establecimiento de un mecanismo riguroso de verificación de corrección, mediante ejecución simbólica y verificación formal para abordar el problema de alucinaciones del LLM
- Evaluación integral y validación de la efectividad de SmartHalo en recuperación de límites de función, tipos de variables y atributos de contrato
Entrada: Pseudocódigo generado por el descompilador
Salida: Código descompilado optimizado que contiene límites de función precisos, tipos de variables y atributos de contrato
Restricciones: Mantener equivalencia de comportamiento del programa, cumplir con reglas de tipo estático de Solidity
SmartHalo adopta una arquitectura de tres etapas:
- Análisis de flujo de control: Utiliza Tree-sitter para construir árbol de sintaxis, convierte a representación intermedia de tres direcciones, genera grafos de flujo de control y datos
- Identificación de relaciones de dependencia:
- Dependencia de tipo: Relaciones de asociación entre tipos de variables y otras variables o expresiones
- Dependencia de estado: Relaciones de lectura-escritura entre variables de estado
- Dependencia de flujo de control: Relaciones de rutas de ejecución del programa
- Construcción del grafo de dependencias: DG = (Nc, Ec, Xe), donde Nc es el conjunto de nodos (variables y expresiones), Ec es el conjunto de aristas (tres tipos de relaciones de dependencia), Xe es la función de etiquetado
- Generación de contexto de código:
- Variables: Realiza corte de código basado en DG, extrayendo fragmentos de código relacionados con la variable objetivo
- Funciones: Busca la cadena de llamadas donde se encuentra la función objetivo
- Generación de candidatos de inferencia:
- Candidatos de tipo de variable: Recopila tipos integrados de la documentación de Solidity
- Candidatos de atributos de contrato: Limit, Fee, Flag, Address, Asset, Router, Others
- Indicaciones de cadena de pensamiento (COT): Convierte relaciones de dependencia en DG a descripciones de pasos de razonamiento
- Verificación de equivalencia de comportamiento del programa:
- Realiza ejecución simbólica en funciones originales y optimizadas
- Utiliza el solucionador Z3 para verificación formal
- Aserción de equivalencia: Φ = ¬(s ⇔ s′)
- Verificación de violación de reglas estáticas: Detecta errores de inferencia de tipos basados en reglas de tipo de Solidity
- Análisis de dependencias granulares: Extrae y utiliza sistemáticamente por primera vez tres tipos de relaciones de dependencia semántica
- Marco de cooperación SA-LLM: Combina innovadoramente la precisión del análisis estático con la capacidad de comprensión semántica del LLM
- Garantía rigurosa de corrección: Asegura la corrección de los resultados de optimización mediante ejecución simbólica y verificación formal
- Diseño de generalidad: Soporta integración de diferentes LLM y descompiladores
- Conjunto de datos de evaluación: Selecciona aleatoriamente 500 funciones del conjunto de datos de contratos inteligentes de código abierto más grande, obteniendo finalmente 456 pares de código fuente y salida descompilada
- Conjunto de datos de contratos complejos: Selecciona aleatoriamente 50 contratos inteligentes de 682 DApps reales (aproximadamente 900 funciones)
- Conjunto de datos de detección de vulnerabilidades: Contiene 81 etiquetas de vulnerabilidad de reentrada, 18 pares de contratos de ataque, 50 contratos de vulnerabilidad de desbordamiento de enteros
- Coincidencia de límites de función: Puntos de inicio y fin coinciden completamente con funciones a nivel de código fuente
- Coincidencia de tipo: El tipo predicho coincide completamente con el tipo real (incluyendo disposición de datos e información de campos)
- Coincidencia de atributos de contrato: El atributo predicho coincide completamente con el atributo real
- Tasa de fallo de recompilación: Tasa de errores de compilación del código optimizado
- SmartDagger: Comparación para recuperación de atributos de contrato
- VarLifter: Comparación para inferencia de tipos de variables
- Descompilador original: Gigahorse/Dedaub como línea base
- Entorno de desarrollo: Python 3.8.10, 1799 líneas de código
- Selección de LLM: Principalmente GPT-3.5, soporta GPT-4o mini, Llama-3, Deepseek-v3, Qwen-2.5-coder
- Configuración de hardware: CPU Intel i9-10980XE, GPU RTX 3090, RAM de 250GB
| Métrica | Mejora de Precisión | Mejora de Recall |
|---|
| Identificación de límites de función | +20.30% | +30.03% |
| Inferencia de tipos de variables | +30.02% | +42.04% |
| Recuperación de atributos de contrato | 68.06% | 90.93% |
- vs SmartDagger (atributos de contrato): Mejora de precisión 44.69%, mejora de recall 80.86%
- vs VarLifter (tipos de variables): Mejora de precisión 13.51%, mejora de recall 77.08%
| LLM | Límites de Función (P/R) | Tipos de Variables (P/R) | Atributos de Contrato (P/R) |
|---|
| GPT-3.5 | 88.26%/80.51% | 92.27%/84.26% | 68.06%/90.93% |
| GPT-4o mini | 91.32%/87.38% | 90.40%/88.82% | 80.66%/91.78% |
| Llama-3 | 66.09%/55.11% | 62.41%/48.53% | 61.68%/60.34% |
Comparación entre uso individual de SA, LLM y marco completo de SmartHalo:
- Contribución de SA: Proporciona extracción precisa de relaciones de dependencia y verificación de restricciones
- Contribución de LLM: Proporciona capacidad de comprensión semántica e identificación de patrones raros
- Efecto sinérgico: SmartHalo mejora en 19.23%/29.23% en límites de función comparado con uso individual de LLM
- Entre descompiladores: Mejoras significativas en Heimdall, Panoramix
- Contratos complejos: Mantiene buen rendimiento en DApps complejos reales
- Análisis de eficiencia: Tiempo de procesamiento promedio 23.99 segundos, costo $0.00136/función
- Detección de vulnerabilidad de reentrada: Precisión mejorada de 72.16% a 80.41%
- Identificación de ataque: Recall mejorado de 83.33% a 100.00%
- Detección de desbordamiento de enteros: Mejora de precisión 21.96%, mejora de recall 38.00%
- Gigahorse/Elipmoc: Convierte bytecode EVM a representación de código de tres direcciones
- Erays/EtherSolve: Recupera grafo de flujo de control desde bytecode EVM
- SigRec/DeepInfer: Recupera firmas de funciones públicas
- Recuperación de información semántica: DEBIN, OSPREY, BDA, etc. recuperan dependencias de programa mediante análisis estático
- Optimización de nombres de variables y tipos: DIRE, DIRTY, DeGPT, etc. utilizan aprendizaje profundo para optimizar salida de descompilador
Comparado con trabajo existente, SmartHalo posee:
- Objetivos de optimización más completos: Maneja simultáneamente límites de función, tipos de variables y atributos de contrato
- Capacidad de generalización más fuerte: No depende de datos de entrenamiento específicos, se adapta a contratos emergentes
- Garantía rigurosa de corrección: Asegura corrección de resultados de optimización mediante verificación formal
- SmartHalo mejora significativamente la calidad de descompilación de contratos inteligentes, logrando mejoras sustanciales en tres métricas clave
- El marco de cooperación SA-LLM demuestra ser efectivo, aprovechando plenamente las ventajas complementarias de ambos
- El mecanismo riguroso de verificación de corrección controla exitosamente el problema de alucinaciones del LLM
- El marco posee buena capacidad de generalización, soportando múltiples LLM y descompiladores
- Recuperación de estructura de herencia: No puede recuperar relaciones de herencia dentro de contratos, ya que el nivel de bytecode carece de información de clase
- Escala del conjunto de datos: El conjunto de datos de evaluación es relativamente pequeño (456 funciones), pero comparable con la escala de investigación SOTA
- Evolución de API de LLM: Puede afectar la reproducibilidad de resultados
- Manejo de escenarios complejos: Rendimiento limitado en escenarios de llamadas de bajo nivel, ensamblaje en línea, dependencias fuera de cadena
- Recuperación de estructura de herencia: Explorar razonamiento de relaciones de herencia basado en coincidencia de patrones
- Evaluación a mayor escala: Validar robustez del método en conjuntos de datos más grandes
- Entrenamiento de modelos especializados: Entrenar modelos especializados de comprensión de contratos inteligentes
- Optimización en tiempo real: Soportar optimización de descompilación en línea
- Definición clara del problema: Identifica y analiza sistemáticamente los problemas centrales de descompilación de contratos inteligentes
- Fuerte innovación del método: Propone por primera vez marco de cooperación SA-LLM, con diseño ingenioso de estructura de grafo de dependencias
- Solución técnica completa: Forma un ciclo cerrado completo desde extracción semántica, mejora de optimización hasta verificación de corrección
- Evaluación experimental integral: Experimentos de comparación multidimensional, incluyendo investigación de ablación y validación de tareas posteriores
- Alto valor práctico: 60.22% del código optimizado puede recompilarse directamente, mejorando significativamente la practicidad
- Análisis teórico insuficiente: Carece de análisis profundo de garantías teóricas del método
- Análisis de errores limitado: El análisis de causa raíz de casos de fallo de optimización podría ser más profundo
- Costo computacional: La ejecución simbólica y verificación formal pueden traer costo computacional considerable
- Dependencia de herramientas externas: Depende de la calidad de descompiladores existentes y API de LLM
- Contribución académica: Proporciona nuevo paradigma de investigación para el campo de análisis de contratos inteligentes
- Valor práctico: Puede aplicarse directamente a análisis de seguridad de contratos inteligentes y comprensión de programas
- Escalabilidad: El diseño del marco soporta integración de diferentes herramientas de análisis y modelos
- Contribución de código abierto: Los autores se comprometen a liberar código y conjunto de datos, facilitando reproducción de investigación
- Auditoría de seguridad de contratos inteligentes: Mejora legibilidad y precisión del código descompilado
- Herramientas de detección de vulnerabilidades: Como paso de preprocesamiento para mejorar precisión de detección
- Herramientas de comprensión de programas: Asiste a desarrolladores en comprensión de lógica de contratos de terceros
- Investigación académica: Proporciona datos de alta calidad para investigación de análisis de contratos inteligentes
El artículo cita 96 referencias relacionadas, incluyendo principalmente:
- Análisis de contratos inteligentes: Trabajos clásicos como Gigahorse, SmartDagger, VarLifter
- Teoría de análisis de programas: Literatura relacionada con ejecución simbólica y verificación formal
- Aplicación de aprendizaje automático: Aplicación de aprendizaje profundo en análisis de programas
- Técnica de descompilación: Métodos y herramientas de optimización de descompilación tradicional
Evaluación General: Este es un artículo de investigación de alta calidad en ingeniería de software que propone una solución innovadora a un problema importante en descompilación de contratos inteligentes. El diseño del método es razonable, la evaluación experimental es suficiente, y el valor práctico es destacado. Aunque existen algunas limitaciones, la contribución general es significativa y tiene un importante efecto promotor en el campo de análisis de seguridad de contratos inteligentes.