
Extensión de Burp Suite para decodificar llamadas JSON-RPC de Ethereum e interacciones con contratos inteligentes, con soporte para múltiples cadenas y recuperación automática de ABI.
Web3 Decoder es una extensión de Burp Suite diseñada para analizar operaciones de blockchain e interacciones con contratos inteligentes. Procesa llamadas JSON-RPC a Ethereum y redes compatibles (incluyendo Polygon, Arbitrum, BSC, y otras)
La mayoría de los exploradores de bloques compatibles, como etherscan.io, requieren una clave API para permitir más de 1 solicitud cada 5 segundos.
Para añadir tus claves API tienes 2 opciones:
La extensión almacena en caché los ABIs descargados de los exploradores de bloques como etherscan
dentro de una carpeta llamada .abi_caches en formato JSON. Simplemente puedes añadir un nuevo archivo dentro de esa carpeta,
con la siguiente convención de nombres:
{chain_id}_{contract_address.lower()}.abi
Por ejemplo:
# Ethereum Mainnet (chain ID 1), contrato 0xfbdca68601f835b27790d98bbb8ec7f05fdeaa9b
1_0xfbdca68601f835b27790d98bbb8ec7f05fdeaa9b.abi
# Polygon (chain id 137), contrato 0x447646e84498552e62ecf097cc305eabfff09308
137_0x447646e84498552e62ecf097cc305eabfff09308.abi
Esta documentación aplica a Windows y Linux; los usuarios de macOS pueden usar el archivo DMG.
Comprueba que Git y Python estén instalados en tu sistema.
Inicia una sesión de terminal como administrador.
Esta extensión requiere librerías de python3 como web3.py que desafortunadamente no están disponibles para python 2.7 para usarse directamente con Jython 2.7. Como un 'hack', la funcionalidad principal está escrita en una librería de python 3 que es ejecutada por la extensión a través de un entorno virtual de python (hablando de algo sucio...)
He creado binarios precompilados de la librería de python3 utilizada, para Linux, Windows y Mac OSX. La extensión usará estos binarios si no es capaz de ejecutar la librería. Para un mejor rendimiento o desarrollo, puedes crear un virtualenv, e instalar de la siguiente manera:
cd "web3-decoder"
virtualenv -p python3 venv
source venv/bin/activate
pip install web3 py-evm
La extensión hará llamadas a la librería usando el virtualenv creado.
Una vez creado el virtualenv, puedes añadir la extensión de python seleccionando el archivo burp_web3_decoder.py en la pestaña Extender de Burp Suite
eth_calleth_sendRawTransaction (y sus funciones internas)eth_calleth_calleth_call como en eth_sendRawTransactionTodas las cadenas soportadas se pueden encontrar en el archivo chains.json. Estas son cadenas que tienen un explorador de bloques con las mismas APIs que etherscan. Si quieres añadir más exploradores de bloques, agrégalos al archivo chains.json, pruébalo, ¡y haz un pull request!
Para más ejemplos, incluyendo llamadas de proxy y multicall, consulta el EXAMPLES.md
eth_call:
Crudo:

Decodificado:

eth_sendRawTransaction (prueba de Uniswap v2):
{
"method": "eth_sendRawTransaction",
"params": [
"0x02f9015b820539808459682f00850df8475800830493e0947a250d5630b4cf539739df2c5dacb4c659f2488d880de0b6b3a7640000b8e47ff36ab500000000000000000000000000000000000000000000009e0950598867d8000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000002105eaa660ff62b14a5e093fc348e13ab63af2e600000000000000000000000000000000000000000000000000000000623b16570000000000000000000000000000000000000000000000000000000000000002000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000006b175474e89094c44da98b954eedeac495271d0fc001a005cfdf9ff11dea2d3e8781cb6ba140ae6e86a0922bfa75938b6f2456f513e24ca057f02b3f7125edb59e22651d503bc296153860e3843f9d495ad21d898c8e20c3"
],
"id": 4700418092893,
"jsonrpc": "2.0"
}
Decodificado:
[
{
"chain_id": 1337,
"access_list": [],
"nonce": 0,
"r": 2628844986784880378434698689940765181553490914879903463877191830852582236748,
"s": 39775559607776431912363889945449043629789293388076288013264795388376358199491,
"max_priority_fee_per_gas": 1500000000,
"gas": 300000,
"max_fee_per_gas": 60000000000,
"from": "0x2105Eaa660ff62b14a5e093fc348e13ab63AF2E6",
"y_parity": 1,
"to": "0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D",
"value": 1000000000000000000,
"data": "0x7ff36ab500000000000000000000000000000000000000000000009e0950598867d8000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000002105eaa660ff62b14a5e093fc348e13ab63af2e600000000000000000000000000000000000000000000000000000000623b16570000000000000000000000000000000000000000000000000000000000000002000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000006b175474e89094c44da98b954eedeac495271d0f",
"decoded_function": {
"args": {
"amountOutMin": 2915256698432979992576,
"path": [
"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
"0x6B175474E89094C44Da98b954EedeAC495271d0F"
],
"to": "0x2105Eaa660ff62b14a5e093fc348e13ab63AF2E6",
"deadline": 1648039511
},
"function": "swapExactETHForTokens(uint256,address[],address,uint256)",
"to": "0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D",
"abi": {
"outputs": [
{
"internalType": "uint256[]",
"type": "uint256[]",
"name": "amounts"
}
],
"inputs": [
{
"internalType": "uint256",
"type": "uint256",
"name": "amountOutMin"
},
{
"internalType": "address[]",
"type": "address[]",
"name": "path"
},
{
"internalType": "address",
"type": "address",
"name": "to"
},
{
"internalType": "uint256",
"type": "uint256",
"name": "deadline"
}
],
"stateMutability": "payable",
"type": "function",
"name": "swapExactETHForTokens"
}
}
}
]
Solicitud JSON-RPC eth_chainId al nodo en uso para detectar en qué cadena estamos trabajando, y dependiendo de la cadena, selecciona una API de explorador de bloques, buscando en el archivo chains.json.
Como ejemplo de uso, para decodificar llamadas de funciones, necesitamos el ABI (Interfaz Binaria de Aplicación) del contrato, que contiene todas las funciones que se pueden llamar en el contrato y sus entradas y salidas. Por ahora, funciona con contratos verificados en el explorador de bloques, o añadiendo manualmente el ABI. En futuras versiones, exploraremos la posibilidad de generar automáticamente un ABI buscando los selectores de funciones en bases de datos públicas.
El siguiente diagrama de "flujo" muestra de forma simplificada el proceso que sigue la librería eth_decoder al decodificar llamadas JSON-RPC eth_call:
