Skip to main content

evmaudit

Biblioteca de Python para el análisis automatizado de contratos inteligentes Ethereum.

Descripción

evmaudit es un pipeline de análisis de seguridad para contratos Solidity que combina múltiples herramientas de análisis estático y simbólico (Slither, Mythril y Echidna) para proporcionar una evaluación integral de vulnerabilidades. El proceso sigue estas etapas:

  1. Análisis estático y simbólico: Ejecuta Slither y Mythril sobre el contrato original
  2. Normalización: Convierte las salidas de ambas herramientas a un formato común
  3. Correlación: Identifica hallazgos detectados por ambas herramientas para aumentar la confianza
  4. Generación de wrappers Echidna: Crea contratos Solidity wrapper con propiedades echidna_* para cada vulnerabilidad detectada
  5. Fuzzing con Echidna: Ejecuta pruebas de fuzzing sobre los contratos wrapper generados
  6. Generación de informes: Produce informes estructurados (JSON) y legibles (Markdown) con los resultados

El pipeline implementa la "Opción B" para vulnerabilidades no testables automáticamente por Echidna (como la reentrancia), incluyendo las propiedades en el wrapper con advertencias explícitas para documentar los invariantes esperados y guiar la auditoría manual.

Características principales

  • Integración de Slither, Mythril y Echidna en un único pipeline
  • Normalización de salidas a formato común para facilitar la correlación
  • Sistema de confianza basado en coincidencias entre herramientas
  • Generación automática de wrappers Echidna con plantillas predefinidas
  • Soporte para la Opción B en vulnerabilidades no testables
  • Informes detallados en formato JSON y Markdown
  • Gestión automática de entornos y versiones de Solidity
  • Workarounds para bugs conocidos de Echidna 2.3.2

Estructura del proyecto

evmaudit/
├── src/
│   └── evmaudit/                 # Código fuente de la biblioteca
│       ├── runner.py             # Ejecución de herramientas externas
│       ├── normalizer.py         # Normalización de salidas
│       ├── correlator.py         # Correlación de hallazgos
│       ├── swc_catalog.py        # Catálogo de plantillas Echidna
│       ├── echidna_adapter.py    # Generación de wrappers
│       ├── reporter.py           # Generación de informes
│       ├── exceptions.py         # Excepciones personalizadas
│       ├── models.py             # Modelos de datos
│       └── main.py               # Entrada principal
├── docs/                         # Documentación detallada por módulo
├── tests/                        # Tests unitarios
└── README.md                     # Este archivo

Aplicación web

Existe una implementación web de este analizador donde puedes subir un contrato inteligente y obtener el análisis completo. El código fuente y el enlace al despliegue se encuentran en el repositorio pardalaco/TFM-UNIR, dentro de la carpeta webapp/.

Documentación

La carpeta docs/ contiene documentación detallada de cada módulo:

Módulo Descripción
runner.md Ejecución de herramientas externas (Slither, Mythril, Echidna)
normalizer.md Normalización de salidas a formato común
correlator.md Correlación de hallazgos entre herramientas
swc_catalog.md Catálogo de SWCs y plantillas Echidna
echidna_adapter.md Generación de wrappers para fuzzing
reporter.md Generación de informes JSON y Markdown
exceptions.md Excepciones personalizadas del pipeline

Desarrollado por

Esta biblioteca fue desarrollada como parte del Trabajo Fin de Máster (TFM) en la Universidad Internacional de La Rioja (UNIR).

Autores:

  • Daniel Rovira Martínez
  • Paula Suárez Prieto
  • Adrián Moreno Martín

Institución: UNIR - Universidad Internacional de La Rioja
Programa: Máster en Tecnologías Blockchain y Criptoactivos
Año: 2025-2026

Uso básico

from evmaudit import (
    run_slither, run_mythril,
    normalize_slither_output, normalize_mythril_output,
    correlate,
    generate_echidna_wrapper, run_echidna,
    generate_report
)

CONTRACT = "contracts/MiContrato.sol"
CONTRACT_NAME = "MiContrato"

# 1. Análisis estático y simbólico
slither_raw = run_slither(CONTRACT)
mythril_raw = run_mythril(CONTRACT, timeout=120)

# 2. Normalización al formato común
slither_norm = normalize_slither_output(slither_raw)
mythril_norm  = normalize_mythril_output(mythril_raw)

# 3. Correlación: agrupa por (contrato, función, SWC)
corr = correlate(slither_norm, mythril_norm, CONTRACT)

# 4. Generación del wrapper Echidna (Opción B para no-testables)
meta = generate_echidna_wrapper(corr, CONTRACT, CONTRACT_NAME)

# 5. Fuzzing con Echidna (solo si se generó wrapper)
echidna_out = {}
if meta["wrapper_path"]:
    echidna_out = run_echidna(
        meta["wrapper_path"],
        meta["contract_name_echidna"],
        output_contract_path=CONTRACT,
    )

# 6. Informe final
report = generate_report(CONTRACT, corr, echidna_out, meta)
print(f"Riesgo: {report['summary']['risk_score']}/10")
print(f"Informe: jsons/{CONTRACT_NAME}/{CONTRACT_NAME}_report.md")

Requisitos

  • Python 3.8+
  • Slither, Mythril y Echidna instalados y disponibles en PATH
  • solc-select para gestión de versiones de Solidity
  • Dependencias de Python especificadas en pyproject.toml o requirements.txt

Licencia

Este proyecto está licenciado bajo la Licencia MIT - ver el archivo LICENSE para más detalles.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

evmaudit-1.0.0.tar.gz (23.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

evmaudit-1.0.0-py3-none-any.whl (28.7 kB view details)

Uploaded Python 3

File details

Details for the file evmaudit-1.0.0.tar.gz.

File metadata

  • Download URL: evmaudit-1.0.0.tar.gz
  • Upload date:
  • Size: 23.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.15 {"installer":{"name":"uv","version":"0.11.15","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for evmaudit-1.0.0.tar.gz
Algorithm Hash digest
SHA256 71a6f093518b6bc960c358fda74bf1ac02f7b4e543afeb2f79caf01701a20fc5
MD5 2b01205f116180343e013b525362fc8c
BLAKE2b-256 63fde5d2991181f08133b3ebd15c36b88392fd1bab2fc12f7333288b9f7b2a5c

See more details on using hashes here.

File details

Details for the file evmaudit-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: evmaudit-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 28.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.15 {"installer":{"name":"uv","version":"0.11.15","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for evmaudit-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6c1e881ad032c64965a7aa73b3e73dcf98e078ad6ca041853d7b1f0ddff9b82e
MD5 56e034209c1caed9608ac463a808e403
BLAKE2b-256 c836439b7dac15b2e59da84e18d386ea9b77a96b109b666603f42b9c76536175

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

1.0.0 This release

2 files

0.2.0

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page