C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Отследить создание процесса WinXP
mayoroff
  Отправлено: 05.04.2005, 15:46


Не зарегистрирован







Есть следующая задача: необходимо отследить создание процесса и блокировать его запуск, если оно запущено не из моей программы. Я в этом деле совершенный чайник, был бы очень признателен, если бы вы меня направили на верный путь решения проблемы. Заранее спасибо!
62316e
Отправлено: 05.04.2005, 17:30


Дежурный стрелочник

Группа: Участник
Сообщений: 38



1) TServiceApplication
2) Hook
И перерехвачиваеш поиск на форуме sad.gif
mayoroff
Отправлено: 05.04.2005, 17:43


Не зарегистрирован







QUOTE (62316e @ 05/04/2005, 17:30)
1) TServiceApplication
2) Hook
И перерехвачиваеш поиск на форуме sad.gif

Честно говоря — обыскал весь форум, но ничего так и не нашёл. Если Вам не трудно, дайте пожалуйста ссылку...
Gedeon
Отправлено: 05.04.2005, 18:38


Ветеран

Группа: Модератор
Сообщений: 1742



TServiceApplication тут ни при чем, действительно нужен перехват функции CreateProcess, задача не тривиальная, где-то видел не помню, получить список процессов, запущенных в системе достаточно легко

($BCB)\Examples\Apps\ProcView

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

И вот еще нашел тут

Отредактировано Gedeon — 05/04/2005, 16:42
Ajgor
Отправлено: 11.04.2005, 15:41


Ученик-кочегар

Группа: Участник
Сообщений: 23



Есть не очень красивый но довольно простой способ. Ключ в реестре HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows. Если там прописать dll, то она будет грузится во все процессы. В dllmain проверяеш что угодно (при загрузке или выгрузке).
Vlad
Отправлено: 12.04.2005, 10:32


Машинист паровоза

Группа: Участник
Сообщений: 231



Есть интересная статья http://rsdn.ru/?article/db/Hierarchy.xml, может что нибудь от туда пригодится. smile.gif
Ajgor
Отправлено: 12.04.2005, 15:26


Ученик-кочегар

Группа: Участник
Сообщений: 23



А при чём тут эта статья?
Vlad
Отправлено: 12.04.2005, 16:03


Машинист паровоза

Группа: Участник
Сообщений: 231



Извиняюсь не ту ссылку бросил! biggrin.gif
http://rsdn.ru/article/baseserv/IntercetionAPI.xml
Перехват API-функций в Windows NT/2000/XP
Автор: Тихомиров В.А.
Источник: RSDN Magazine #1
Опубликовано: 11.11.2002
Исправлено: 13.03.2005
Версия текста: 1.0
Что такое «перехват API-функций»
Метод 1. Перехват API непосредственной записью в код системной функции.
Метод 2. Перехват API через таблицу импорта.
Внедрение кода в чужой процесс в Windows NT
Внедрение 1
Внедрение 2
Как отлаживать такие выкрутасы
Отладка кода загрузчика
Отладка функций, выполняющихся при старте DLL
Отладка функций — двойников, получающих управление при вызове перехваченных API функций
Тестирование


Guest
Отправлено: 15.04.2005, 10:52


Не зарегистрирован







не надо усложнять себе жизнь
Запускаешь свою прогу с таймером который каждые 5-10 секунд проверяет запущен ли процесс и убивает его. Но запуская из твоей проги процесс запоминаещь его PID, и в последующем не трогаещь.
Вот и все и нет проблем!
Нужен код определения PID сообщи!
Gal
Отправлено: 15.04.2005, 10:59


Станционный диспетчер

Группа: Участник
Сообщений: 124



Да и еще раньше регисрировался автоматом теперь через раз. Не обратил на это внимание.

А усложнять программу можно до бесконечность, но окончательной весии так можно и не получить.
Ajgor
Отправлено: 15.04.2005, 16:31


Ученик-кочегар

Группа: Участник
Сообщений: 23



QUOTE (Guest @ 15/04/2005, 10:52)
не надо усложнять себе жизнь
Запускаешь свою прогу с таймером который каждые 5-10 секунд проверяет запущен ли процесс и убивает его. Но запуская из твоей проги процесс запоминаещь его PID, и в последующем не трогаещь.
Вот и все и нет проблем!
Нужен код определения PID сообщи!

Тут я не совсем согласен. Задача состоит в том чтобы проследить создание процесса. Если проверять по таймеру с интервалом например в те же 5-10 секунд список процессов, то так ты сможеш определить, что процесс уже работает < 5-10 секунд но не сам факт его запуска. А если это вирус то за 5-10 секунд можно сделать многое... Надо именно перехватить его запуск. Как ето сделать читай выше (например подменить что-то типа CreateProcess).
Gal
Отправлено: 15.04.2005, 17:40


Станционный диспетчер

Группа: Участник
Сообщений: 124



В принципе Я понял, что "mayoroff" неопходимо контролировать запуск какого либо процесса не из свое программы, а из своей можно. Так причем здесь вирус!
Ajgor
Отправлено: 15.04.2005, 18:55


Ученик-кочегар

Группа: Участник
Сообщений: 23



При том, что пока по таймеру ты будеш проверять список процессов процесс уже запустится и некоторое время (пусть даже очень маленькое) проработает. Я так понял его надо в корне рубить при попытке запуска.
Gal
Отправлено: 16.04.2005, 12:33


Станционный диспетчер

Группа: Участник
Сообщений: 124



Наверное ты всетаки прав, но я предложил простое свое решение, которое уже воплотил в жизнь.
И нареканий пока нет.
а тестировал я оконных прогах, так даже окно не появлялось.

Вернуться в Вопросы программирования в C++Builder