|
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
|
COOLHack |
|
|||
Опытный Профиль Группа: Участник Сообщений: 281 Регистрация: 8.2.2008 Репутация: -1 Всего: 0 |
Как отследить запуск процесса?
Моя программа должна будет при запуске нового процесса замарозить его, потом проверить на наличие в списке довереных, если он там есть -разморозить, если нету вывести пользывателю всю доступную информацию о процессе, а также загрузить описание процесса и показать его вместе с остальной инфой. Как замарозить процесс я знаю, но как поймать его во время запуска? В бесконечном цикле проверять появление новых процессов не вариант - большая нагрузка на процессор. А если снизить скорость проверки, то нагрузка уменьшится, но вредоносная программа сможет успеть чтонить натворить. Дак каким образом можно отследить запуск процесса, как можно быстрее, чтоб процесс неуспел ничего сделать? Это сообщение отредактировал(а) COOLHack - 2.5.2009, 15:07 |
|||
|
||||
MetalFan |
|
|||
Аццкий Сотона Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 16 Всего: 128 |
самое надежное - писать драйвер. остальное - игрушки. имхо
Это сообщение отредактировал(а) MetalFan - 2.5.2009, 16:17 -------------------- There are always someone smarter than you... |
|||
|
||||
bartram |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 1606 Регистрация: 22.2.2004 Где: Russia, Samara Репутация: 3 Всего: 29 |
Как правильно подметил MetalFan, надо писать драйвер, можно мгновенно отреагировать на это из ядра системы, а в пользовательском режиме много чего может произойти с момента запуска экзешника до создания процесса, все не отследишь.
|
|||
|
||||
COOLHack |
|
|||
Опытный Профиль Группа: Участник Сообщений: 281 Регистрация: 8.2.2008 Репутация: -1 Всего: 0 |
А где можно найти информацию о том, как написать этот самый драйвер?
|
|||
|
||||
COOLHack |
|
|||
Опытный Профиль Группа: Участник Сообщений: 281 Регистрация: 8.2.2008 Репутация: -1 Всего: 0 |
или возможно есть готовые решения данной проблемы? Я поискал - не нашел
|
|||
|
||||
bartram |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 1606 Регистрация: 22.2.2004 Где: Russia, Samara Репутация: 3 Всего: 29 |
Драйвера Windows режима ядра |
|||
|
||||
COOLHack |
|
|||
Опытный Профиль Группа: Участник Сообщений: 281 Регистрация: 8.2.2008 Репутация: -1 Всего: 0 |
Вот руководствуясь статьей я сделал драйвер который ещё ничего полезного не умеет делать.
Как сделать чтоб он узновал о появлении нового процесса и сообщал моей программе? Это сообщение отредактировал(а) COOLHack - 4.5.2009, 23:05 |
|||
|
||||
Riply |
|
||||
Опытный Профиль Группа: Комодератор Сообщений: 572 Регистрация: 27.3.2007 Где: St. Petersburg Репутация: 21 Всего: 32 |
В смысле скомпилировал код, который прилагается ?
Например, можно использовать PsSetCreateProcessNotifyRoutine |
||||
|
|||||
COOLHack |
|
|||
Опытный Профиль Группа: Участник Сообщений: 281 Регистрация: 8.2.2008 Репутация: -1 Всего: 0 |
А пример использования можете показать?
|
|||
|
||||
Riply |
|
|||
Опытный Профиль Группа: Комодератор Сообщений: 572 Регистрация: 27.3.2007 Где: St. Petersburg Репутация: 21 Всего: 32 |
Я не от "нечего делать" задала вопрос но ты его проигнорировал. Это была не насмешка. Дело в том, что это в Delphi можно легко привести пример кода, ибо исходно у всех одинаковое "окружение". При разработке драйвера под Delphi, это не совсем так. Например, у одного одни System и SysInit, у другого - другие. А с переводом DDK, тут вообще жуть, ибо у каждого свой собственнолапный. Может, конечно и есть "универсальный, единый для всех" но я его не видела. А те что встречала, мне, мягко говоря, не очень понравились Соответственно, код, работающий у меня, у тебя может приводить к BSOD. Так вот. Если ты "скомпилировал код, который прилагается ", то у меня есть хоть какое-то представление о том, что у тебя там происходит. Ну да ладно. Это была так, прелюдия Перейдем к делу: 1. Открываем MSDN и находим: NTSTATUS PsSetCreateProcessNotifyRoutine( IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine, IN BOOLEAN Remove); Parameters NotifyRoutine Specifies the entry point of a caller-supplied process-creation callback routine. Remove Indicates whether the routine specified by NotifyRoutine should be added to or removed from the system's list of notification routines. If FALSE, the specified routine is added to the list. If TRUE, the specified routine is removed from the list. 2. Со вторым параметром все ясно. Смотрим определение PCREATE_PROCESS_NOTIFY_ROUTINE: Highest-level drivers can call PsSetCreateProcessNotifyRoutine to set up their process-creation notify routines, declared as follows: VOID (*PCREATE_PROCESS_NOTIFY_ROUTINE) ( IN HANDLE ParentId, IN HANDLE ProcessId, IN BOOLEAN Create); Далее там идет подробное описание параметров. Я его уж не буду сюда копи-пастить. Хорошо ? 3. Глядя на все это, пишем свою реализацию (например, что-то такого типа):
4. Где-то, например при загрузке драйвера, вызываем PsSetCreateProcessNotifyRoutine(CreateProcessNotyfy, False), соответственно при выгрузке PsSetCreateProcessNotifyRoutine(CreateProcessNotyfy, True); А теперь, скажи мне на милость, какой из этих пунктов, ты не сумел сделать, как не старался ? Посмотреть в MSDN ? Т.е. не царское это дело, за тебя другие сделают ? Или написать несколько простейших строчек кода ? Тогда может ты рановато приступил к работе с драйверами ? Мое IHMO, что "задавание вопросов на форуме", подразумевает совместную работу в поиске решения спрашивающего и отвечающего, а совсем не выполнение работы одним за другого. Это сообщение отредактировал(а) Riply - 5.5.2009, 21:20 |
|||
|
||||
COOLHack |
|
||||||
Опытный Профиль Группа: Участник Сообщений: 281 Регистрация: 8.2.2008 Репутация: -1 Всего: 0 |
По большому счёту я не знал что делать
Полностью согласен с тобой В место "Наша_Реакция_На Создание_Процесса" нужно вписать имя какой-то функции? Когда я вставляю в код
то у меня даже не компилируется. Строку RetStatus := Наша_Реакция_На Создание_Процесса(ParentId, ProcessId); пробывал коментировать. |
||||||
|
|||||||
Riply |
|
|||
Опытный Профиль Группа: Комодератор Сообщений: 572 Регистрация: 27.3.2007 Где: St. Petersburg Репутация: 21 Всего: 32 |
И не скомпилится. Вместо нее должна быть твоя функция, реализующая те действия, которые ты хочешь чтобы происходили при "создании" нового процесса. P.S. Log_WriteW тоже "не проскочит". Я не помню как называется функция логирования у ama_kid`а. P.P.S. Позволю себе, дать тебе дружеский совет: бросай работу с драйвером, и садись за хорошие книжки по программированию и основам программирования. Попробуй написать какую-нибудь программу сам (а не скопи-пастить код). Например, по обмену информацией между процессами. Потом можно будет и продолжить разговор, но уже на другом уровне. |
|||
|
||||
COOLHack |
|
|||
Опытный Профиль Группа: Участник Сообщений: 281 Регистрация: 8.2.2008 Репутация: -1 Всего: 0 |
знаю, коментировал строку. А вот на Log_WriteW внимания не обратил Это сообщение отредактировал(а) COOLHack - 6.5.2009, 00:25 |
|||
|
||||
Riply |
|
|||
Опытный Профиль Группа: Комодератор Сообщений: 572 Регистрация: 27.3.2007 Где: St. Petersburg Репутация: 21 Всего: 32 |
||||
|
||||
COOLHack |
|
|||
Опытный Профиль Группа: Участник Сообщений: 281 Регистрация: 8.2.2008 Репутация: -1 Всего: 0 |
а если оставить только это:
то нормально компилируется. но допустим теперь необходимо заморозить процесс, из обычного приложения я делал это так: http://forum.vingrad.ru/topic-43506.html А как делается тоже самое, но из драйвера? я так понимаю обычное копирование кода тут не прокатит. Это сообщение отредактировал(а) COOLHack - 6.5.2009, 00:48 |
|||
|
||||
Правила форума "Delphi: WinAPI и системное программирование" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |