
Burp Suite-Erweiterung zum Dekodieren von Ethereum-JSON-RPC-Aufrufen und Smart-Contract-Interaktionen, mit Unterstützung mehrerer Chains und automatischem ABI-Abruf.
Web3 Decoder ist eine Burp-Suite-Erweiterung zur Analyse von Blockchain-Operationen und Smart-Contract-Interaktionen. Sie verarbeitet JSON-RPC-Aufrufe an Ethereum und kompatible Netzwerke (einschließlich Polygon, Arbitrum, BSC und andere)
Die meisten unterstützten Block-Explorer, wie etherscan.io, erfordern einen API-Schlüssel, um mehr als 1 Anfrage alle 5 Sekunden zu ermöglichen.
Um Ihre API-Schlüssel hinzuzufügen, haben Sie 2 Optionen:
Die Erweiterung speichert die heruntergeladenen ABIs von den Block-Explorern wie Etherscan
in einem Ordner namens .abi_caches im JSON-Format. Sie können einfach eine neue Datei in diesem Ordner hinzufügen,
mit der folgenden Namenskonvention:
{chain_id}_{contract_address.lower()}.abi
Zum Beispiel:
# Ethereum Mainnet (Chain-ID 1), Vertrag 0xfbdca68601f835b27790d98bbb8ec7f05fdeaa9b
1_0xfbdca68601f835b27790d98bbb8ec7f05fdeaa9b.abi
# Polygon (Chain-ID 137), Vertrag 0x447646e84498552e62ecf097cc305eabfff09308
137_0x447646e84498552e62ecf097cc305eabfff09308.abi
Diese Dokumentation gilt für Windows und Linux; macOS-Benutzer können die DMG-Datei verwenden.
Überprüfen Sie, ob Git und Python auf Ihrem System vorhanden sind.
Starten Sie eine Terminalsitzung als Administrator.
Diese Erweiterung benötigt Python3-Bibliotheken wie web3.py, die leider nicht für Python 2.7 verfügbar sind, um direkt mit Jython 2.7 verwendet zu werden. Als 'Hack' ist die Hauptfunktionalität in einer Python-3-Bibliothek geschrieben, die von der Erweiterung über eine Python-Virtual-Umgebung ausgeführt wird (um es mal deutlich zu sagen...)
Ich habe vorkompilierte Binärdateien der verwendeten Python3-Bibliothek für Linux, Windows und Mac OSX erstellt. Die Erweiterung verwendet diese Binärdateien, wenn sie die Bibliothek nicht ausführen kann. Für bessere Leistung oder Entwicklung können Sie ein Virtualenv erstellen und wie folgt installieren:
cd "web3-decoder"
virtualenv -p python3 venv
source venv/bin/activate
pip install web3 py-evm
Die Erweiterung führt Aufrufe an die Bibliothek mithilfe des erstellten Virtualenv aus.
Sobald das Virtualenv erstellt ist, können Sie die Python-Erweiterung hinzufügen, indem Sie die Datei burp_web3_decoder.py im Extender- Tab von Burp Suite auswählen.
eth_call-JSON-RPC-Aufrufeneth_sendRawTransaction-JSON-RPC-Aufrufen (und ihrer inneren Funktionen)eth_calleth_call-Funktioneneth_call als auch in eth_sendRawTransactionAlle unterstützten Chains finden Sie in der Datei chains.json. Dies sind Chains, die einen Block-Explorer mit denselben APIs wie Etherscan haben. Wenn Sie weitere Blockchain-Explorer hinzufügen möchten, fügen Sie sie der Datei chains.json hinzu, testen Sie sie und erstellen Sie einen Pull-Request!
Weitere Beispiele, einschließlich Proxy- und Multicall-Aufrufen, finden Sie in der Datei EXAMPLES.md
eth_call:
Roh:

Dekodiert:

eth_sendRawTransaction (Uniswap-v2-Test):
{
"method": "eth_sendRawTransaction",
"params": [
"0x02f9015b820539808459682f00850df8475800830493e0947a250d5630b4cf539739df2c5dacb4c659f2488d880de0b6b3a7640000b8e47ff36ab500000000000000000000000000000000000000000000009e0950598867d8000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000002105eaa660ff62b14a5e093fc348e13ab63af2e600000000000000000000000000000000000000000000000000000000623b16570000000000000000000000000000000000000000000000000000000000000002000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000006b175474e89094c44da98b954eedeac495271d0fc001a005cfdf9ff11dea2d3e8781cb6ba140ae6e86a0922bfa75938b6f2456f513e24ca057f02b3f7125edb59e22651d503bc296153860e3843f9d495ad21d898c8e20c3"
],
"id": 4700418092893,
"jsonrpc": "2.0"
}
Dekodiert:
[
{
"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"
}
}
}
]
eth_chainId-JSON-RPC-Anfrage an den verwendeten Node, um zu erkennen, an welcher Chain wir arbeiten, und abhängig von der Chain wird eine Block-Explorer-API ausgewählt, indem in der Datei chains.json gesucht wird.
Als Anwendungsbeispiel: Zum Dekodieren von Funktionsaufrufen benötigen wir die ABI (Application Binary Interface) des Vertrags, die alle Funktionen enthält, die im Vertrag aufgerufen werden können, sowie deren Eingaben und Ausgaben. Derzeit funktioniert es mit verifizierten Verträgen im Block-Explorer oder durch manuelles Hinzufügen der ABI. In zukünftigen Versionen werden wir die Möglichkeit untersuchen, eine ABI automatisch zu generieren, indem die Funktions-Selektoren in öffentlichen Datenbanken durchsucht werden.
Das folgende "Fluss"-Diagramm zeigt vereinfacht den Prozess, den die eth_decoder-Bibliothek beim Dekodieren von eth_call-JSON-RPC-Aufrufen durchläuft:
