![]() |
|
Модераторы: 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 |
|||
|
||||
| Riply |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Комодератор Сообщений: 572 Регистрация: 27.3.2007 Где: St. Petersburg Репутация: 21 Всего: 32 |
Нет, "не прокатит". Даже вызов простейшей ф-ии типа Move (с валидными параметрами), приведет к BSOD. Ты не замораживай его, а для начала попробуй записывать в лог когда кто создан или уничтожен. И не только ID, созданного, но и его имя. Когда это будет получаться, можно будет подумать и о других действиях. |
|||
|
||||
| COOLHack |
|
||||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 281 Регистрация: 8.2.2008 Репутация: -1 Всего: 0 |
Когда это делаю у меня не компилируется.
ну и
и это ещё (без 2-х строк выше норм компилируется)
Я так понял
Это сообщение отредактировал(а) COOLHack - 6.5.2009, 22:58 |
||||||||||
|
|||||||||||
| Riply |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Комодератор Сообщений: 572 Регистрация: 27.3.2007 Где: St. Petersburg Репутация: 21 Всего: 32 |
Показывай, как и где ты ее декларировал. P.S. Настоятельно рекомендую прислушаться к совету, который я тебе уже давала: |
|||
|
||||
| COOLHack |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 281 Регистрация: 8.2.2008 Репутация: -1 Всего: 0 |
а как правельно декларировать её? в статье ссылка на которую в первом посте я не нашол этой инфы
|
|||
|
||||
| Riply |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Комодератор Сообщений: 572 Регистрация: 27.3.2007 Где: St. Petersburg Репутация: 21 Всего: 32 |
Таак. Давай "расставим точки над i" 1. Я спросила: "Показывай, как и где ты ее декларировал". Это означает, что тебе надо привести свой вариант декларации, пусть с ошибками. Тогда я смогу обяснить в чем их (ошибок) суть, иначе я бессильна тебе помочь. 2. "Меня терзают смутные сомнения" (с), что ты вообще ее не декларировал. В этом случае, ты не владеешь элементарными азами и тебе рано не то что заниматься разработкой драйверов, но даже просто работать с API. 3. По ссылке есть вся необходимая информация и по декларации и по многому другому. Если ты поленился это изучить и разобраться, то я просто "умываю руки". Если же чесно, пытался, но не смог, то возвращаемся к исходной точке: у тебя серьезные пробелы в азах программирования. В любом из этих двух вариантов, дальнейшее обсуждение способов перехвата бессмысленно. |
|||
|
||||
| COOLHack |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 281 Регистрация: 8.2.2008 Репутация: -1 Всего: 0 |
Пытался делать перед
Это сообщение отредактировал(а) COOLHack - 7.5.2009, 17:10 |
||||||
|
|||||||
| Riply |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Комодератор Сообщений: 572 Регистрация: 27.3.2007 Где: St. Petersburg Репутация: 21 Всего: 32 |
COOLHack, сама декларация, вроде, правильная. Место, в принципе, тоже сгодится.
Теперь, во всей своей красе, начинаются прелести различий "версий" DDK, о которых я говорила раньше В твоей DDK описан тип PCREATE_PROCESS_NOTIFY_ROUTINE ? Если нет, то его надо описать вручную, иначе получаем ошибку недекларированного идентификатора. |
|||
|
||||
| COOLHack |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 281 Регистрация: 8.2.2008 Репутация: -1 Всего: 0 |
Это надо искать в файле NTDDK.INC? если там то нету, но в ntddk.h нашол такие строки:
Это сообщение отредактировал(а) COOLHack - 7.5.2009, 23:31 |
|||
|
||||
| Riply |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Комодератор Сообщений: 572 Регистрация: 27.3.2007 Где: St. Petersburg Репутация: 21 Всего: 32 |
||||
|
||||
| COOLHack |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 281 Регистрация: 8.2.2008 Репутация: -1 Всего: 0 |
Похоже с переводом проблемы, я так понял нужна верхня часть?
сделал так:
но не компилируется в этом случае. Данный код ставил выше декларирования(его пробывал коментировать, результат не изменился) |
|||
|
||||
| Riply |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Комодератор Сообщений: 572 Регистрация: 27.3.2007 Где: St. Petersburg Репутация: 21 Всего: 32 |
Без умения переводить мы никуда не уедем. Да. Нужно описание типа. А что сделал ты ? В смысле что ты хотел описать, ибо то что ты написал - мягко говоря, "бред сивой кобылы" |
|||
|
||||
| COOLHack |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 281 Регистрация: 8.2.2008 Репутация: -1 Всего: 0 |
и есть то самое описание? Но в этом случае как его правельно перевести? Или где найти информацию о том как правельно перевести ? |
|||
|
||||
| Riply |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Комодератор Сообщений: 572 Регистрация: 27.3.2007 Где: St. Petersburg Репутация: 21 Всего: 32 |
Угу IMHO, единственный способ перевода это: 1. понять что, зачем и почему написано 2. написать "понятое" на Delphi Других способов я не знаю |
|||
|
||||
| COOLHack |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 281 Регистрация: 8.2.2008 Репутация: -1 Всего: 0 |
не вкурю как нужно делать, можешь пояснить?
|
|||
|
||||
| Riply |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Комодератор Сообщений: 572 Регистрация: 27.3.2007 Где: St. Petersburg Репутация: 21 Всего: 32 |
Написать перевод, я конечно могу. Только проку от этого никакого не будет. Тебе придеся переводить очень(!) много всяких структур и еще черта в ступе Ведь не будешь же ты бегать на форум с каждой из них и протянутой рукой что-бы кто-то ее перевел тебе. Поэтому давай сразу учится переводить самостоятельно. Поверь мне, без этого умения ты и шагу не сделаешь. Уж не говоря о том, что все примеры в MSDN не на Delphi писаны Показывай варианты перевода, пусть с ошибками - тебе помогут. Это не так сложно как кажется |
|||
|
||||
| THandle |
|
|||
![]() Хранитель Клуба Награды: 1 Профиль Группа: Админ Сообщений: 3639 Регистрация: 31.7.2007 Где: Moscow, Dubai Репутация: 7 Всего: 372 |
COOLHack, насчет перевода почитай вот этот постик:
http://forum.vingrad.ru/index.php?showtopi...t&p=1450107 Думаю, станет понятнее что куда. |
|||
|
||||
| COOLHack |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 281 Регистрация: 8.2.2008 Репутация: -1 Всего: 0 |
Пытался делать так:
но не компилировалось, потом попросил помочь знакомого, он сказал сделать так:
Если так делаю , то компилируется, но только когда строка
Закоментирована Где ошибка? Это сообщение отредактировал(а) COOLHack - 8.5.2009, 14:15 |
||||||
|
|||||||
| Rrader |
|
|||
|
Inspired =) ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1535 Регистрация: 7.5.2005 Репутация: 29 Всего: 191 |
COOLHack, перевод неверен. PCREATE_PROCESS_NOTIFY_ROUTINE - ключевое сочетание Pointer to ROUTINE. Оно означает указатель на подпрограмму - т.е. процедуру или функцию в Delphi. В Delphi на месте подобных параметров обычно принято ставить безликий Pointer, либо передефинированный, как тут:
Но есть и другой путь, которого от тебя добиваются. Добавлено через 2 минуты и 35 секунд Да и модификаторы const не нужны. Нигде. |
|||
|
||||
| COOLHack |
|
||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 281 Регистрация: 8.2.2008 Репутация: -1 Всего: 0 |
Сделал так:
Скомпилировалось Добавлено через 8 минут и 57 секунд Но теперь если раскоментировать строки
и
то не компилируется. CreateProcessNotyfy на данный момент имеет вид
|
||||||||
|
|||||||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 16 Всего: 128 |
может поможет в чем-то автору частично переведенное Native API тут. там конечно не все, но кое-что есть)
-------------------- There are always someone smarter than you... |
|||
|
||||
| Rrader |
|
|||
|
Inspired =) ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1535 Регистрация: 7.5.2005 Репутация: 29 Всего: 191 |
||||
|
||||
| COOLHack |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 281 Регистрация: 8.2.2008 Репутация: -1 Всего: 0 |
где именно
|
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
с таким уровнем знаний языка ты драйвер не напишешь. Перехватывай апи в юзермоде.
-------------------- Обижено школьников: 8 |
|||
|
||||
| COOLHack |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 281 Регистрация: 8.2.2008 Репутация: -1 Всего: 0 |
||||
|
||||
| COOLHack |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 281 Регистрация: 8.2.2008 Репутация: -1 Всего: 0 |
Не пойму где ошибка
или так правильно?
Это сообщение отредактировал(а) COOLHack - 9.5.2009, 01:38 |
|||
|
||||
| Riply |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Комодератор Сообщений: 572 Регистрация: 27.3.2007 Где: St. Petersburg Репутация: 21 Всего: 32 |
Имеем:
Нам надо написать аналог на Delphi. Смотрим, что делаешь ты:
Это чудо не скомпилируется нигде. Что здесь описывается ? Ты понимаешь ? Я - нет. Идем далее. Поптытка номер два: И что это ? Это хоть чем-то напоминает функцию(процедуру) ? Такое впечатление, что ты не понимаешь что мы пытаемся описать. Идем далее. Rrader, предложил тебе простейший вариант, как все это сделать. И что ? Ты не сумел, даже синтаксически верно оформить вызов. Итого. Что мы имеем ? Вся ветка к драйверам не имеет ни малейшего отношения. Мы разбираемся с умением читать MSND и тем как декларировать что-то в Delphi. Попробую дать еще один совет (хоть ты и игнорируешь их): Начинай изучать основы. Создай ветку в начинающих. Там тебе помогут научиться понимать MSDN и преводить ст-ры оттуда на Delphi. Объяснят, как правильно декларировать. Что такое CallBack - функция. И т.д. и т.п. Чтобы охладить твой пыл в плане самостоятельного написания драйвера, замечу, что мы даже не смогли преодолеть порога компилируемости(!). А это говорит очень о многом. А ведь дальше еще хуже и на порядки(!) сложнее. А что будет когда скомпилируется, то что ты написал методом тыка ? (для другого метода, у тебя пока не хватает знаний) Тогда будем отвечать на вопросы "почему у меня BSOD" ? Пожалей свой компьютер, он ни в чем не виноват Невозможно написать стихи (например, "в лесу родилась елочка"), не зная русского языка. Почему же ты полагаешь, что возможно написать драйвер, не зная языка на котором пишешь ? Это сообщение отредактировал(а) Riply - 9.5.2009, 09:18 |
||||
|
|||||
| COOLHack |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 281 Регистрация: 8.2.2008 Репутация: -1 Всего: 0 |
Если тебя не затруднит, сделай это, но с пояснениями, что и от куда берётся. В следуйщий раз, возможно, на данном этапе у меня проблем не возникнет. |
|||
|
||||
| Riply |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Комодератор Сообщений: 572 Регистрация: 27.3.2007 Где: St. Petersburg Репутация: 21 Всего: 32 |
Знаешь. Написать правильно эти пять строк не проблема ни для меня, ни для подавляющего большинства форумчан. И это было бы во сто крат легче - дать и отвязатся раз и навсегда, чем пытаться что-то пояснить. Только скажи и я их дам. Только потом не обращайся ко мне с последующими вопросами (а они возникнут - не сомневайся. например: "а как декларировать вот это?"), потому что я готова помочь в понимании(обучении), но не в написании кода за кого-то другого, кто даже не соизволил не то что изучить, а даже попытаться изучить язык, несмотря на настырные советы. |
|||
|
||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 16 Всего: 128 |
... он продолжает задавать настырные вопросы по азам) -------------------- There are always someone smarter than you... |
|||
|
||||
![]()
|
| Правила форума "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. |