Tutoriales

Módulo para contratos inteligentes de ingeniería inversa

Ghidra Evm En los últimos primaveras, los ataques a los contratos inteligentes utilizados en la esclavitud de bloques de Ethereum oportuno a errores de programación han cedido ocasión a importantes robos de fondos. Cubo que los contratos inteligentes son complejos de modificar y desempolvar una vez compilados e implementados, varios profesionales han señalado la importancia de confirmar su seguridad en la esclavitud de bloques, donde solo está arreglado el código de bytes de la máquina supuesto Ethereum (EVM). En este sentido, la ingeniería inversa mediante el desmontaje y la descompilación puede ser eficaz.

ghidra-EVM es un módulo de Ghidra para la ingeniería inversa de contratos inteligentes. Se puede utilizar para descargar el código de bytes de la máquina supuesto Ethereum (EVM) de la esclavitud de bloques Ethereum y para desmontar y descompilar el acuerdo inteligente. Encima, puede analizar el código de compilación, encontrar métodos de acuerdo y encontrar instrucciones inseguras.

Consiste en un módulo de procesador, un cargador personalizado y complementos que desglosan el código de bytes de Ethereum VM (EVM) y genera un representación de flujo de control (CFG) de un acuerdo inteligente.

La última interpretación utiliza la API Ghidra 9.1.2. Se cimiento en la biblioteca crytic evm_cfg_builder (https://github.com/crytic/evm_cfg_builder) para ayudar a Ghidra con el proceso de coexistentes de CFG.

Ghidra-evm consta de:

  • Un cargador que lee códigos hexadecimales y de bytes de archivos .evm o .evm_h (ver ejemplos).
  • La definición de SLEIGH del conjunto de instrucciones EVM teniendo en cuenta las restricciones del núcleo de Ghidra (ver notas).
  • Un script auxiliar que usa evm_cfg_builder y ghidra_bridge para ayudar a ghidra a crear el CFG y explorar las propiedades funcionales de un acuerdo inteligente.
  • Una colección de scripts que ayudan a realizar ingeniería inversa en varios aspectos de un acuerdo inteligente:
texto descripción
search_codecopy.py Al analizar el código de creación en un acuerdo inteligente, solo podemos ver la función _dispatcher que CODECOPY usa para escribir el código de tiempo de ejecución en la memoria. Este script escudriñamiento declaraciones de CODECOPY bártulos y encuentra los métodos de acuerdo inteligente ocultos en la parte de tiempo de ejecución del acuerdo.
search_dangerous_instructions.py En ocasiones, las instrucciones como CALL, CALLCODE, SELFDESTRUCT y DELEGATECALL se pueden utilizar incorrectamente para transferir fondos a otro acuerdo. Este script los encuentra y crea una inscripción para cada ocurrencia.
load_external_contract.py Descarga el código de bytes del acuerdo inteligente de la esclavitud de bloques a un archivo .evm_h que se puede cargar en ghidra-evm

prontuario de instalación

  • Instale ghidra_bridge siguiendo las instrucciones en https://github.com/justfoxing/ghidra_bridge
  • Instale la biblioteca crytic evm_cfg_builder siguiendo las instrucciones en https://github.com/crytic/evm_cfg_builderbuild
  • Instale el final archivo de interpretación de ghidra-evm en ghidra_evm / dist /:
    • Cascar Ghidrahi
    • Archivo -> Instalar extensiones
    • Haga clic en ‘+’ y seleccione el archivo zip, por ejemplo, ghidra_9.1.2_PUBLIC_20201102_ghidra_evm.zip
    • Haga clic en Aceptar
    • Ghidra. originarse de nuevo

Instrucciones de compilación

El contenido del directorio ghidra-evm se puede usar para crear un módulo Ghidra en Desvanecimiento con procesador y cargador para extender o depurar ghidra_evm.

Tutoriales

Integración con herramientas externas de ejecución simbólica

texto descripción
Mordedor Marca la ruta crítica en Ghidra ayer de que se genere el exploit. Requiere mordedor.

Observaciones

  • El CFG se crea de acuerdo con evm_cfg_builder: se utilizan las instrucciones JUMP y JUMPI.
  • En consecuencia, se genera una tabla de brinco de 32 × 32 (evm_jump_table) para identificar y mostrar ramas en las ventanas de flujo de control y desmontaje.
  • Ghidra no se desarrolló para trabajar con arquitecturas y memorias con un tamaño de palabra> 64 bits. Esto significa que instrucciones como PUSH32 no se mostrarán correctamente en la ventana de descompilación.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba