
أداة مفتوحة المصدر لتغليف وتشفير ملفات PE القابلة للتنفيذ بنظام ويندوز x64. تقوم بضغط وتشفير الملفات التنفيذية باستخدام آلة افتراضية مخصصة ضمن كعب برمجي ذاتي الاستخراج.
TinyLoad هو مشفّر/حزّام PE لملفات x64 التنفيذية، يحزم ملف exe مُدخلًا بطبقات حماية متعددة لمنع هندسته عكسيًا. هو ملف .cpp واحد فقط ولا يعتمد على أي تبعيات خارجية.
يُلحق TinyLoad حمولتك بنسخة من نفسه. عند تشغيل exe المُحزم، يستخرج الحمولة، يفك تشفيرها، وينفذها مباشرة في الذاكرة دون كتابة الأصل على القرص أبدًا. في كل مرة تحزم شيئًا، تتغير أكواد VM العملياتية عشوائيًا وتوضع في 4 جداول فرعية مستقلة المفاتيح، لذا لا يتطابق إصداران.
احصل على ملف ثنائي مُجمّع مسبقًا من الإصدارات أو ابنِه بنفسك.
تحتاج إلى MinGW (g++). فقط شغّل:
g++ -o TinyLoad.exe TinyLoad.cpp -static -O2 -s
أو استخدم build.bat.
TinyLoad.exe --i <input> [--o <output>] [--vm] [--c] [--veh]
تحتاج إلى واحد على الأقل من --vm أو --c أو --veh.
ضغط LZ77 مخصص مع مطابقة سلسلة التجزئة (hash chain) ونافذة منزلقة بحجم 64KB. يعمل الضغط أولاً، ثم يأتي تشفير VM فوقه بحيث تُخفى أيضًا أي أنماط في البيانات المضغوطة.
آلة افتراضية مخصصة بـ 28 كودًا عملياتيًا (opcode) تعمل داخل الـ stub. توضع الأكواد العملياتية عشوائيًا في 4 جداول فرعية، 8 لكل جدول، ويُشفَّر كل جدول فرعي بـ XOR بمفتاح مختلف مشتق من بيانات الحمولة. كسر جدول فرعي واحد يكشف 8 أكواد كحد أقصى من أصل 28. الشيفرة نفسها هي شيفرة تدفق 128 بت تستخدم خلط مفاتيح rotl و rotr وتعمل بالكامل داخل مفسّر VM. الحمولة مشفّرة باستخدام XXTEA.
عند تفعيل --veh، تُعيّن جميع صفحات أقسام PE كـ PAGE_NOACCESS. عندما يحاول البرنامج الوصول إلى صفحة، يطلق استثناءً، فيقوم معالج الاستثناءات المتجه (vectored exception handler) بفك تشفير تلك الصفحة فقط وضبط الحماية الصحيحة. يعمل خيط مراقبة (watchdog) في الخلفية ويعيد تشفير أي صفحة لم تُلمس منذ 200ms. في أي لحظة، معظم برنامجك يبقى مشفّرًا في الذاكرة، لذا تلتقط تفريغات الذاكرة فقط ما تم الوصول إليه مؤخرًا.
يتم تحويل أهم 4 واجهات برمجية (GetModuleHandleA, GetProcAddress, ExitProcess, VirtualAlloc) عبر دوال غلاف (wrapper) داخل الـ stub. بعد تحميل الحمولة، يُصفَّر دليل الاستيراد بالكامل بحيث لا يمكن لتفريغات الذاكرة إعادة بناء جدول الاستيراد.
MIT
| الخيار | الوظيفة |
|---|
--i <file> | ملف exe المُدخل للحزم |
--o <file> | مسار الإخراج (الافتراضي: input_packed.exe) |
--vm | تشفير VM |
--c | ضغط LZ77 |
--veh | فك تشفير خطأ الصفحة عبر VEH |
--noconsole | نظام GUI الفرعي |