Здравствуйте, Уважаемые. У меня возникла проблема, нужно перехватить
появление окна в системе (и закрыть его)... я использую глобальный хук
(WH_CBT)... окна вылезают из потоков сиспроцесса CSRSS.EXE .. проблема в том, что я не могу загрузить мою dll а адресное пространство именно этого процесса ..
хотя для других процессов моя dll работает без проблем (появления их окошек перехватываются)...
чего я только
не делал:
1. прописывал в реестре автозагрузку dll (... AppInit_DLLs) ... результат —
моя dll загружается в адресное пространство всех тех процессов на которые спроецирован модуль User32.dll , .. хотя CSRSS.EXE тоже его использует .. на него это не влияет (
2. устанавливал хук в системе из приложения, которое имело права отладчика
(т.е. имело право просматривать системные процессы)
// Enabling the debug privilege allows the application to see
// information about service applications
BOOL fOk = FALSE; // Assume function fails
HANDLE hToken;
// Try to open this process's access token
if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES,
&hToken)) {
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Уважаемые. У меня возникла проблема, нужно перехватить А>появление окна в системе (и закрыть его)... я использую глобальный хук А>(WH_CBT)... окна вылезают из потоков сиспроцесса CSRSS.EXE .. проблема в том, что я не могу загрузить мою dll а адресное пространство именно этого процесса .. А>хотя для других процессов моя dll работает без проблем (появления их окошек перехватываются)... А>чего я только А> не делал:
[skip]
Здравствуйте, Аноним, Вы писали:
А> 1. прописывал в реестре автозагрузку dll (... AppInit_DLLs) ... результат -
Факт известный, так и задумано, в CSRSS эти модули не грузятся, грузить надо руками.
Так как там есть kernel32.dll, то CreateRemoteThread вполне должно справиться, если нет — я недавно писал код как процессы создаются, он на форуме с исходниками, он точно сработает, я так сам делаю, даже для SMSS.
А> 2. устанавливал хук в системе из приложения, которое имело права отладчика
Хуки тут отдыхают.
Вообще говоря, окошко могло создаться и из ядра, также как в адресном пространстве CSRSS бывают и нормальные, и "ядерные" потоки. Так что не факт что перехватишь, если user32.dll будешь править.
А это разве не сервис? Если это сервис, то он выполняется в другой WindowStation. Оконные сообщения между WindowStation-ами не ходят, так что ваша программа, работающая в WinSta0, не перехватит сообщения от Service-0x0-3e7$ (WindowStation для сервисов, выполняющихся под системным аккаунтом).
Если так, то придется писать межпроцессорное взаимодействие, основанное не на оконных сообщениях, а на чем-то другом, например, именованных каналах. Но dll внедрять придется все равно, и даже CreateRemoteThread в случае сервиса бывает бессилен. Я сделал так:
— В своей программе создаю временный сервис и стартую его под системным аккаунтом (нужны админские права)
— Сервис стартует, и он уже занимается внедрением dll в адреснов пространство посредством CreateRemoteThread. Так как мой сервис сидит в той же WindowStation + Desktop-е, здесь проблем нет.
— После того, как dll успешно внедрена, сервис удаляет себя из базы данных сервисов и завершает работу. Никто и не заметил, шо це було
Вопследствии моя программа и внедренная DLL общаются через named pipe.
Здравствуйте, Sergey Ten, Вы писали:
ST>А это разве не сервис?
Нет.
ST>и даже CreateRemoteThread в случае сервиса бывает бессилен.
Не верю. Факты пожалуйста. Пока что мне удавалось в любое Win32-приложение загружать код через CreateRemoteThread.
V>Не верю. Факты пожалуйста. Пока что мне удавалось в любое Win32-приложение загружать код через CreateRemoteThread.
Мне это не удалось сделать для Oracle. В то же время в юзерские процессы все внедрялось без проблем.
Re[3]: Как установить хук на CSRSS.exe ??
От:
Аноним
Дата:
10.01.03 16:00
Оценка:
Вообще говоря Csrss не приложение Win32, а как раз и есть подсистема Win32 (это правда к сути дела не относится).
Но и в smss.exe и в csrss мне тоже удавалось загружать свою библиотеку через CreateRemoteThread (короче методом М. Руссиновича).
Здравствуйте, SergH, Вы писали:
SH>А небось прав не хватало. Ошибка какая была?
CreateRemoteThread возвращался без ошибки, как и все ему предшествующее (VirtualAllocEx, WriteProcessMemory). Но, возможно, ты прав, надо будет посмотреть еще раз.
Здравствуйте, Аноним, Вы писали:
А>Вообще говоря Csrss не приложение Win32, а как раз и есть подсистема Win32 (это правда к сути дела не относится).
Как раз это существенно.
Подсистема для CSRSS действительно 1, то есть, NATIVE.
А>Но и в smss.exe и в csrss мне тоже удавалось загружать свою библиотеку через CreateRemoteThread
Проверю дома, уж больно сказочно звучит.
Проверять буду просто: CreateRemoteThread(ZwClose), закроется хэндл — круто.
А>(короче методом М. Руссиновича).
Это как? Что за метод? Если тот что по ссылке — то при чем тут сервисы?
Здравствуйте, vasketsov, Вы писали:
V>Это как? Что за метод? Если тот что по ссылке — то при чем тут сервисы?
Ссылка к сервисам имеет следующее отношение: в той утилите, на которую кажет ссылка, есть ресурс RC_DATA, который и представляет из себя код сервиса. При запуске удаленной команды этот ресурс читается и сбрасывается во временный файл, который и становится временным сервисом. Но к обсуждению CreateRemoteThread это не имеет отношения.
А>>Но и в smss.exe и в csrss мне тоже удавалось загружать свою библиотеку через CreateRemoteThread V>Проверю дома, уж больно сказочно звучит. V>Проверять буду просто: CreateRemoteThread(ZwClose), закроется хэндл — круто.
А что собираешься закрывать то. Код для внедрения в smss.exe могу и поискать если очень нужен. Нужно всего лишь включить привилегию отладки.
А>>(короче методом М. Руссиновича). V>Это как? Что за метод? Если тот что по ссылке — то при чем тут сервисы?
Внедрение описано в небезизвестной книге Руссиновича (ссылку не сотрел)
Вкратце. Открываем удаленный процесс. Выделяем в нем регион памяти, в которую записываем имя внедряемой библиотеки. Запускаем в удаленном процессе поток с функцией LoadLibrary, которой в качестве параметра передаем адрес выделенного региона. Ждем GetExitCodeThread код возврата — который есть адрес загрузки нашей библиотеки. Имея ее адрес можем запускать из нее любую функцию.
Здравствуйте, Small, Вы писали:
V>>Проверять буду просто: CreateRemoteThread(ZwClose), закроется хэндл — круто. S>А что собираешься закрывать то.
А пофигу, найду чего, у меня есть свой работающий TaskEx, им и погляжу что закрыть можно.
НАпример, хэндлы на CSRSS и Winlogon закрою.
S>Вкратце. Открываем удаленный процесс. Выделяем в нем регион памяти, в которую записываем имя внедряемой библиотеки. Запускаем в удаленном процессе поток с функцией LoadLibrary, которой в качестве параметра передаем адрес выделенного региона. Ждем GetExitCodeThread код возврата — который есть адрес загрузки нашей библиотеки. Имея ее адрес можем запускать из нее любую функцию.
В smss НЕ грузится kernel32.dll, потому LoadLibrary там нет. Там надо делать через LdrLoadDll. В этом у меня и был вопрос, а Ваш ответ как раз и проясняет, делали Вы это реально для SMSS или нет.
Здравствуйте, vasketsov, Вы писали:
> НАпример, хэндлы на CSRSS и Winlogon закрою.
Взять адрес через иду описателя Winlogon что-ли — прокатит конечно, но жди синего экрана.
> В smss НЕ грузится kernel32.dll, потому LoadLibrary там нет. Там надо делать > через LdrLoadDll. В этом у меня и был вопрос, а Ваш ответ как раз и проясняет, > делали Вы это реально для SMSS или нет.
Да ты прав с smss.exe лажа вышла — я ошибся делал для csrss в нем точно kernel32 есть (и потому все проходило). для smss.exe придется делать черз LdrLoadDll — суть дела это не меняет — должно прокатить.
Re: Как установить хук на CSRSS.exe ??
От:
Аноним
Дата:
11.01.03 07:07
Оценка:
Ребята, спасибо ОГРОМНОЕ за помощь !!!!
Denis
Re: Как установить хук на CSRSS.exe ??
От:
Аноним
Дата:
11.01.03 09:29
Оценка:
ААААААААААА народ , СПАСАЙТЕ ....!!!
это опять я ....
Такая же проблема в Windows 98 ...
не могу внедрить свой хук в адресное пространство процесса ..
только тут не знаю в какой процесс нужно внедрять ... глобальный хук не перехватывает создание окна ... значит процесс системный ...
(OKI принтер драйвер ...) и как узнать список системных задач запeщенных под Windows 98 (и какие они модули используют ... в win98 Task Meneger'а нету )
я не думаю что OKI Printer driver это системный процесс
я думаю что это OKI Printer driver control application ты видишь...
короче тебе нужно слить с www.iarsn.com TaskInfo2003 и все посмотреть самому
прежде чем кипяшиться
там тебе и покажут процесс куда надо внедрять хук, ИМХО
You wrote on Sat, 11 Jan 2003 09:29:49 GMT: > From: Оценить > ААААААААААА народ , СПАСАЙТЕ ....!!! > это опять я .... > Такая же проблема в Windows 98 ... > не могу внедрить свой хук в адресное пространство процесса .. > только тут не знаю в какой процесс нужно внедрять ... глобальный хук > не перехватывает создание окна ... значит процесс системный ... > (OKI принтер драйвер ...) и как узнать список системных задач > запeщенных под Windows 98 (и какие они модули используют ... в win98 > Task Meneger'а нету )
With best regards, Valery A. Boronin. E-mail: boronin@novosoft.ru
Posted via RSDN NNTP Server 1.4.1
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
Здравствуйте, Valerio, Вы писали:
V>я не думаю что OKI Printer driver это системный процесс V>я думаю что это OKI Printer driver control application ты видишь... V>короче тебе нужно слить с www.iarsn.com TaskInfo2003 и все посмотреть самому V>прежде чем кипяшиться V>там тебе и покажут процесс куда надо внедрять хук, ИМХО V>You wrote on Sat, 11 Jan 2003 09:29:49 GMT: V>With best regards, Valery A. Boronin. E-mail: boronin@novosoft.ru
Этот процесс — Spooler Sub System Process ...
Если не системный, то почему глобал хук на него срабатывает?
V>там тебе и покажут процесс куда надо внедрять хук, ИМХО
А хук вешается не на процесс а на его поток .... а если spooler создаст новый поток и там выведет сообщение..?