
امتداد لـ Burp Suite لفك ترميز حركة مرور Web3 JSON-RPC، بما في ذلك استدعاءات دوال العقود الذكية، والاستجابات، وحل ABI مع دعم الوكيل والاستدعاءات المتعددة.
Web3 Decoder هو امتداد لـ Burp Suite يساعد في تحليل العمليات المتعلقة بالعقود الذكية في Web3. ويشمل ذلك بشكل أساسي استدعاءات JSON-RPC الموجهة إلى عُقد Ethereum وعُقد الشبكات المتوافقة الأخرى (مثل Polygon وArbitrum وBSC...).
حمّل أحدث ملف JAR للامتداد — هذا الرابط يوفّر دائمًا أحدث إصدار:
الإصدارات الأقدم متوفرة في صفحة Releases.
ثم قم بتحميله في Burp Suite:
web3-decoder.jar.Web3 وعلامتا تبويب المحرر Web3 Request/Web3 Response فور تحميله.يتطلب إصدارًا من Burp مرفقًا بـ JRE 21 (إصدارات Burp Suite الحالية). ملف JAR مكتفٍ ذاتيًا — جميع التبعيات (web3j، وغيرها) مضمّنة فيه.
./gradlew jar
يُكتب ملف JAR الخاص بالامتداد دائمًا في مسار ثابت — web3-decoder/build/libs/web3-decoder.jar — بغض النظر عن الإصدار، لذا يمكنك توجيه Burp إليه مرة واحدة والسماح له بإعادة التحميل تلقائيًا عند كل إعادة بناء. عملية الإصدار موثّقة في docs/RELEASING.md.
هكذا تبدو علامات تبويب محرر Web3 المحسّنة لدينا بعد فك ترميز طلبات واستجابات JSON-RPC بنجاح:

أدناه علامة تبويب Web3 المعاد تصميمها، مع جميع الإعدادات وABIs المكتشفة والمزيد! (شكرًا Claude Design!)

