Web3 Decoder
Web3 Decoder هو امتداد لـ Burp Suite يساعد في تحليل العمليات المتعلقة بالعقود الذكية في Web3. ويشمل ذلك بشكل أساسي استدعاءات JSON-RPC الموجهة إلى عُقد Ethereum وعُقد الشبكات المتوافقة الأخرى (مثل Polygon وArbitrum وBSC...).
التحميل والتثبيت
حمّل أحدث ملف JAR للامتداد — هذا الرابط يوفّر دائمًا أحدث إصدار:
⬇ web3-decoder.jar (latest)
الإصدارات الأقدم متوفرة في صفحة Releases.
ثم قم بتحميله في Burp Suite:
- انتقل إلى Extensions → Installed → Add.
- اضبط Extension type على Java واختر الملف الذي حمّلته
web3-decoder.jar.
- انقر Next — ستظهر علامة تبويب
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/:
- Architecture — الطبقات والمكونات ومسارات فك الترميز/الترميز الرئيسية (مع رسوم بيانية).
- Project Structure — تخطيط الدلائل ومسؤوليات كل حزمة على حدة.
- Tech Stack — التبعيات والبناء/التغليف وبيئة التشغيل ووضع CLI.
- Features — كتالوج كامل للقدرات مع مؤشرات على التنفيذ.
مفاتيح API لمستكشفي الكتل
معظم مستكشفي الكتل المدعومين، مثل etherscan.io، يتطلبون مفتاح API للسماح بأكثر من طلب واحد كل 5 ثوانٍ.
تتيح لك الواجهة الجديدة إدارة الشبكات ومستكشفي الكتل ومفاتيح API
إضافة ABI لعقد يدويًا
يقوم الامتداد بتخزين ABIs التي تم تنزيلها من مستكشفي الكتل مثل etherscan مؤقتًا. يمكنك أيضًا إضافتها مباشرة من علامة تبويب Web3، إما بالحصول عليها تلقائيًا من مستكشف الكتل، أو بإضافتها يدويًا.
الميزات المنفَّذة
- تكامل مع Burp
- علامة تبويب
Web3 Request في المحرر لطلبات JSON-RPC (مخفية عند حركة المرور التي لا تحتوي على eth_call / eth_sendRawTransaction).
- علامة تبويب
Web3 Response في المحرر لاستجابات JSON-RPC المقابلة.
- علامة تبويب
Web3 مخصصة في الحزمة مع أدوات الشبكة/ABI/calldata.
- صفوف سجل الوكيل (Proxy) مُعلَّمة بتوقيع الدالة المُفكَّك في ملاحظاتها (يتم فك الترميز خارج الخيط، وتُحفظ على صف السجل المباشر).
- تجربة محرر فك الترميز
- توفّر علامتا تبويب المحرر عرضًا هيكليًا شجريًا افتراضيًا، مع عرض JSON على بُعد نقرة واحدة — ويبقى JSON هو المصدر المرجعي الأساسي لإعادة الترميز.
- يحتفظ عرض JSON بتمييز الأكواد على المستويين الصياغي والدلالي، وأرقام الأسطر، ومطابقة الأقواس، والتحقق المباشر من الصحة، وشريط البحث.
- فك ترميز طلبات JSON-RPC
- يفكك calldata الخاصة بـ
eth_call إلى function + وسائط args مُنمّطة.
- يدعم حمولات JSON-RPC الفردية والدفعية (batch).
- بالنسبة للحمولات الدفعية، يتم الإبلاغ عن كل عنصر بحالته (
decoded أو skipped أو error) مع السبب عند التخطي/الفشل.
- فك ترميز استجابات JSON-RPC
- يفكك
result لطلبات eth_call التي تم فك ترميزها سابقًا.
- يدعم الاستجابات الفردية والدفعية، مع مطابقة العناصر عبر معرّف
id الخاص بـ JSON-RPC (أو بالرجوع إلى الفهرس كبديل).
- إعادة الترميز وسير عمل التحرير
- يمكنك تعديل الوسائط المُفككة في محرر الطلبات وإعادة كتابتها إلى calldata مُرمَّزة.
- تستطيع أداة calldata المستقلة فك الترميز وإعادة الترميز خارج سجل الطلبات.
- حل ABI والتخزين المؤقت
- أولوية البحث عن ABI: ABI المخزّن مؤقتًا، ثم المدمج (builtin)، ثم مستكشف الكتل (المتوافق مع Etherscan)، ثم المجموعة المكتشفة سلبيًا، ثم 4byte.
- يتم تخزين ABIs التي تم تنزيلها مؤقتًا تلقائيًا لعمليات فك الترميز المستقبلية.
- يتم تتبّع مصدر ABI (
cache أو builtin أو etherscan أو detected أو 4byte) في المخرجات المُفككة.
- الاكتشاف السلبي لـ ABI (جديد)
- يقوم فحص
PassiveScanCheck من Burp بفحص أجسام استجابات HTTP (عادةً حزم JS المصغّرة لواجهات dApp الأمامية) بحثًا عن ABIs الخاصة بـ Solidity، ويخزّن كل ما يجده في مجموعة على نطاق المشروع مفهرسة بمنتقي الدالة.
- يتعامل مع كل من JSON الصارم وصيغة JS-object-literal الموجودة في الحزم المصغّرة، بما في ذلك الاختصارات المنطقية
!0/!1 التي يصدرها Terser/esbuild/Svelte.
- عندما تفشل سلسلة المصادر الحالية (cache، ثم builtin، ثم etherscan)، يرجع المفكك إلى المجموعة المكتشفة قبل الانتقال إلى 4byte. يتم وسم المخرجات المُفككة بـ
decodeSource: "detected".
- يعمل حتى عندما يتعذر تحديد
eth_chainId: المجموعة المكتشفة و4byte غير مرتبطتين بشبكة معينة، لذا يحاول المفكك استخدامهما بدلاً من الرفض المباشر.
- كل ABI جديد يُنشئ إشعارًا معلوماتيًا في Burp ("تم اكتشاف ABI لعقد Solidity") مع قائمة الأساليب الكاملة — كل دالة/حدث/خطأ مع توقيعه الأساسي ومنتقي الـ 4 بايت — وعنوان URL الذي عُثر فيه على الـ ABI.
- فك الترميز الاحتياطي عبر 4byte
- إذا فشل البحث عن ABI، يتم إجراء بحث عن منتقي الدالة في
api.4byte.sourcify.dev.
- يتم توليد تعريفات ABI اصطناعية من التواقيع المرشحة واستخدامها في مسارات فك الترميز/إعادة الترميز.
- فك ترميز مدرك للبروكسي
- يكتشف عقود التنفيذ (implementation) لأنماط البروكسي المفوض (delegate proxy) ويفكك الترميز باستخدام ABI الخاص بعقد التنفيذ.
- كاشفات البروكسي المنفَّذة: خانة التخزين
ERC1967 وخانة التخزين القديمة ZeppelinOS/OpenZeppelin.
- فك ترميز تكراري لـ Multicall
- يفكك الاستدعاءات المتداخلة للأنواع الشائعة من Multicall:
aggregate وtryAggregate وaggregate3 وaggregate3Value وblockAndAggregate وtryBlockAndAggregate.
- يفكك الاستدعاءات المتداخلة بشكل تكراري مع تحديد أقصى عمق وحالة لكل عقدة.
- واجهة إدارة الشبكات والمستكشفين
- إضافة/تعديل/إزالة تعريفات الشبكات (معرّف الشبكة، الاسم، المستكشف).
- إدارة مفاتيح API للمستكشف لكل شبكة على حدة.
- دعم مفتاح API مشترك لعائلة Etherscan مع إمكانية التجاوز على مستوى كل شبكة.
- تحميل الشبكات الافتراضية من
chains.json وحفظ التخصيصات في تفضيلات Burp.
- يشمل ترحيل معرّفات الشبكات القديمة إلى بدائلها الحديثة (للتكوينات المحفوظة).
- واجهة إدارة ABIs المخزنة مؤقتًا
- إضافة ABI مخزّن يدويًا (لصق JSON) أو جلبه من المستكشف المُعدّ.
- إزالة إدخالات ABI المخزنة مؤقتًا.
- فتح ABIs المخزنة مؤقتًا في المحرر، والتحقق من صحة JSON، وحفظ التحديثات.
- واجهة تصفح ABIs المكتشفة (جديدة)
- لوحة جانبية أسفل علامة تبويب
Web3 تعرض كل ABI راكمه الماسح السلبي.
- يعرض كل صف بصمة قصيرة وعدد الدوال وعنوان URL الذي شوهد فيه الـ ABI لأول مرة.
- انقر على صف لعرض JSON الخاص بالـ ABI للقراءة فقط في محرر ABI؛ وأزل الإدخالات غير المرغوب فيها من المجموعة.
- لوحة فك ترميز / إعادة ترميز Calldata
- فك ترميز calldata باستخدام معرّف الشبكة + سياق عنوان العقد.
- دعم اختياري لعنوان URL لـ RPC لفك الترميز المدرك للبروكسي في الأداة المستقلة.
- تعرض تفاصيل فك ترميز multicall المتداخل عند الاقتضاء.
- فك ترميز استدعاءات JSON-RPC الخاصة بـ
eth_sendRawTransaction (ودوالها الداخلية)
الشبكات المدعومة حتى الآن