Сейчас на форуме: zds (+4 невидимых)

 eXeL@B —› Программирование —› win32k.sys
Посл.ответ Сообщение

Ранг: 51.6 (постоянный), 3thx
Активность: 0.040
Статус: Участник

Создано: 20 декабря 2013 18:15
· Личное сообщение · #1

Как можна, перехватить FindWindow? Как я понял win32k.sys работает в АП процесса(Gui), нужно аттачиться ко всем существующим процессам по очереди и устанавливать перехваты? Ну как-то сложно, или что то не верно? Если я допустим вызываю с ринг3, своего приложения FindWindow, то ядро будет перебирать все процессы и вызывывать FW? Чтото не сходится ( Перебрал литературу Руссиновича и других, статьи, то ничего конкретно не описано. Просвятите плс.




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 20 декабря 2013 18:35
· Личное сообщение · #2

Перехватить так же, как и любую другую нативную функцию. Либо во всех процессах в ринг3, либо в ринг0. Вопрос ни о чём.



Ранг: 51.6 (постоянный), 3thx
Активность: 0.040
Статус: Участник

Создано: 20 декабря 2013 18:43
· Личное сообщение · #3

Тоесть ко всем процессам по очереди аттачиться и перехватывать?



Ранг: 419.0 (мудрец), 647thx
Активность: 0.460.51
Статус: Участник
"Тибериумный реверсинг"

Создано: 20 декабря 2013 18:48
· Личное сообщение · #4

В ring3, в реестре можно ддлку прописать, которая будет автоматически подружатся ко всем процессам. Вообще в инете полным полно инфы о хуке/перехвате апи и тут(ринг3) и там(ринг0)



Ранг: 51.6 (постоянный), 3thx
Активность: 0.040
Статус: Участник

Создано: 20 декабря 2013 18:56
· Личное сообщение · #5

Та проблема с перехватом никаких нету, если только не win32k.
PSDT KeServiceDescriptorTableShadow -> win32k.ServiceTable указывает на массив из ServiceLimit элементов, но каждый элемент имеет адрес который будет валидным если приаттачиться к процессу, ( FindWindow - 0x17A , PostMessage - 0x1DB, 0x - индексы ф-ций в массиве ).
И вопрос чтобы контролировать FindWindow, нужно во всех процессах ставить перехваты?

Code:
  1. typedef struct SystemServiceDescriptorTable
  2. {
  3.          unsigned int  * ServiceTable;
  4.          unsigned int  * CounterTable;
  5.          unsigned int    ServiceLimit;
  6.          unsigned char * ArgumentTable;
  7. } SYSTEM_SERVICE_TABLE ;
  8.  
  9. typedef struct _SERVICE_DESCRIPTOR_TABLE
  10. {
  11.          SYSTEM_SERVICE_TABLE ntoskrnl;
  12.          SYSTEM_SERVICE_TABLE win32k;
  13.          SYSTEM_SERVICE_TABLE t3;
  14.          SYSTEM_SERVICE_TABLE t4;
  15. * PSDT ;





Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 20 декабря 2013 20:52
· Личное сообщение · #6

Да с коих пор в ядре надо тыкать на каждый процесс? В ядре всегда 1 раз хукалось. Хоть бы прогуглил хуки win32k. Или проверил уже.

| Сообщение посчитали полезным: MickeyBlueEyes

Ранг: 51.6 (постоянный), 3thx
Активность: 0.040
Статус: Участник

Создано: 20 декабря 2013 21:09
· Личное сообщение · #7

Да сколько можна гулить ) Да приатачился я к csrss.exe, вроде как норм перехватывает уже всё ) С одним процессором всё ок, если многопроцессорная то бсодит переодически. Просто читать нужно вот одну только литературу, а не лазить по дебрям, сбивают с толку, типо win32k у каждого процесса своя и потом каша целая, и пока росхлебаешь. Сразу бы всё по Руссиновичу делал, было бы всё ок.




Ранг: 72.3 (постоянный), 133thx
Активность: 0.380
Статус: Участник

Создано: 21 декабря 2013 01:26
· Личное сообщение · #8

MickeyBlueEyes

В сайде это всё реализовано(FindWin() тоже). В разных сессиях свой шадов, так что нужно их енумить и аттачиться.

