Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отслеживание пользовательских процессов 
:(
    Опции темы
cnazgul
Дата 19.6.2010, 05:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 25.2.2010

Репутация: нет
Всего: нет



Доброго времени суток. 

Появилась необходимость отслеживать запущенные пользователем процессы . Список возможных процессов известен(есть доступ к приложениям для их исследования). Вопрос, как с достаточной достоверностью определить их наличие в памяти. Реализовать диспетчер задач можно, но большого смысла по именам искать процессы нет.. (один и тот же процесс может по сути иметь разные имена, простым переименованием приложения со стороны пользователя.. Process, proCess, NoProcess..). Есть ли какая нибудь однозначная информация о приложении (а заранее доступ к приложениям есть), способствующая их отлову? Почитал Рихтера.. На мой взгляд не нашлось подобной информации. Есть конечно возможность ловить их совокупными средствами мониторинга за системой (во всяком случае некоторые), но такое решение кажется мне очень уж громоздким.. 
Ради интереса собрал статистику о куче, тредах и модулях тестируемого процесса.. Только используемые модули конечно же идентичны. Искать же по используемым модулям долго да и не безопасно с точки зрения возможного совпадения с другими процессами(а вероятность немалая). Так как же мне их поймать? ) В сторону чего копать нужно в таких случаях? 

ЗЫ ОС - Windows. Язык Cи. И искать их желательно без админских прав в системе(но тут уж как получится..) 

Заранее спасибо.
PM MAIL   Вверх
borisbn
Дата 19.6.2010, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 6
Всего: 135



Создать в процессах именованный mutex и периодически пробовать открывать их?


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
EvilsInterrupt
Дата 19.6.2010, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

Репутация: 1
Всего: 9



cnazgul, Не совсем понятна задача.

>>Появилась необходимость отслеживать запущенные пользователем процессы 
Это создаваемые процессы ВАШИМ приложением или вообще ЛЮБОЙ запускаемый ?

Если первый вариант создавать дочерние с наследованием хэндлов и по хэндлу ивента сигнализировать, в родительском ожидать ивент ;)
Если второй, то  не так просто: хук CreateProcess, либо глубже а-ля Nt* , Zw* функции. 

Вобщем, просьба детализировать
PM MAIL WWW ICQ Jabber   Вверх
xvr
Дата 19.6.2010, 12:59 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Цитата(EvilsInterrupt @  19.6.2010,  12:30 Найти цитируемый пост)
Это создаваемые процессы ВАШИМ приложением или вообще ЛЮБОЙ запускаемый ?
Если второй, то  не так просто: хук CreateProcess, либо глубже а-ля Nt* , Zw* функции. 
Если второй, да если еще принять во внимание
Цитата(cnazgul @  19.6.2010,  05:49 Найти цитируемый пост)
один и тот же процесс может по сути иметь разные имена, простым переименованием приложения со стороны пользователя.. 
то это просто чехол  smile У исполняемого файла МОЖЕТ НЕ БЫТЬ однозначного идентификатора. Если файл переименуют, то однозначно можно сказать только по его содержимому (побайтовое сравнение с оригиналом).
Можно несколько оптимизировать этот процесс - делать не сравнение, а вычислять криптографический хэш (MD5 или SHA1)
Еще можно это делать не для всего файла, а только для секций кода и RO констант в нем (эти секции можно прочесть прямо в образе памяти процесса).
Т.е. для всех интересующих файлов делаются таблички с расположением секций в памяти (см формат PE файла) и их хэши. При создании нового процесса проверяется содержимое памяти для заданных областей


PM MAIL   Вверх
EvilsInterrupt
Дата 19.6.2010, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

Репутация: 1
Всего: 9



xvr, Ну не целиком побайтово, а вычислить адрес загрузки, взять AddressOfEntryPoint и от нее чего-нить, байты какого-нить куска кода проверить ;)
PM MAIL WWW ICQ Jabber   Вверх
xvr
Дата 19.6.2010, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Цитата(EvilsInterrupt @ 19.6.2010,  13:08)
xvr, Ну не целиком побайтово, а вычислить адрес загрузки, взять AddressOfEntryPoint и от нее чего-нить, байты какого-нить куска кода проверить ;)

Могут совпасть даже у разных файлов

PM MAIL   Вверх
bra1ny
Дата 19.6.2010, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 26.12.2008

Репутация: 2
Всего: 3



Цитата

Появилась необходимость отслеживать запущенные пользователем процессы . 

Цитата

Если второй, то  не так просто: хук CreateProcess, либо глубже а-ля Nt* , Zw* функции. 

PsSetCreateProcessNotifyRoutine (). Никаких хуков. Единственная проблема может быть в забитости PspCreateProcessNotifyRoutine   тогда придется подменять на свой обработчик( надо будет решать проблему с поиском PspCreateProcessNotifyRoutine ).