التوثيق المفصّل موجود في مجلد docs/:
معظم مستكشفي الكتل المدعومين، مثل etherscan.io، يتطلبون مفتاح API للسماح بأكثر من طلب واحد كل 5 ثوانٍ.
تتيح لك الواجهة الجديدة إدارة الشبكات ومستكشفي الكتل ومفاتيح API
يقوم الامتداد بتخزين ABIs التي تم تنزيلها من مستكشفي الكتل مثل etherscan مؤقتًا. يمكنك أيضًا إضافتها مباشرة من علامة تبويب Web3، إما بالحصول عليها تلقائيًا من مستكشف الكتل، أو بإضافتها يدويًا.
Web3 Request في المحرر لطلبات JSON-RPC (مخفية عند حركة المرور التي لا تحتوي على eth_call / eth_sendRawTransaction).Web3 Response في المحرر لاستجابات JSON-RPC المقابلة.Web3 مخصصة في الحزمة مع أدوات الشبكة/ABI/calldata.eth_call إلى function + وسائط args مُنمّطة.decoded أو skipped أو ) مع السبب عند التخطي/الفشل.القائمة الكاملة والحالية للشبكات المدمجة موجودة في web3-decoder/src/main/resources/chains.json — الامتداد الآن يأتي مع مجموعة Etherscan v2 متعددة الشبكات (Ethereum وSepolia وBNB Smart Chain وPolygon وBase وArbitrum وLinea وBlast وOptimism وAvalanche وGnosis وScroll وTaiko وBerachain وغيرها الكثير، بما في ذلك شبكاتها التجريبية). تتيح الواجهة أيضًا إضافة شبكاتك الخاصة أثناء التشغيل — أي شبكة يُظهر مستكشف الكتل الخاص بها واجهات برمجة بنمط Etherscan ستعمل. راجع Features لتفاصيل إدارة الشبكات (بما في ذلك ترحيل معرّفات الشبكات القديمة).
يُرسل طلب JSON-RPC من نوع eth_chainId إلى العقدة قيد الاستخدام لتحديد الشبكة التي نعمل عليها، واعتمادًا على الشبكة، يختار واجهة برمجة لمستكشف الكتل عبر البحث في ملف chains.json.
لفك ترميز استدعاءات الدوال، نحتاج إلى ABI (الواجهة الثنائية للتطبيق) الخاص بالعقد، والتي تحتوي على جميع الدوال التي يمكن استدعاؤها في العقد ومدخلاتها ومخرجاتها. يحل الامتداد الـ ABIs بالترتيب التالي:
api.4byte.sourcify.dev، مع بناء ABI اصطناعي من أي مرشح مطابق.إذا تعذّر تحديد معرّف الشبكة (مثلًا عندما لا يستجيب الطرف endpoint لـ eth_chainId)، يتم تخطي الخطوات المرتبطة بالشبكة (1–3) ويظل المفكك يحاول تنفيذ الخطوات غير المرتبطة بالشبكة (4 و5).
لفك ترميز حركة المرور، يتواصل الامتداد مع عدد قليل من المصادر الخارجية. هذه المصادر اختيارية ويمكنك إيقاف تشغيلها من علامة تبويب Web3. تُرسل جميع الطلبات الصادرة عبر حزمة HTTP الخاصة بـ Burp (api.http().sendRequest)، لذا فهي تحترم إعدادات البروكسي وTLS العلوية في Burp وتظهر في حركة مرور Burp.
ملاحظة خصوصية: عمليات البحث عن ABI ترسل عنوان العقد إلى مستكشف الكتل المُعدّ، بينما يرسل الاحتياطي عبر 4byte منتقي الدالة إلى
api.4byte.sourcify.dev. يتم تخزين ABIs التي تم تنزيلها محليًا مؤقتًا بحيث لا تُعاد الاستعلامات عند تكرار فك الترميز. معظم المستكشفين (مثل etherscan.io) يحتاجون إلى مفتاح API لأكثر من ~طلب واحد / 5 ثوانٍ — أدر المفاتيح من علامة تبويبWeb3.يقرأ الماسح السلبي لـ ABI أجسام استجابات HTTP التي التقطها Burp بالفعل ويعمل محليًا بالكامل — لا يتم توليد أي حركة مرور بواسطة الاكتشاف نفسه.
errorresult لطلبات eth_call التي تم فك ترميزها سابقًا.id الخاص بـ JSON-RPC (أو بالرجوع إلى الفهرس كبديل).cache أو builtin أو etherscan أو detected أو 4byte) في المخرجات المُفككة.PassiveScanCheck من Burp بفحص أجسام استجابات HTTP (عادةً حزم JS المصغّرة لواجهات dApp الأمامية) بحثًا عن ABIs الخاصة بـ Solidity، ويخزّن كل ما يجده في مجموعة على نطاق المشروع مفهرسة بمنتقي الدالة.!0/!1 التي يصدرها Terser/esbuild/Svelte.decodeSource: "detected".eth_chainId: المجموعة المكتشفة و4byte غير مرتبطتين بشبكة معينة، لذا يحاول المفكك استخدامهما بدلاً من الرفض المباشر.api.4byte.sourcify.dev.ERC1967 وخانة التخزين القديمة ZeppelinOS/OpenZeppelin.aggregate وtryAggregate وaggregate3 وaggregate3Value وblockAndAggregate وtryBlockAndAggregate.chains.json وحفظ التخصيصات في تفضيلات Burp.Web3 تعرض كل ABI راكمه الماسح السلبي.eth_sendRawTransaction (ودوالها الداخلية)| الخدمة | نقطة النهاية (Endpoint) | الغرض |
|---|
| عقدة JSON-RPC (النقطة الطرفية الموجودة بالفعل في حركة مرورك) | عنوان RPC الذي يتم تمريره عبر البروكسي | eth_chainId لتحديد الشبكة النشطة، وeth_getStorageAt لقراءة خانات تنفيذ البروكسي (ERC-1967 / ZeppelinOS القديمة). |
| Etherscan (متعدد الشبكات v2) | https://api.etherscan.io/v2/api?chainid=… | جلب ABIs الخاصة بالعقود الموثّقة. يتراجع إلى مضيف المستكشف القديم للشبكة (/api) عندما لا يدعم v2 تلك الشبكة. |
| قاعدة بيانات تواقيع 4byte | https://api.4byte.sourcify.dev | تحويل منتقي دوال غير معروف ذي 4 بايت إلى تواقيع مرشحة عند عدم توفر ABI (يُبنى عندها ABI اصطناعي من المطابقة). |