
أداة تفريغ VMP ديناميكية ومصلح الواردات، مدعومة بواسطة VTIL.

أداة تفريغ ديناميكية لـ VMP وإصلاح الواردات، مدعومة بـ VTIL. تعمل مع VMProtect 3.X x64.

VMPDump.exe <Target PID> "<Target Module>" [-ep=<Entry Point RVA>] [-disable-reloc]
الوسائط:
<Target PID>: معرف العملية المستهدفة، بصيغة عشرية أو ست عشرية.<Target Module>: اسم الوحدة التي يجب تفريغها وإصلاحها. يمكن أن يكون سلسلة فارغة ("") إذا كانت وحدة صورة العملية هي المطلوبة.[-ep=<Entry Point RVA>]: قيمة RVA لنقطة الدخول اختيارية، بصيغة ست عشرية. يقوم VMPDump ببساطة بالكتابة فوق نقطة الدخول في الرأس الاختياري بهذه القيمة.[-disable-reloc]: إعداد اختياري لتوجيه VMPDump لوضع علامة على أن التجميعات النسبية (relocs) قد تمت إزالتها في الصورة الناتجة، مما يجبر الصورة على التحميل عند ImageBase الذي تم تفريغه. هذا مفيد إذا كانت التفريغات القابلة للتشغيل مطلوبة.يجب أن يكتمل تهيئة VMProtect وفك التعبئة في العملية المستهدفة قبل تشغيل VMPDump. هذا يعني أنها يجب أن تكون عند أو بعد OEP (نقطة الدخول الأصلية).
ستظهر الصورة المفروغة والمصلحة في دليل وحدة صورة العملية، تحت الاسم <Target Module Name>.VMPDump.<Target Module Extension>.
يقوم VMProtect بحقن كعوب (stubs) لكل استدعاء import أو قفزة (jmp). تحل هذه الكعوب محل المقطع المشوش (obfuscated thunk) في قسم .vmpX، وتضيف ثابتًا ثابتًا لإزالة التشويش عنه. يتم توجيه الاستدعاءات أو القفزات نفسها بعد ذلك باستخدام تعليمة ret.
يفحص VMPDump جميع الأقسام القابلة للتنفيذ بحثًا عن هذه الكعوب، ويرفعها إلى VTIL باستخدام رافع VTIL x64. ثم يتم إجراء تحليل على هذه الكعوب لتحديد نوع الاستدعاء الذي يجب استبداله وما البايتات التي يجب الكتابة فوقها.
بمجرد استرداد جميع الاستدعاءات، يقوم VMPDump بإنشاء جدول import جديد وإلحاق توابع (thunks) بـ IAT الحالي. يتم استبدال الاستدعاءات إلى كعوب import الخاصة بـ VMP باستدعاءات مباشرة إلى هذه التوابع.
لاحظ أنه في الإجراءات المُطفَّرة، هناك حالات لا توجد فيها بايتات كافية لاستبدال استدعاء كعب import الخاص بـ VMP باستدعاء تابع مباشر، لأن الأخير أكبر بمقدار 1 بايت. في هذه الحالات، يتم توسيع القسم وحقن كعب يقفز إلى تابع import. ثم يتم استبدال استدعاء كعب import الخاص بـ VMP باستدعاء أو قفزة نسبية بطول 5 بايتات إلى ذلك الكعب المحقون.
mkdir build && cd build
cmake -G "Visual Studio 16 2019" ..
cmake --build . --config Release
البناء في VS بسيط مثل استبدال أدلة التضمين/المكتبة بـ VTIL-NativeLifers/VTIL-Core/Keystone/Capstone في ملف vcxproj.
يتطلب المشروع C++20.
نظرًا لحقيقة فحص أقسام الكود خطيًا، خاصة في الكود المُطفَّر بشدة والمُبهم، يمكن تخطي بعض استدعاءات كعوب import وبالتالي عدم حلها. ومع ذلك، يتضمن VMPDump حلولاً بديلة لغالبية حالات التطفر غير المتناسقة في VMProtect، لذا يجب أن ينتج نتائج مقبولة حتى في الكود المُطفَّر بشدة.
إذا واجهت هذه المشكلة، فيرجى إنشاء issue مع المعلومات ذات الصلة وسأنظر إليها.
مرخص بموجب رخصة GPL-3.0. لا يتم تقديم أي ضمان من أي نوع.