Это сообщение отредактировал(а) bra1ny - 19.6.2010, 16:21
--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России.
PM   Вверх
cnazgul
Дата 19.6.2010, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 25.2.2010

Репутация: нет
Всего: нет



2EvilsInterrupt
Да:
Цитата(EvilsInterrupt @  19.6.2010,  12:30 Найти цитируемый пост)
вообще ЛЮБОЙ запускаемый

От имени пользователя.

2bra1ny
Цитата(bra1ny @  19.6.2010,  16:20 Найти цитируемый пост)
PsSetCreateProcessNotifyRoutine ()

извините, просто всегда думал, что вызвать её не из драйвера(а с под user mode) довольно затруднительно. Да и Вы верно говорите, что:
Цитата(bra1ny @  19.6.2010,  16:20 Найти цитируемый пост)
Единственная проблема может быть в забитости 

вероятно, это не самое гибкое и красивое решение.. Но если вы более детально обрисуете возможности использования/плюсы/ и т.п. буду очень признателен.

2xvr
Сам думал о нечто подобном:
Цитата(xvr @  19.6.2010,  12:59 Найти цитируемый пост)
Можно несколько оптимизировать этот процесс - делать не сравнение, а вычислять криптографический хэш (MD5 или SHA1)

Но если можно, вот об это по подробнее немного:
Цитата(xvr @  19.6.2010,  12:59 Найти цитируемый пост)
Еще можно это делать не для всего файла, а только для секций кода и RO констант в нем (эти секции можно прочесть прямо в образе памяти процесса).

Т.е. грубо так - читаем данные по заданным адресам(смотрим на таблицу секций процесса?), делаем хеш, сравниваем с нашим эталоном.. ?
Получается, что в такой реализации, мы пробегаем по всем юзерским процессам и проводим описанный выше алгоритм. А если это требуется делать каждые 5-10 сек (ловить процессы "зайцы" необходимо почти "на лету"..), то на сколько это будет быстродейственно?
PM MAIL   Вверх
bra1ny
Дата 19.6.2010, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 26.12.2008

Репутация: 2
Всего: 3



Цитата

Извините, просто всегда думал, что вызвать её не из драйвера(а с под user mode) довольно затруднительно

я про юзер мод ничего не говорил.
Цитата

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

плюсы в том , что то документировано , и работает стабильно , нежели хуки  ) 

Это сообщение отредактировал(а) bra1ny - 19.6.2010, 20:50
--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России.
PM   Вверх
xvr
Дата 19.6.2010, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Цитата(cnazgul @  19.6.2010,  20:29 Найти цитируемый пост)
Т.е. грубо так - читаем данные по заданным адресам(смотрим на таблицу секций процесса?), делаем хеш, сравниваем с нашим эталоном.. ?
Сначала сравниваем саму таблицу секций (для каждого процесса). Если совпала с одним (или более) нашими эталонами, тогда вычисляем хэши и сравниваем с эталонами.
Цитата

А если это требуется делать каждые 5-10 сек (ловить процессы "зайцы" необходимо почти "на лету"..), то на сколько это будет быстродейственно? 
Если удастся отсеять большинство процессов на стадии сравнения таблиц секций, то довольно быстро

PM MAIL   Вверх
12usver12
Дата 20.6.2010, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 247
Регистрация: 5.1.2007

Репутация: 1
Всего: 1



в юзермоде нет универсальных решений отслежевания процессов...
мне кажется что в твом случае хватит такого решения, в цикле
EnumProcesses  ->   pids  
GetPathByPid   -> exepath
CalcCRC32(exepath)  - > сравнить с TableCRC32 , если не все процессы из TableCRC32 работают -> ахтунг 

вот чисто теоретический есть метод контроля за созданием процесса (никогда не проверял), только придется копнуть в сторону сервера подсистем csrss.exe, любой 
 процесс создающй новый - информирует сервер подсистем о создании процесса, поэтому можно нужное хукнуть только в этом процессе (csrss)

Это сообщение отредактировал(а) 12usver12 - 20.6.2010, 12:11
PM MAIL   Вверх
bra1ny
Дата 20.6.2010, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 26.12.2008

Репутация: 2
Всего: 3



Цитата

сервера подсистем csrss.exe

это настолько все не документировано , что жесть))
--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России.
PM   Вверх
cnazgul
Дата 20.6.2010, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 25.2.2010

Репутация: нет
Всего: нет



Цитата(xvr @  19.6.2010,  12:59 Найти цитируемый пост)
Еще можно это делать не для всего файла, а только для секций кода и RO констант в нем (эти секции можно прочесть прямо в образе памяти процесса).

вот тут подумалось.. а на сколько такая реализация будет оправдана, при использовании РЕ-протекторов для процессов-"зайцев" ?

Это сообщение отредактировал(а) cnazgul - 20.6.2010, 15:51
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0623 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.