![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| cnazgul |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 25.2.2010 Репутация: нет Всего: нет |
Доброго времени суток.
Появилась необходимость отслеживать запущенные пользователем процессы . Список возможных процессов известен(есть доступ к приложениям для их исследования). Вопрос, как с достаточной достоверностью определить их наличие в памяти. Реализовать диспетчер задач можно, но большого смысла по именам искать процессы нет.. (один и тот же процесс может по сути иметь разные имена, простым переименованием приложения со стороны пользователя.. Process, proCess, NoProcess..). Есть ли какая нибудь однозначная информация о приложении (а заранее доступ к приложениям есть), способствующая их отлову? Почитал Рихтера.. На мой взгляд не нашлось подобной информации. Есть конечно возможность ловить их совокупными средствами мониторинга за системой (во всяком случае некоторые), но такое решение кажется мне очень уж громоздким.. Ради интереса собрал статистику о куче, тредах и модулях тестируемого процесса.. Только используемые модули конечно же идентичны. Искать же по используемым модулям долго да и не безопасно с точки зрения возможного совпадения с другими процессами(а вероятность немалая). Так как же мне их поймать? ) В сторону чего копать нужно в таких случаях? ЗЫ ОС - Windows. Язык Cи. И искать их желательно без админских прав в системе(но тут уж как получится..) Заранее спасибо. |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 6 Всего: 135 |
Создать в процессах именованный mutex и периодически пробовать открывать их?
-------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| EvilsInterrupt |
|
|||
|
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: 1 Всего: 9 |
cnazgul, Не совсем понятна задача.
>>Появилась необходимость отслеживать запущенные пользователем процессы Это создаваемые процессы ВАШИМ приложением или вообще ЛЮБОЙ запускаемый ? Если первый вариант создавать дочерние с наследованием хэндлов и по хэндлу ивента сигнализировать, в родительском ожидать ивент ;) Если второй, то не так просто: хук CreateProcess, либо глубже а-ля Nt* , Zw* функции. Вобщем, просьба детализировать |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Если второй, да если еще принять во внимание
Можно несколько оптимизировать этот процесс - делать не сравнение, а вычислять криптографический хэш (MD5 или SHA1) Еще можно это делать не для всего файла, а только для секций кода и RO констант в нем (эти секции можно прочесть прямо в образе памяти процесса). Т.е. для всех интересующих файлов делаются таблички с расположением секций в памяти (см формат PE файла) и их хэши. При создании нового процесса проверяется содержимое памяти для заданных областей |
|||
|
||||
| EvilsInterrupt |
|
|||
|
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: 1 Всего: 9 |
xvr, Ну не целиком побайтово, а вычислить адрес загрузки, взять AddressOfEntryPoint и от нее чего-нить, байты какого-нить куска кода проверить ;)
|
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Могут совпасть даже у разных файлов |
|||
|
||||
| bra1ny |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 26.12.2008 Репутация: 2 Всего: 3 |
PsSetCreateProcessNotifyRoutine (). Никаких хуков. Единственная проблема может быть в забитости PspCreateProcessNotifyRoutine тогда придется подменять на свой обработчик( надо будет решать проблему с поиском PspCreateProcessNotifyRoutine ). Это сообщение отредактировал(а) bra1ny - 19.6.2010, 16:21 --------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России. |
||||
|
|||||
| cnazgul |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 25.2.2010 Репутация: нет Всего: нет |
2EvilsInterrupt
Да: От имени пользователя. 2bra1ny извините, просто всегда думал, что вызвать её не из драйвера(а с под user mode) довольно затруднительно. Да и Вы верно говорите, что: вероятно, это не самое гибкое и красивое решение.. Но если вы более детально обрисуете возможности использования/плюсы/ и т.п. буду очень признателен. 2xvr Сам думал о нечто подобном:
Но если можно, вот об это по подробнее немного:
Т.е. грубо так - читаем данные по заданным адресам(смотрим на таблицу секций процесса?), делаем хеш, сравниваем с нашим эталоном.. ? Получается, что в такой реализации, мы пробегаем по всем юзерским процессам и проводим описанный выше алгоритм. А если это требуется делать каждые 5-10 сек (ловить процессы "зайцы" необходимо почти "на лету"..), то на сколько это будет быстродейственно? |
||||
|
|||||
| bra1ny |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 26.12.2008 Репутация: 2 Всего: 3 |
я про юзер мод ничего не говорил.
плюсы в том , что то документировано , и работает стабильно , нежели хуки ) Это сообщение отредактировал(а) bra1ny - 19.6.2010, 20:50 --------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России. |
||||
|
|||||
| xvr |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
|
||||
|
|||||
| 12usver12 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 247 Регистрация: 5.1.2007 Репутация: 1 Всего: 1 |
в юзермоде нет универсальных решений отслежевания процессов...
мне кажется что в твом случае хватит такого решения, в цикле EnumProcesses -> pids GetPathByPid -> exepath CalcCRC32(exepath) - > сравнить с TableCRC32 , если не все процессы из TableCRC32 работают -> ахтунг вот чисто теоретический есть метод контроля за созданием процесса (никогда не проверял), только придется копнуть в сторону сервера подсистем csrss.exe, любой процесс создающй новый - информирует сервер подсистем о создании процесса, поэтому можно нужное хукнуть только в этом процессе (csrss) Это сообщение отредактировал(а) 12usver12 - 20.6.2010, 12:11 |
|||
|
||||
| bra1ny |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 26.12.2008 Репутация: 2 Всего: 3 |
это настолько все не документировано , что жесть)) --------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России. |
|||
|
||||
| cnazgul |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 25.2.2010 Репутация: нет Всего: нет |
вот тут подумалось.. а на сколько такая реализация будет оправдана, при использовании РЕ-протекторов для процессов-"зайцев" ? Это сообщение отредактировал(а) cnazgul - 20.6.2010, 15:51 |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |