diswasm - مفكك شيفرة وأداة هندسة عكسية WebAssembly
diswasm هي أداة مفكك شيفرة وهندسة عكسية مفتوحة المصدر لـ WebAssembly (.wasm). بينما يتم شحن منطق التطبيق بشكل متزايد باعتباره wasm — في المتصفحات وعند الحافة والمكونات الإضافية وحتى البرامج الضارة — يحتاج المحللون إلى قراءتها. يقوم diswasm بتحليل وحدة wasm وفك تجميع وظائفها واستعادة الهيكل وإنتاج رمز زائف عالي المستوى من بايتكود آلة المكدس، مما يجعل من السهل كثيراً فهمها بدلاً من wasm الخام. يكمل WebAssembly Binary Toolkit (WABT) لسير عمل هندسة عكسية wasm كامل.
التثبيت
| الطريقة | الطريقة |
|---|
| من المصدر | git clone https://github.com/wasmkit/diswasm && cd diswasm |
| بناء | اتبع خطوات البناء في المستودع (لكل لغة) |
| أدوات مرافقة | الاقتران مع WABT (wasm2wat) و wasm-tools |
| التحقق | قم بتشغيل ضد .wasm معروف وفحص الإخراج |
فهم wasm أولاً
| المفهوم | المعنى |
|---|
| الوحدة | وحدة .wasm: الوظائف والذاكرة والجداول والعملات العامة |
| آلة المكدس | يتم تنفيذ wasm على مكدس معاملات (بدون سجلات) |
| WAT | صيغة WebAssembly Text (.wat قابلة للقراءة من قبل الإنسان) |
| الأقسام | النوع والاستيراد والوظيفة والكود والبيانات والتصدير، … |
| الأنواع | i32, i64, f32, f64 (بالإضافة إلى أنواع المراجع) |
سير العمل الأساسي
# 1) فحص الهيكل باستخدام مفكك التجميع من WABT
wasm2wat module.wasm -o module.wat
# 2) فك تجميع إلى رمز زائف باستخدام diswasm
diswasm module.wasm > module.pseudo
# 3) اقرأ الوظائف المستعادة وتدفق التحكم
| الخطوة | الأداة | الإخراج |
|---|
| فك التجميع | wasm2wat (WABT) | .wat نص (مستوى منخفض) |
| فك التجميع | diswasm | رمز زائف (مستوى أعلى) |
| Objdump-style | wasm-objdump (WABT) | الأقسام/العمليات |
ما الذي يستعيده diswasm
| الميزة | المساعدة مع |
|---|
| حدود الوظيفة | حيث تبدأ/تنتهي كل وظيفة |
| تدفق التحكم | block/loop/if المعاد بناؤه كرمز منظم |
| المحليات/المعاملات | متغيرات مكتوبة لكل وظيفة |
| عمليات الذاكرة | التحميل/التخزين ضد الذاكرة الخطية |
| الواردات/الصادرات | وظائف المضيف التي يتم استدعاؤها / الوظائف المعروضة |
قراءة الناتج (الفرز)
| الإشارة | ابحث عن |
|---|
| وظائف المضيف المستوردة | استدعاءات JS/host (env.*) تكشف عن القدرات |
| سطر السلسلة/البيانات | الثوابت المضمنة وعناوين URL والمفاتيح |
| الوظائف المُصدَّرة | نقاط دخول الوحدة |
| نمو الذاكرة / العمليات الكبيرة | فك الضغط أو المخزن المؤقت الكبير |
| الاستدعاءات غير المباشرة | تتابع جدول الوظائف (إخفاء الهوية) |
أدوات wasm المكملة
| الأداة | الدور |
|---|
| diswasm | فك تجميع wasm → رمز زائف |
WABT (wasm2wat, wasm-objdump) | فك التجميع / الفحص |
| wasm-tools | معالجة Rust منخفضة المستوى/التحقق |
Binaryen (wasm-dis) | تحليل/تحسين مستوى المترجم |
| Ghidra + وحدة wasm | بيئة هندسة عكسية كاملة |
سير العمل العام
# تحليل حمولة wasm غير معروفة في المتصفح
wasm2wat suspicious.wasm -o suspicious.wat # الهيكل
diswasm suspicious.wasm > suspicious.c # المنطق القابل للقراءة
grep -iE "fetch|eval|XMLHttp|import" suspicious.wat # القدرات
# مقارنة إصدارين من وحدة wasm
diswasm v1.wasm > v1.pseudo; diswasm v2.wasm > v2.pseudo
diff v1.pseudo v2.pseudo
diswasm مقابل الطرق الأخرى
| الجانب | diswasm | wasm2wat (WABT) | JEB (تجاري) |
|---|
| مستوى الإخراج | رمز زائف | WAT منخفض المستوى | مفكك شيفرة Pseudo-C |
| التكلفة | مجاني/مفتوح المصدر | مجاني/مفتوح المصدر | تجاري |
| الأفضل لـ | فك التجميع السريع والقابل للقراءة | التفكيك الوفي | هندسة عكسية عميقة ومصقولة |
الموارد