تخطَّ إلى المحتوى

diswasm - مفكك شيفرة وأداة هندسة عكسية WebAssembly

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-stylewasm-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 مقابل الطرق الأخرى

الجانبdiswasmwasm2wat (WABT)JEB (تجاري)
مستوى الإخراجرمز زائفWAT منخفض المستوىمفكك شيفرة Pseudo-C
التكلفةمجاني/مفتوح المصدرمجاني/مفتوح المصدرتجاري
الأفضل لـفك التجميع السريع والقابل للقراءةالتفكيك الوفيهندسة عكسية عميقة ومصقولة

الموارد