
Extension Burp Suite pour décoder le trafic Web3 JSON-RPC, y compris les appels de fonctions de contrats intelligents, les réponses et la résolution ABI, avec prise en charge des proxys et des multicalls.
Web3 Decoder est une extension Burp Suite qui aide à analyser ce qui se passe avec les opérations impliquant les contrats intelligents du web3. Il s'agit principalement d'appels JSON-RPC vers les nœuds Ethereum et les nœuds d'autres réseaux compatibles (comme Polygon, Arbitrum, BSC...)
Téléchargez le dernier JAR de l'extension — ce lien fournit toujours la version la plus récente :
⬇ web3-decoder.jar (dernière version)
Les versions plus anciennes sont sur la page des versions.
Puis chargez-le dans Burp Suite :
web3-decoder.jar téléchargé.Web3 et les onglets d'éditeur Web3 Request/Web3 Response apparaissent une fois le chargement terminé.Nécessite une version de Burp livrée avec JRE 21 (versions actuelles de Burp Suite). Le JAR est autonome — toutes les dépendances (web3j, etc.) sont incluses.
./gradlew jar
Le JAR de l'extension est toujours écrit dans un chemin constant — web3-decoder/build/libs/web3-decoder.jar — quelle que soit la version, vous pouvez donc pointer Burp une seule fois et le laisser se recharger automatiquement lors des reconstructions. La publication est documentée dans docs/RELEASING.md.
Voici à quoi ressemblent nos onglets d'éditeur Web3 améliorés après le décodage réussi de vos requêtes et réponses JSON-RPC :

Ci-dessous, l'onglet Web3 redessiné, avec tous les paramètres, les ABI détectés, et plus encore ! (Merci Claude Design !)

La documentation détaillée se trouve dans le dossier docs/ :
La plupart des explorateurs de blocs pris en charge, comme etherscan.io, exigent une clé API pour autoriser plus d'une requête toutes les 5 secondes.
La nouvelle interface vous permet de gérer les chaînes, les explorateurs de blocs et les clés API.
L'extension met en cache les ABI téléchargés depuis les explorateurs de blocs comme Etherscan. Vous pouvez également les ajouter directement depuis l'onglet Web3, en les obtenant automatiquement depuis l'explorateur de blocs, ou en les ajoutant manuellement.
Web3 Request pour les requêtes JSON-RPC (masqué sur le trafic sans eth_call / eth_sendRawTransaction).Web3 Response pour les réponses JSON-RPC correspondantes.Web3 dans la suite avec outils de chaîne/ABI/calldata.eth_call en function + args typés.decoded, skipped, ) et la raison en cas d'omission/échec.La liste complète et actuelle des chaînes incluses se trouve dans
web3-decoder/src/main/resources/chains.json —
l'extension inclut désormais l'ensemble multichaîne Etherscan v2 (Ethereum, Sepolia, BNB Smart
Chain, Polygon, Base, Arbitrum, Linea, Blast, Optimism, Avalanche, Gnosis, Scroll,
Taiko, Berachain, et bien d'autres, y compris leurs testnets). L'interface vous permet également
d'ajouter vos propres chaînes à l'exécution — toute chaîne dont l'explorateur de blocs expose des
API de style Etherscan fonctionnera. Voir Fonctionnalités pour
les détails de gestion des chaînes (y compris la migration des ID de chaîne obsolètes).
Requête JSON-RPC eth_chainId vers le nœud utilisé pour détecter la chaîne sur laquelle nous travaillons et, selon
la chaîne, sélectionne une API d'explorateur de blocs en recherchant dans le fichier chains.json.
Pour décoder les appels de fonction, nous avons besoin de l'ABI (Application Binary Interface) du contrat, qui contient toutes les fonctions pouvant être appelées dans le contrat ainsi que leurs entrées et sorties. L'extension résout les ABI dans cet ordre :
api.4byte.sourcify.dev, avec un ABI synthétique
construit à partir de toute correspondance candidate.Si l'ID de chaîne ne peut pas être déterminé (par exemple, le point de terminaison ne répond pas à eth_chainId), les étapes
limitées à la chaîne (1 à 3) sont ignorées et le décodeur essaie quand même les étapes indépendantes de la chaîne (4 et 5).
Pour décoder le trafic, l'extension communique avec quelques sources externes. Elles sont facultatives et vous pouvez les désactiver depuis l'onglet Web3. Toutes les requêtes sortantes
sont envoyées via la pile HTTP de Burp elle-même (api.http().sendRequest), elles respectent donc
les paramètres de proxy/TLS en amont de Burp et apparaissent dans le trafic de Burp.
Note de confidentialité : Les recherches d'ABI envoient l'adresse du contrat à l'explorateur de blocs configuré, et le repli 4byte envoie le sélecteur de fonction à
api.4byte.sourcify.dev. Les ABI téléchargés sont mis en cache localement afin que les décodages répétés ne refassent pas de requête. La plupart des explorateurs (par exemple etherscan.io) nécessitent une clé API pour plus d'environ 1 requête / 5 secondes — gérez les clés depuis l'ongletWeb3.Le détecteur passif d'ABI lit les corps de réponses HTTP que Burp a déjà capturés et s'exécute entièrement localement — aucune requête n'est générée par la détection elle-même.
errorresult pour les requêtes eth_call précédemment décodées.id JSON-RPC (ou par repli sur l'index).cache, builtin, etherscan, detected ou 4byte) dans la sortie décodée.PassiveScanCheck Burp analyse les corps de réponses HTTP (généralement des bundles JS de dapps minifiés) à la recherche d'ABI Solidity et stocke tout ce qu'il trouve dans un pool limité au projet, indexé par sélecteur de fonction.!0 / !1 émis par Terser/esbuild/Svelte.decodeSource: "detected".eth_chainId ne peut pas être déterminé : le pool détecté et 4byte sont indépendants de la chaîne, le décodeur les essaie donc quand même plutôt que de refuser catégoriquement.api.4byte.sourcify.dev.ERC1967 et ancien slot ZeppelinOS/OpenZeppelin.aggregate, tryAggregate, aggregate3, aggregate3Value, blockAndAggregate, tryBlockAndAggregate.chains.json et persiste les personnalisations dans les préférences de Burp.Web3 listant chaque ABI que le scanner passif a accumulé.eth_sendRawTransaction (et de leurs fonctions internes)| Service | Point de terminaison | Utilisé pour |
|---|
| Nœud JSON-RPC (le point de terminaison déjà présent dans votre trafic) | l'URL RPC proxyfiée | eth_chainId pour détecter la chaîne active, et eth_getStorageAt pour lire les slots d'implémentation du proxy (ERC-1967 / ZeppelinOS hérité). |
| Etherscan (v2 multichaîne) | https://api.etherscan.io/v2/api?chainid=… | Récupération des ABI de contrats vérifiés. Repli sur l'hôte d'explorateur hérité de la chaîne (/api) lorsque la v2 ne prend pas en charge cette chaîne. |
| Base de données de signatures 4byte | https://api.4byte.sourcify.dev | Résolution d'un sélecteur de fonction 4 octets inconnu en signatures candidates lorsqu'aucun ABI n'est disponible (un ABI synthétique est ensuite construit à partir de la correspondance). |