
Web3 Decoder es una extensión de Burp Suite que ayuda a analizar qué está sucediendo con las operaciones que involucran contratos inteligentes de web3. Se trata principalmente de llamadas JSON-RPC a nodos de Ethereum y a nodos de otras redes compatibles (como Polygon, Arbitrum, BSC...).
Descarga el JAR más reciente de la extensión — este enlace siempre sirve la versión más nueva:
⬇ web3-decoder.jar (última versión)
Las versiones anteriores están en la página de Releases.
Luego cárgala en Burp Suite:
web3-decoder.jar descargado.Web3 y las pestañas de editor Web3 Request/Web3 Response aparecen cuando se carga.Requiere una versión de Burp que incluya JRE 21 (versiones actuales de Burp Suite). El JAR es autocontenido: todas las dependencias (web3j, etc.) están incluidas.
./gradlew jar
El JAR de la extensión siempre se escribe en una ruta constante — web3-decoder/build/libs/web3-decoder.jar — independientemente de la versión, por lo que puedes apuntar Burp hacia él una vez y dejar que se recargue automáticamente en las reconstrucciones. El proceso de publicación está documentado en docs/RELEASING.md.
Así es como se ven nuestras pestañas de editor Web3 mejoradas después de decodificar correctamente tus solicitudes y respuestas JSON-RPC:

Debajo, la pestaña Web3 rediseñada, con todos los ajustes, los ABIs detectados, ¡y mucho más! (¡Gracias, Claude Design!)

La documentación detallada se encuentra en la carpeta docs/:
La mayoría de los exploradores de bloques compatibles, como etherscan.io, requieren una clave de API para permitir más de 1 solicitud cada 5 segundos.
La nueva interfaz te permite gestionar las cadenas, los exploradores de bloques y las claves de API.
La extensión almacena en caché los ABIs descargados de los exploradores de bloques como etherscan. También puedes añadirlos directamente desde la pestaña Web3, obteniéndolos automáticamente del explorador de bloques, o añadiéndolos manualmente.
Web3 Request para solicitudes JSON-RPC (oculta en tráfico sin eth_call / eth_sendRawTransaction).Web3 Response para las respuestas JSON-RPC correspondientes.Web3 dedicada en la suite con herramientas de cadena/ABI/calldata.eth_call en function + args tipados.decoded, skipped, ) y el motivo cuando se omite o falla.La lista completa y actual de cadenas incluidas se encuentra en web3-decoder/src/main/resources/chains.json — la extensión ahora incluye el conjunto multicadena de Etherscan v2 (Ethereum, Sepolia, BNB Smart Chain, Polygon, Base, Arbitrum, Linea, Blast, Optimism, Avalanche, Gnosis, Scroll, Taiko, Berachain y muchas más, incluidos sus testnets). La interfaz también te permite añadir tus propias cadenas en tiempo de ejecución: cualquier cadena cuyo explorador de bloques exponga APIs de estilo Etherscan funcionará. Consulta Características para obtener detalles sobre la gestión de cadenas (incluida la migración de chain IDs obsoletos).
Se envía una solicitud JSON-RPC eth_chainId al nodo en uso para detectar en qué cadena estamos trabajando y, según la cadena, se selecciona una API de explorador de bloques buscando en el archivo chains.json.
Para decodificar llamadas a funciones necesitamos el ABI (Application Binary Interface) del contrato, que contiene todas las funciones que se pueden llamar en el contrato y sus entradas y salidas. La extensión resuelve los ABIs en este orden:
api.4byte.sourcify.dev, con un ABI sintético construido a partir de cualquier candidato coincidente.Si no se puede determinar el chain ID (p. ej., el endpoint no responde a eth_chainId), los pasos con ámbito de cadena (1–3) se omiten y el decodificador aún intenta los pasos independientes de la cadena (4 y 5).
Para decodificar el tráfico, la extensión se comunica con algunas fuentes externas. Son opcionales y puedes desactivarlas desde la pestaña Web3. Todas las solicitudes salientes se envían a través de la propia pila HTTP de Burp (api.http().sendRequest), por lo que respetan la configuración de proxy/TLS ascendente de Burp y aparecen en el tráfico de Burp.
Nota de privacidad: Las búsquedas de ABI envían la dirección del contrato al explorador de bloques configurado, y el respaldo 4byte envía el selector de función a
api.4byte.sourcify.dev. Los ABIs descargados se almacenan en caché localmente para que los decodificados repetidos no vuelvan a consultar. La mayoría de los exploradores (p. ej., etherscan.io) necesitan una clave de API para más de ~1 solicitud / 5 segundos: gestiona las claves desde la pestañaWeb3.El detector pasivo de ABIs lee los cuerpos de las respuestas HTTP que Burp ya ha capturado y se ejecuta completamente en local: la detección en sí no genera tráfico.
errorresult para solicitudes eth_call previamente decodificadas.id JSON-RPC (o por índice como respaldo).cache, builtin, etherscan, detected o 4byte) en la salida decodificada.PassiveScanCheck de Burp escanea los cuerpos de las respuestas HTTP (normalmente bundles JS de dapps minificados) en busca de ABIs de Solidity y almacena todo lo que encuentra en un pool con ámbito de proyecto indexado por selector de función.!0 / !1 emitidos por Terser/esbuild/Svelte.decodeSource: "detected".eth_chainId: el pool detectado y 4byte son independientes de la cadena, por lo que el decodificador aún los intenta en lugar de negarse directamente.api.4byte.sourcify.dev.ERC1967 y slot legacy de ZeppelinOS/OpenZeppelin.aggregate, tryAggregate, aggregate3, aggregate3Value, blockAndAggregate, tryBlockAndAggregate.chains.json y persiste las personalizaciones en las preferencias de Burp.Web3 que lista cada ABI que el escáner pasivo ha acumulado.eth_sendRawTransaction (y sus funciones internas)| Servicio | Endpoint | Uso |
|---|
| Nodo JSON-RPC (el endpoint que ya está en tu tráfico) | la URL RPC a través del proxy | eth_chainId para detectar la cadena activa y eth_getStorageAt para leer los slots de implementación del proxy (ERC-1967 / ZeppelinOS legacy). |
| Etherscan (multicadena v2) | https://api.etherscan.io/v2/api?chainid=… | Obtener ABIs de contratos verificados. Recurre al host de explorador legacy de la cadena (/api) cuando v2 no soporta esa cadena. |
| Base de datos de firmas 4byte | https://api.4byte.sourcify.dev | Resolver un selector de función de 4 bytes desconocido en firmas candidatas cuando no hay ABI disponible (luego se construye un ABI sintético a partir de la coincidencia). |