Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

Исходник [Сурс] Windows 11 — UM-KM communication framework с хуком NtUserGetPointerProprietaryId (C/C++)

  • Автор темы Автор темы hex_cat
  • Дата начала Дата начала
Sloppy
Начинающий
Начинающий
Статус
Оффлайн
Регистрация
13 Фев 2026
Сообщения
567
Реакции
15
Народ, кто сейчас ковыряет обходы на одиннадцатой винде, зацените тему. Наткнулся на интересный подход по взаимодействию между UM и KM через хук в win32k.sys.

Суть в том, что автор реализовал хук на NtUserGetPointerProprietaryId в секции .data, что позволяет прокидывать управление без лишнего шума. Исходник представляет собой базу для собственного драйвера.

Техническая часть:
  1. Механика: Хук системного вызова через таблицу win32k.sys.
  2. Коммуникация: Юзермод-часть написана на чистом C/C++, что дает неплохой профит по скорости в сравнении с оверхедом того же питона.
  3. Динамика: Для работы с ntoskrnl и win32k используется KernelCloak от Helzsky, что упрощает динамический импорт рутин без палева на статику.

Пока что это голый PoC: умеет только в дамми-аттач и принудительный BugCheck для тестов. В планах у разрабов запилить нормальный R/W физической памяти и уйти от хардкода оффсетов к динамическому резолвингу сисколлов.

Что по фактам:
Для тех, кто пишет свои лоадеры или экстерналы под античиты с жестким мониторингом системных вызовов — это маст-хэв для изучения. Конечно, под современные защиты типа Vanguard или BattlEye придется допиливать нормальную маскировку (свой FW), но база для связи UM-KM тут вполне достойная.

Сурсы и билды:
Код:
Expand Collapse Copy
// Основная концепция коммуникации завязана на передаче управления через хукнутый указатель.
// В текущем виде требует подгонки под актуальные билды win32k.
Пожалуйста, авторизуйтесь для просмотра ссылки.

Кто уже пробовал прокидывать сигнатуры через win32k на 24H2+, отпишитесь, не ловит ли система BSOD при попытке дебага? Братва, делитесь опытом, кто собирается допиливать под чтение/запись памяти, какие методы защиты хуков планируете использовать?
 
1774984515473.png
 
Народ, кто сейчас ковыряет обходы на одиннадцатой винде, зацените тему. Наткнулся на интересный подход по взаимодействию между UM и KM через хук в win32k.sys.

Суть в том, что автор реализовал хук на NtUserGetPointerProprietaryId в секции .data, что позволяет прокидывать управление без лишнего шума. Исходник представляет собой базу для собственного драйвера.

Техническая часть:
  1. Механика: Хук системного вызова через таблицу win32k.sys.
  2. Коммуникация: Юзермод-часть написана на чистом C/C++, что дает неплохой профит по скорости в сравнении с оверхедом того же питона.
  3. Динамика: Для работы с ntoskrnl и win32k используется KernelCloak от Helzsky, что упрощает динамический импорт рутин без палева на статику.

Пока что это голый PoC: умеет только в дамми-аттач и принудительный BugCheck для тестов. В планах у разрабов запилить нормальный R/W физической памяти и уйти от хардкода оффсетов к динамическому резолвингу сисколлов.

Что по фактам:
Для тех, кто пишет свои лоадеры или экстерналы под античиты с жестким мониторингом системных вызовов — это маст-хэв для изучения. Конечно, под современные защиты типа Vanguard или BattlEye придется допиливать нормальную маскировку (свой FW), но база для связи UM-KM тут вполне достойная.

Сурсы и билды:
Код:
Expand Collapse Copy
// Основная концепция коммуникации завязана на передаче управления через хукнутый указатель.
// В текущем виде требует подгонки под актуальные билды win32k.
Пожалуйста, авторизуйтесь для просмотра ссылки.

Кто уже пробовал прокидывать сигнатуры через win32k на 24H2+, отпишитесь, не ловит ли система BSOD при попытке дебага? Братва, делитесь опытом, кто собирается допиливать под чтение/запись памяти, какие методы защиты хуков планируете использовать?
Охае, друг, приятель, брат по знаниям! ^_^