> Да сколько можна гулить ) Да приатачился я к csrss.exe, вроде как норм перехватывает уже всё ) С одним процессором всё ок
> win32k у каждого процесса своя

Та есчо каша. Причём там ваще csrss ?

Дров один у всех процессов сессии.

| Сообщение посчитали полезным: MickeyBlueEyes

Ранг: 51.6 (постоянный), 3thx
Активность: 0.040
Статус: Участник

Создано: 21 декабря 2013 12:31
· Личное сообщение · #9

Dr0p
В сайде это всё реализовано
Сайд?
В разных сессиях свой шадов
В разных пользовательских сессиях, да?



Ранг: 51.6 (постоянный), 3thx
Активность: 0.040
Статус: Участник

Создано: 21 декабря 2013 12:53 · Поправил: MickeyBlueEyes
· Личное сообщение · #10

Dr0p
Причём там ваще csrss ?

Да, не причём как оказалось, можна к любому ГУИ процессу аттачится и так же успешно ставить хуки. ОС мапит каждый раз шедоу таблицу ? Как можна смапить из драйвера, чтобы не аттачится никкому?




Ранг: 72.3 (постоянный), 133thx
Активность: 0.380
Статус: Участник

Создано: 21 декабря 2013 22:28
· Личное сообщение · #11

MickeyBlueEyes

Вы задаёте очень много вопросов, на которые нет смысла отвечать просто потому, что вы не поймёте ответа. Ну а по частям собирать полную картину бессмысленно. Посмотрите исходный код, если не знаете асм.

Ну и повторяюсь - ваша задача уже решена.



Ранг: 51.6 (постоянный), 3thx
Активность: 0.040
Статус: Участник

Создано: 21 декабря 2013 22:41 · Поправил: MickeyBlueEyes
· Личное сообщение · #12

Dr0p
Да наверное действительно много вопросов ) Взял в руки отладчик ядра, попробую собрать всё до кучи. Всё равно спасибо за наводящие мысли.




Ранг: 72.3 (постоянный), 133thx
Активность: 0.380
Статус: Участник

Создано: 22 декабря 2013 06:16 · Поправил: Dr0p
· Личное сообщение · #13

MickeyBlueEyes

Исходный код сайда утёк в паблик. Некоторые замечания.

1. Не используется аттачь к сессиям, так как IDP захват сервисного диспетчера глобальный в системе(ntos).

2. Описание в тектовике частично deprecated, размер структуры фиксирован.

3. Видимо аверы что то детектят из архива, так при загрузке на народ произошёл детект(наверно лк). Это не существенно и этому не уделялось внимание. Всё как обычно - чистка, если есть сигнатуры(вы не малварщики, но всё же замечу что формат - микод).

4. Необходимо выполнить ребилд фильтра если надо(чтобы выделить необходимый функционал). Сайд можно не ребилдить, если не важен размер, не выполнялась оптимизация размера, так как он и так малый. LDE уже включен в мотор. Пак для билда тут где то выложен мной.

5. Csrss. Не знаю зачем вам это нужно, могу лишь предположить что пилите кейлоггер, так как обычно интересуются этим процессом именно из за потока сырого ввода(RIT). Опишу что нужно делать. Есть два годных метода.

A. Код RIT в целом одинаков во всей линейке(вплоть до 8). Необходимо фильтровать NtReadFile(вызывается из StartDeviceRead()). Это ядерный поток, так что фильтрацию следует делать непосредственно в т-процессинге сайда(выбрать ID сервиса, в общем тривиал), в вашем сст-фильтре(в таком случае нет смысла вообще во всём, ибо палево). Сразу скажу что за это могут отрезать яйца, так как получится боевой логгер с функцией недетекта..

B. Без фильтрации можно использовать вектор на RIT(see win32k._aDeviceTemplate: DEVICE_TEMPLATE[]).

6. Дампы возможно deprecated, так как я не помню когда последний раз дампил, билдил обьектники, надо сдампить заново.

--> Link <--

pass: vx

| Сообщение посчитали полезным: MickeyBlueEyes, mak, DenCoder
 eXeL@B —› Программирование —› win32k.sys
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати