
يحزم تجميعات C# أو ملفات PE أو الشيفرة البرمجية (shellcode) في ملفات Nim ثنائية مشفّرة مع ميزات مراوغة متقدمة تشمل تجاوز AMSI/ETW وكشف بيئات الاختبار (sandbox) وتقنيات حقن متعددة لعمليات الفريق الأحمر.
تم نشر هذه الأداة علنًا بعد محاضرة في x33fcon. لقد كانت مشروع البرمجة الرئيسي الخاص بي من 2021 إلى 2024، وتُعتبر الآن متقادمة ولم تعد تُصان. لا تتوقع إصلاحات للأخطاء أو تحديثات للميزات هنا من جهتي. بدلاً من ذلك، تتم الآن صيانة RustPack كنسخة تجارية ومقيدة للفرق الحمراء ومختبري الاختراق المعتمدين، وهي أكثر ثراءً بالميزات ولكنها أيضًا أكثر أمانًا من حيث الأمن التشغيلي (OPSec).
يمكن استخدام أداة التعبئة هذه لتغليف أي C# Assembly أو ملف PE أو Shellcode في ثنائي Nim. ستعمل على تشفير الحمولة المستهدفة، وبناء كود مصدر Nim المطابق وفقًا للوسائط المحددة، ثم تترجمه إلى ثنائي Nim.
فيديو - إذا كنت تفضل ذلك - يمكنك العثور عليه هنا: https://youtu.be/0PwIn3Nxmgo
يجب تثبيت Git لكي يعمل Nim/Nimble بشكل صحيح.
تم الاختبار مع Nim 2.2.10 وحزمة MinGW-w64 GCC 11.1.0 المرتبطة من صفحة تنزيل Nim لنظام Windows. إصدارات Nim الأحدث تعتمد افتراضيًا على قاعدة صورة PE عالية في Windows، مما يكسر روابط -static مع رسالة relocation truncated to fit: R_X86_64_32S against .bss؛ الأداة الآن تفرض -Wl,--image-base=0x10000 للحفاظ على عمل البناء الثابت، لذا أي بناء MinGW-w64 11.x يجب أن يكون سليمًا. فقط x64 مدعوم هنا — x86/--x86/--wow64 لا تتم صيانته.
nim-2.2.10_x64.zipmingw64.7z (مرتبط من صفحة تثبيت Nim لنظام Windows)Expand-Archive — فهي تُسقط lib\system.nim بصمت بسبب تعارض حالة الأحرف مع مجلد lib\system\). يحتوي ملف Nim المضغوط على bin\7zG.exe والذي يمكنك استخدامه لفك ضغط MinGW.<nim>\bin و <mingw64>\bin إلى %PATH% لديك. سجّل الخروج/الدخول (أو أعد تشغيل الطرفية) لكي يسري التغيير.
الإصدارات المعروفة بأنها تعمل (اعتبارًا من Nim 2.2.10): nimcrypto 0.6.0, docopt 0.7.1, ptr_math 0.3.0, winim 3.9.4, nim-strenc (HEAD — لا يحتوي المستودع على إصدارات موسومة).
إذا كنت تريد استخدام أداة إخفاء LLVM على ويندوز، استخدم نسخة denim المعدّلة المدمجة من denim. ثبّتها عبر denim\denim.exe setup.
على سبيل المثال على Kali / Debian. كانت أداة التغليف تتطلب تاريخياً nim 1.6.8 + mingw-64 8.0.0-1؛ مع تضمين حل بديل للربط الثابت --image-base=0x10000 الآن، يجب أن تعمل سلاسل الأدوات الأحدث أيضاً. إصدار ويندوز هو ما يتم اختباره بنشاط — لينكس بأفضل جهد ممكن.```bash
apt-get install nim mingw-w64
nimble install [email protected] docopt ptr_math winim https://github.com/S3cur3Th1sSh1t/nim-strenc/
إذا فشل تجميع `--hellsgate` على إصدار أحدث من mingw-w64، فقم بالتراجع إلى `mingw-64=8.0.0-1`.
قم بتثبيت donut عبر `pip3 install donut-shellcode`. لا يمكن استخدام `denim` من Unix لذا فإن التعتيم عبر LLVM غير ممكن هنا. وكذلك الحال بالنسبة لـ Callobfuscator.
قم بتجميع الحزمة عبر `nim c -d:noRES NimSyscallLoader.nim`. جاهز للانطلاق. إذا لم تستخدم `-d:noRES` فقد تحصل على الخطأ التالي:```
/username/.nimble/pkgs/winim-3.7.1/winim/lib/winim64.res:(.rsrc+0x48): dangerous relocation: collect2: fatal error: ld terminated with signal 11 [Speicherzugriffsfehler]
compilation terminated.
يجب بناؤه مرة واحدة فقط (يستغرق بعض الوقت في المرة الأولى، بينما سيتم تخزين عمليات البناء اللاحقة في الذاكرة المؤقتة).
sudo docker build . -t nimsyscallloader
ثم شغّل أداة التغليف (packer) باستخدام:
sudo docker run -v $(pwd):/shared nimsyscallloader <ARGUMENTS> --output=/shared/packed.exe
حيث $(pwd) هو الدليل على النظام المضيف المشترك مع الحاوية، أي الدليل الذي يجب أن تكون فيه الملفات المراد تشفيرها وحيث سيتم حفظ المخرجات.
إذا كنت تريد الاستفادة من شهادات توقيع الكود (Code Signing) عبر LimeLighter، فستحتاج أيضاً إلى تثبيت العناصر التالية وإضافتها إلى %PATH%: openssl - (لنظام Windows) على سبيل المثال من هنا osslsigncode - على سبيل المثال من هنا
لن أقدم دعماً للمشكلات المتعلقة بأدوات الطرف الثالث المستخدمة هنا. لذا يرجى فتح مشكلة (issue) في المستودعات المقابلة إذا كنت تواجه مشكلات معها. أدوات الطرف الثالث المستخدمة:
يمكنك إما استخدام ملفاتي الثنائية المجمّعة مسبقاً أو بالطبع تجميعها بنفسك من الروابط أعلاه.
يمكن العثور على فيديو - إذا كنت تفضل ذلك - هنا: https://youtu.be/UHaIgdzqHDA
كما أضفت فيديوهات قصيرة لبعض الميزات حيث تم طلب ذلك:
Caro-Kann:
ميزة ThreadlessInject:
ميزة Module Stomping:
ميزة shellcodeURL:
ميزة stegoFile:
ميزة shellcodeFile:
Ruy Lopez للعمليات المحلية
صيغة إخراج Shellcode
ميزة إخراج Assembly
كما صنعت فيديو عاماً يستعرض كيفية تخصيص تقنية ThreadlessInject لعمليات أخرى غير العملية الافتراضية:
https://youtu.be/BYuAUYQcI-E``` NimSyscall_Loader v 2.2
Usage: NimSyscall_Loader [--file=file_to_encrypt --key= --keyfile= --dnsKey --dnsdomain=<sub.example.com> --environmentalKey=<domain,username> --output= --large --metadata --shellcodeFile= --shellcodeURL= --dll --dllexportfunc= --dllhijack --noNimMain --clone= --dllProxy --cpl --xll --service --arguments=<Hardcoded_Arguments> --csharp --noAMSI --noETW --noOneShot --PatchAMSI --PatchETW --AMSIProviderPatch --AMSINtCreateSectionHook --sleep=<10> --sleep-in-between=<10> --shellcode --RWX --CallbackExecute --localCreateThread --QueueApc --noWait --COMVARETW --remoteinject --customprocess= --blockDLLs --spoofArgs= --parentProcess= --remoteprocess= --remotepatchAMSI --remotepatchETW --mapSection --unhook=<dllname1,dllname2> --reflective --obfuscate --macPayload --hide --APIhide --noArgs --peinject --peload --hellsgate --syswhispers --jump --sgn --replace --self-delete --sandbox=<check1,check2> --domain= --pump=<words,size> --obfuscatefunctions --debug --verbose --noDInvoke --x86 --wow64 --llvm --sign --signdomain= --noAntidebug --noDefaultSandBox --noAntiEmulate --sleepycrypt --fluctuate --interactivePS --psout --psobfs --pslyrics --csout --scout --sourceonly --jmpEntry --jmpEntryDLL=<example.dll> --jmpEntryFunc= --dripallocate --dripsleep= --stegofile= --ruy-lopez --threadless --threadlessDll=<dllname.dll> --threadlessFunc= --poolparty= --Caro-Kann --Caro-Kann-Thread --stomb --stombDll=<dllname.dll> --stombFunc= --stombFunc2= --restore] NimSyscall_Loader (-h | --help) NimSyscall_Loader --version
Options:
[general]