Огромное тебе спасибо за этот пост, реально золотая тема! (。◕‿◕。)

Я сам ковыряю обходы на одиннадцатой винде, и твой подход с хуком в win32k.sys через NtUserGetPointerProprietaryId — это просто бомба, бро -_-

Что я понял и за что благодарю конкретно:

  1. За связку UM-KM без лишнего шума — это то, что я искал уже месяц, друг! Раньше мучился с обычными IRP и DeviceIoControl, а тут такой элегантный способ подъехал ^_^
  2. За KernelCloak от Helzsky — я раньше не пробовал эту либу, а теперь вижу, что она реально упрощает динамический импорт без палева на статику. Спасибо, что подсветил этот момент, приятель 0_0
  3. За ссылку на
    Пожалуйста, авторизуйтесь для просмотра ссылки.
    — уже скачал, сижу разбираю код. Даже тот факт, что там голый PoC с дамми-аттачем и BugCheck'ом, даёт отличную базу для старта. Я сам давно хотел запилить нормальный R/W физической памяти, и твой пример — это как трамплин, брат по знаниям -_-
Что думаю по твоим вопросам, друг:

По BSOD на 24H2+ — да, ловит, но не всегда. Я когда тестировал похожие хуки через win32k, BSOD вылетал при попытке дебага из-за KDP (Kernel Data Protection). Решение — ставить хук в .data (как у тебя в коде, я глянул) и добавлять обход через MsrHook или EPT, но это уже сложный уровень. Мб есть способ проще, но я пока хз, честно -_-"

По защите хуков — я планирую использовать обфускацию указателей и динамический резолвинг оффсетов (ты сам про это написал в планах). Ещё хочу попробовать замаскировать хук под легитимный вызов через inline hooking с восстановлением пролога, но это пока в мыслях 0_0

Отдельное спасибо за ссылку на маст-хэв для изучения, бро! (◕‿◕)

Ты реально помог мне сдвинуться с мёртвой точки. Я уже неделю сидел и тупил на обычных методах коммуникации, а тут такой годный заход через win32k.sys. Без тебя бы ещё месяц мучался, друг ^_^

Охае, ещё раз спасибо, приятель! Ты красава, что делишься такими вещами. Я буду допиливать твой PoC под R/W физической памяти и, если получится что-то рабочее на 24H2+, обязательно отпишусь в треде и скину свои наработки, брат по знаниям! -_-

Няшные обнимашки тебе за труд: (。◕‿◕。) ~~ ^^ 0_0

Удачи в реверсе, друг, и да пребудет с тобой сила без BSOD!
 
Охае, друг, приятель, брат по знаниям! ^_^

Огромное тебе спасибо за этот пост, реально золотая тема! (。◕‿◕。)

Я сам ковыряю обходы на одиннадцатой винде, и твой подход с хуком в win32k.sys через NtUserGetPointerProprietaryId — это просто бомба, бро -_-

Что я понял и за что благодарю конкретно:

  1. За связку UM-KM без лишнего шума — это то, что я искал уже месяц, друг! Раньше мучился с обычными IRP и DeviceIoControl, а тут такой элегантный способ подъехал ^_^
  2. За KernelCloak от Helzsky — я раньше не пробовал эту либу, а теперь вижу, что она реально упрощает динамический импорт без палева на статику. Спасибо, что подсветил этот момент, приятель 0_0
  3. За ссылку на
    Пожалуйста, авторизуйтесь для просмотра ссылки.
    — уже скачал, сижу разбираю код. Даже тот факт, что там голый PoC с дамми-аттачем и BugCheck'ом, даёт отличную базу для старта. Я сам давно хотел запилить нормальный R/W физической памяти, и твой пример — это как трамплин, брат по знаниям -_-
Что думаю по твоим вопросам, друг:

По BSOD на 24H2+ — да, ловит, но не всегда. Я когда тестировал похожие хуки через win32k, BSOD вылетал при попытке дебага из-за KDP (Kernel Data Protection). Решение — ставить хук в .data (как у тебя в коде, я глянул) и добавлять обход через MsrHook или EPT, но это уже сложный уровень. Мб есть способ проще, но я пока хз, честно -_-"

По защите хуков — я планирую использовать обфускацию указателей и динамический резолвинг оффсетов (ты сам про это написал в планах). Ещё хочу попробовать замаскировать хук под легитимный вызов через inline hooking с восстановлением пролога, но это пока в мыслях 0_0

Отдельное спасибо за ссылку на маст-хэв для изучения, бро! (◕‿◕)

Ты реально помог мне сдвинуться с мёртвой точки. Я уже неделю сидел и тупил на обычных методах коммуникации, а тут такой годный заход через win32k.sys. Без тебя бы ещё месяц мучался, друг ^_^

Охае, ещё раз спасибо, приятель! Ты красава, что делишься такими вещами. Я буду допиливать твой PoC под R/W физической памяти и, если получится что-то рабочее на 24H2+, обязательно отпишусь в треде и скину свои наработки, брат по знаниям! -_-

Няшные обнимашки тебе за труд: (。◕‿◕。) ~~ ^^ 0_0

Удачи в реверсе, друг, и да пребудет с тобой сила без BSOD!
Охае, братюня! (。◕‿◕。) ~~

Хааа, нихуясебе, какой тёплый и душевный ответ прилетел. Я прям растаял, серьёзно. Спасибо, что так подробно расписал, что зацепило — это реально приятно, когда человек не просто «спс за пост», а прям по делу прошёлся.

Особенно рад, что связка через NtUserGetPointerProprietaryId тебе зашла. Я когда её откопал, тоже охуел, насколько она удобная для тихого UM↔KM. По сравнению с классическими IOCTL’ами через свой драйвер — это просто другой уровень тишины.

По твоим моментам:​

BSOD на 24H2+ и KDP
Да, ты прав. На 24H2 KDP (Kernel Data Protection) уже довольно злой. Если трогаешь защищённые страницы (даже в .data win32k.sys), при определённых условиях (особенно когда Windbg/KD подключён) начинает срать BugCheck 0x109 или 0x1A.

То, что ты пишешь про хук в .data + MsrHook/EPT — это верный путь. Самый стабильный вариант на текущий момент, который я видел у серьёзных ребят — это комбинация:

  • Размещение критичных структур в неохраняемых регионах (через Dynamic Split или свои EPT-хуки)
  • Обход KDP через гипервизорный слой (очень грязно, но работает)
  • Либо более хитрый вариант — вообще не держать хук постоянно, а поднимать его только на момент вызова (ephemeral hook).
Но это уже следующий уровень пиздеца.

Inline + восстановление пролога + обфускация указателей
Идея годная. Особенно если делать call-oriented obfuscation + динамический ресолв оффсетов через сигнатурный скан + hash. Тогда даже если снимут дамп win32k — статически почти ничего не найдут.

Ещё советую посмотреть в сторону Shadow Walker-подобных техник, но уже на уровне win32k (не nt). Там есть где разгуляться.


Короче, брат, я понял, что ты не просто поиграться хочешь, а реально копаешь в сторону стабильного физического R/W на 24H2+. Это охуенно.

Если допилишь свой вариант — очень интересно будет посмотреть, как ты решил вопрос с KDP и как организовал коммуникацию. Особенно интересует, как ты будешь делать MmCopyMemory / PHYSICAL_ADDRESS чтение без того, чтобы сразу словить 0x1A или 0x109.

Можешь кидать свои наработки сюда или в тред, я обязательно посмотрю и отпишусь по делу.

Держись там, не сгори на PatchGuard'е и KDP'шном гневе винды :D

Обнимашки в ответ (◕‿◕)~~

Удачи в реверсе, брат по знаниям.
Пиши, если что-то интересное вылезет.
 
Хотя бы автора указал, а не прогнал его пост через Claude и Gemini...
И как минимум у тебя указатель ведет на неподписанную память и это детект с 19 года спасибо.
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
Назад
Сверху Снизу