
منصة زرع وC2 مدعومة باستدعاءات النظام عبر الأنظمة — استدعاءات نظام مباشرة (Win)، استدعاءات نظام خام (Linux)، قنوات HTTPS/DNS/ICMP. بدون طبقة winapi.
English | 简体中文 | 조선어 | Русский
لا WinAPI إطلاقًا. كل بدائية NT تُحلّ في وقت التشغيل من ntdll في الذاكرة —
تعليمات SYSCALL تُصدر مباشرة عبر stubs بلغة تجميع Plan9، بلا جدول استيراد،
وبلا لمس أي hooks في وضع المستخدم على ntdll. C2 عبر HTTPS / DNS / ICMP، وتشفير AES-256-GCM لكل
رسالة. أصلي على Windows. يُبنى على Linux. يُبنى على macOS.
هذه ليست مكتبة غلاف لاستدعاءات النظام. إنها إطار عمل implant كامل حيث
كل عملية — من حقن الشيفرة إلى قراءة الملفات إلى الاستمرارية في
الريجستري — تمر عبر استدعاءات Nt* الخام التي تُحلّ عند الإقلاع من جدول
تصدير ntdll الحالي. لا توجد أي استدعاءات WinAPI في الملف التنفيذي. لا شيء يمكن
لـ EDR أن يضعه كـ hook في وضع المستخدم.
B8 xx xx 00 00 0F 05 (مباشر) أو
4C 8B D1 B8 xx xx 00 00 0F 05 (Hells Gate). كل اسم دالة يُجزّأ
في وقت الترجمة — لا سلاسل نصية صريحة في الملف التنفيذي.asm_amd64.s) يحمّل SSN في EAX،
ويضبط 7 وسائط يدويًا، وينفّذ SYSCALL. العودة عبر RAX/RDX.0F 05 C3 (syscall;ret) داخل
ntdll، ويستدعي عبره. يقع فخ المعالج داخل ntdll — مكدس الاستدعاء
يُظهر إطارات ntdll، لا إطارات الـ implant. لا ينجو أي hook في وضع المستخدم..text كـ RWX، وينسخ البايتات الأصلية من ntdll
المعيّن من القرص، ويستعيد الحماية، ويُفرّغ icache، ويُبطل ذاكرة SSN المؤقتة.
كل hook في وضع المستخدم وضعه أي EDR يزول.يدوّر الوكيل بين تقنيات الحقن تلقائيًا. كل استدعاء يستخدم طريقة مختلفة — لا يبدو أي حقنين متطابقين في التحليل الجنائي.
| الطريقة | كيف تعمل | لماذا هي خفية |
|---|---|---|
| تعيين القسم | NtCreateSection → NtMapViewOfSection (عن بُعد) → NtCreateThreadEx | لا تخصيص RWX في VAD. القسم مدعوم بملف. ترى ماسحات الذاكرة PAGE_EXECUTE_READ، لا PAGE_EXECUTE_READWRITE. |
| تفريغ العملية | NtCreateUserProcess (معلّقة) → NtSuspendProcess → تصفير قاعدة الصورة → تخصيص + كتابة shellcode → NtSetContextThread (RIP = shellcode) → NtResumeProcess | تظهر العملية كـ svchost.exe شرعي في taskmgr. تختلف محتويات الذاكرة فقط. |
| صف APC | تعداد الخيوط عبر NtQuerySystemInformation → NtOpenThread → NtQueueApcThread | لا يُنشأ خيط جديد. لا TEB جديد. لا تخصيص مكدس جديد. يُطلق عندما يدخل الخيط في انتظار قابل للتنبيه. |
| دوس الوحدات | تخصيص في الهدف → كتابة رأس PE أدنى + shellcode → NtCreateThreadEx عند نقطة الدخول | تُظهر قائمة الوحدات اسم DLL معقولًا. رأس PE صالح بما يكفي لخداع تعداد الوحدات. |
يشغّل كل الفحوصات، ويعيد تقرير تهديد مُقيّمًا. تدمير ذاتي عند الحالة الحرجة.
| الفحص | الطريقة |
|---|---|
| كشف الآلة الافتراضية | مسح توقيع الهايبرفايزر عبر CPUID leaf 0x40000000 (VMware، VirtualBox، Hyper-V، KVM، Xen، QEMU، Parallels) + احتياطي عبر leaf 0x40000001 |
| كشف بيئة الاختبار المعزولة | عدد وحدات المعالجة المركزية، آثار السجل (VMware Tools، VBox Guest Additions، خدمات VMware/VBox)، مسح عمليات بيئة الاختبار المعزولة (أكثر من 30 اسمًا معروفًا: wireshark، procmon، x64dbg، ida، إلخ) |
| كشف المنقّح | PEB.BeingDebugged، PEB.NtGlobalFlag، أعلام تصحيح الكومة، ProcessDebugPort، ProcessDebugObjectHandle، ProcessDebugFlags، نقاط التوقف العتادية DR0-7، فحص التوقيت أحادي الخطوة |
| شذوذ التوقيت | قائم على RDTSC: 50 عينة من زمن استجابة NtQuerySystemInformation، المتوسط/الانحراف المعياري، يُرفع العلم إذا تجاوز أكثر من 10% من العينات تباين 3σ. يلتقط الحمل الزائد لأدوات الفحص. |
| تهرّب PEB | يُرقّع أعلام BeingDebugged، NtGlobalFlag، ProcessHeap، DebugPort، ThreadHideFromDebugger — كلها عبر قراءات مقطع GS + NtWriteVirtualMemory. دون أي استدعاءات API. |
كلها عبر استدعاءات نظام Nt*، دون WinAPI.
EnablePrivilege(index) — تعيين أي امتياز عبر LUIDEnableAllTokenPrivileges() — 20 امتيازًا دفعة واحدة (Debug، Impersonate، TCB، Backup، Restore، إلخ)GetProcessTokenIntegrityLevel() — استعلام مستوى السلامة الإلزاميStealProcessToken(pid) — فتح + استنساخ رمز مميز لعملية أخرىImpersonateThread() / RevertToSelf()EnumVirtualMemory() — التنقل عبر جميع المناطق الافتراضية عبر NtQueryVirtualMemoryFindWritableExecRegions() — إيجاد مناطق PAGE_EXECUTE_READWRITE الملتزمةHideRegion() — تعيين PAGE_NOACCESS لإخفاء الذاكرة عن أدوات الفحصUnhideRegion() — استعادة الحماية الأصليةNtCreateFile → NtReadFile / NtWriteFile → NtClose. صفر استدعاءات لـ CreateFileA،
ReadFile، WriteFile، أو DeleteFileW. ReadFileContents()،
WriteFileContents()، DeleteFileNt()، FileExists().
NtCreateKey → NtSetValueKey. AddRunKeyPersistence()، RemoveRunKeyPersistence().
دون RegCreateKeyEx، RegSetValueEx، أو أي استدعاءات Advapi32.
EnumerateSystemHandles() — جميع المقابض المفتوحة في النظام عبر
NtQuerySystemInformation(SystemHandleInformation)FindEDRHandles() — يطابق معرّفات العمليات المالكة مع أكثر من 30 اسمًا معروفًا
لعمليات EDR (MsSense، CrowdStrike، Sentinel، Cylance، Carbon Black، إلخ)CloseEDRHandles() — يُغلق مقابض المراقبة التي وضعتها EDR في
عمليتكIsProcessMonitored() — فحص منطقي: هل نحن تحت المراقبة؟NtFreeVirtualMemory.PatchAMSI() — AmsiScanBuffer → MOV EAX, 0; RETPatchETW() — EtwEventWrite → RETPatchNtTraceEvent() — NtTraceEvent → RETPatchDbgUiRemoteBreakin() — اقتحام الخيط → RETPatchInstrumentationCallbacks() — ThreadHideFromDebugger| القناة | صيغة النقل | المتطلبات المسبقة |
|---|---|---|
| HTTPS | POST ثنائي، تأطير مخصص، UA/مسار عشوائي | شهادة TLS |
| DNS | نطاق فرعي <idx>-<total>-<base32>، استجابة TXT | تحليل DNS |
| ICMPv4 | الحمولة في معرّف+تسلسل طلب/رد echo | مقبس خام (root/Admin) |
جميع القنوات تُنفّذ واجهة Channel. إضافة NTP أو DoH أو TURN
تعني تنفيذ الواجهة — دون أي تغييرات في الوكيل.
AES-256-GCM بتشفير AEAD لكل رسالة. nonce فريد من 12 بايت لكل رسالة. حلقة مفاتيح لكل زرعة (implant). اشتقاق المفتاح القائم على عبارة المرور متاح. 3 اختبارات، جميعها ناجحة.