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.

Metadata

Release files for evmaudit 1.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for evmaudit 1.0.0
File Size Uploaded Provenance Actions
evmaudit-1.0.0.tar.gz 23.3 kB Without provenance Details for evmaudit-1.0.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for evmaudit 1.0.0
File Interpreter ABI Platform Actions
evmaudit-1.0.0-py3-none-any.whl Python 3 none any Details for evmaudit-1.0.0-py3-none-any.whl

Total release size: 52.0 kB

Release files / evmaudit-1.0.0.tar.gz

Download URL evmaudit-1.0.0.tar.gz
Size 23.3 kB
Tags Source
SHA-256 checksum
How to use checksums
71a6f093518b6bc960c358fda74bf1ac02f7b4e543afeb2f79caf01701a20fc5
BLAKE2b-256 checksum
How to use checksums
63fde5d2991181f08133b3ebd15c36b88392fd1bab2fc12f7333288b9f7b2a5c
Upload date
Uploaded using Trusted Publishing?
What is 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}

Release files / evmaudit-1.0.0-py3-none-any.whl

Download URL evmaudit-1.0.0-py3-none-any.whl
Size 28.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
6c1e881ad032c64965a7aa73b3e73dcf98e078ad6ca041853d7b1f0ddff9b82e
BLAKE2b-256 checksum
How to use checksums
c836439b7dac15b2e59da84e18d386ea9b77a96b109b666603f42b9c76536175
Upload date
Uploaded using Trusted Publishing?
What is 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}

Security for evmaudit 1.0.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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