Здравствуйте Ales, Вы писали:
A>Можно конечно и через хуки используя типа SetWindowsHookEx (WH_SHELL ... ) но они могут для моей задачи перехватывать создание окна например. А вот как перехватить создание процесса? A>Т.е. Запустил юзер прогу — и я хочу это, юзая API, перехватить что-б узнать что что за прога.
Можно сделать DLL и сказать системе, что она должна загружаться во все запускаемые процессы (это как-то делается через реестр, но я точно не помню как) и при загрузке этой своей DLL делать что захочешь.
Можно конечно и через хуки используя типа SetWindowsHookEx (WH_SHELL ... ) но они могут для моей задачи перехватывать создание окна например. А вот как перехватить создание процесса?
Т.е. Запустил юзер прогу — и я хочу это, юзая API, перехватить что-б узнать что что за прога.
Здравствуйте Ales, Вы писали:
A>Можно конечно и через хуки используя типа SetWindowsHookEx (WH_SHELL ... ) но они могут для моей задачи перехватывать создание окна например. А вот как перехватить создание процесса? A>Т.е. Запустил юзер прогу — и я хочу это, юзая API, перехватить что-б узнать что что за прога.
Перехватить АПИ CreateProcess(...)
Compiler can be as trained AI but can't compose music.
Antheil piano jazz sonata. Я болен ПГМ.
Здравствуйте Ales, Вы писали:
A>Можно конечно и через хуки используя типа SetWindowsHookEx (WH_SHELL ... ) но они могут для моей задачи перехватывать создание окна например. А вот как перехватить создание процесса? A>Т.е. Запустил юзер прогу — и я хочу это, юзая API, перехватить что-б узнать что что за прога.
Джефри Рихтер в 4-ом издании своей книги подробно рассказывает как можно перехватывать вызовы API функций, а в данном случае — это CreateProcess().
Здравствуйте serg_p, Вы писали:
SP>Здравствуйте Ales, Вы писали:
A>>Можно конечно и через хуки используя типа SetWindowsHookEx (WH_SHELL ... ) но они могут для моей задачи перехватывать создание окна например. А вот как перехватить создание процесса? A>>Т.е. Запустил юзер прогу — и я хочу это, юзая API, перехватить что-б узнать что что за прога. :???:
SP>Джефри Рихтер в 4-ом издании своей книги подробно рассказывает как можно перехватывать вызовы API функций, а в данном случае — это CreateProcess().
Можно перехватить CreateProcess, но только какого-то конкретного приложения, если его надо перехватить во всей системе, то надо установить такие перехватчики во ВСЕХ процессах, это лишнии сложности. Кроме того надо следить за вновь появлющимися процессами и устанавливать им тоже перехватчики. Вообще такие перехватчики лучше не использовать в коммерческих приложениях (про это, по-моему, даже сам Рихтер пишет).
Здравствуйте Ales, Вы писали:
A>Можно конечно и через хуки используя типа SetWindowsHookEx (WH_SHELL ... ) но они могут для моей задачи перехватывать создание окна например. А вот как перехватить создание процесса? A>Т.е. Запустил юзер прогу — и я хочу это, юзая API, перехватить что-б узнать что что за прога.
Можно через реестр — там есть ключ, в котором находится список длл, которые загружаются в процесс.
Пишешь длл простецкую.
При получении DLL_PROCESS_ATTACH фиксируешь имя файла и все. Таким образом можно промониторить все аппликации.
Но можно и без реестра.
Пишешь хук любой, нро чтоб глобальный был. Лучше такой, чтою не часто вызывался.
Длл, содержащая глобальный хук зпгружается во все процессы. Но таким образом перехватишь запуск аппликаций, которые имеют очередь сообщений. К консоьным аппликухам хуки не приклеятся.
D>Можно перехватить CreateProcess, но только какого-то конкретного приложения, если его надо перехватить во всей системе, то надо установить такие перехватчики во ВСЕХ процессах, это лишнии сложности. Кроме того надо следить за вновь появлющимися процессами и устанавливать им тоже перехватчики. Вообще такие перехватчики лучше не использовать в коммерческих приложениях (про это, по-моему, даже сам Рихтер пишет).
Смотря как перехватить, если с внедрением в код процесса, то да, а если писать в длл подгруженную в памяти, то все процессы вызывают одну и туже длл.
Конечно лучше не использовать, а если продукт должен такое делать ?
Ну и можно сканить процессы переодически, по некоторым событиям ... просматривать какой появился...
Compiler can be as trained AI but can't compose music.
Antheil piano jazz sonata. Я болен ПГМ.
Re[2]: Как перехватить запуск процесса ?
От:
Аноним
Дата:
13.08.02 13:24
Оценка:
Здравствуйте Добрый чэчэн Ибрагим, Вы писали:
ДЧИ>Здравствуйте Ales, Вы писали:
A>>Можно конечно и через хуки используя типа SetWindowsHookEx (WH_SHELL ... ) но они могут для моей задачи перехватывать создание окна например. А вот как перехватить создание процесса? A>>Т.е. Запустил юзер прогу — и я хочу это, юзая API, перехватить что-б узнать что что за прога. :???:
ДЧИ>Можно через реестр — там есть ключ, в котором находится список длл, которые загружаются в процесс.
ДЧИ>Пишешь длл простецкую. ДЧИ>При получении DLL_PROCESS_ATTACH фиксируешь имя файла и все. Таким образом можно промониторить все аппликации.
ДЧИ>Но можно и без реестра. ДЧИ>Пишешь хук любой, нро чтоб глобальный был. Лучше такой, чтою не часто вызывался. ДЧИ>Длл, содержащая глобальный хук зпгружается во все процессы. Но таким образом перехватишь запуск аппликаций, которые имеют очередь сообщений. К консоьным аппликухам хуки не приклеятся.
ДЧИ>Если что, можно АПИ перехватывать.
Мда-а-а, через хуки у меня все работает, НО (!) если прога нежелательная то я хочу остановить ее запуск. Убивать процесс можно, но есть вероятность появления мусора и т.д. и т.п.
Я-то хотел это зделать еще ДО запуска реального программы (типа как монитор касперского чтоли).
Чель задания — запрет запускать игры и прочую лабуду на рабочих компах.
Кто-то начнет тут говорить про типа юзай политики в W2K но они не катят, поскольку там дыр как грязи и юзеры (простые !!! ) их у меня их обходят на раз-два. Поэтому все запускаемые файлы проверяется по CRC16. Но мне дали еще пару недель до доводки проекта, хотя он уже и работает.
Здравствуйте Аноним, Вы писали:
А>Мда-а-а, через хуки у меня все работает, НО (!) если прога нежелательная то я хочу остановить ее запуск. Убивать процесс можно, но есть вероятность появления мусора и т.д. и т.п. А>Я-то хотел это зделать еще ДО запуска реального программы (типа как монитор касперского чтоли). А>Чель задания — запрет запускать игры и прочую лабуду на рабочих компах. А>Кто-то начнет тут говорить про типа юзай политики в W2K но они не катят, поскольку там дыр как грязи и юзеры (простые !!! ) их у меня их обходят на раз-два. Поэтому все запускаемые файлы проверяется по CRC16. Но мне дали еще пару недель до доводки проекта, хотя он уже и работает.
Что значит мусор ? Мусор появиться может только в том случае, если апппликация работала до запуска глобального хука. Да и то это фигня. Память освободится всеравно. А если в момент запуска аппликации ты ее прибьешь из Dll своей, то все путем будет. К этому моменту ничего еще не успеет инициализироваться.
Игры и прочую дрянь можно прибивать как угодно. Аккуратно надо завершать студии, серверы и тд из за возможной потери данных.
Определяешь процесс и шлешь окну сообщение какое. И тд.
Прибить можно аккуратненько и в лог кинуть чтонить.
А зачем при запуске прибивать ?
Лучше сканировать по таймеру процессы и ставить людей перед фактом в виде скриншотов.
И вести лог вредных запусков.
Хук, кстати, не внелряется в консольную прогу. Вдруг челы будут ADOM запускать ? Он то консольный
Re[4]: Как перехватить запуск процесса ?
От:
Аноним
Дата:
14.08.02 05:22
Оценка:
Здравствуйте Добрый чэчэн Ибрагим, Вы писали:
ДЧИ>Здравствуйте Аноним, Вы писали:
А>>Мда-а-а, через хуки у меня все работает, НО (!) если прога нежелательная то я хочу остановить ее запуск. Убивать процесс можно, но есть вероятность появления мусора и т.д. и т.п. А>>Я-то хотел это зделать еще ДО запуска реального программы (типа как монитор касперского чтоли).
ДЧИ>Что значит мусор ? Мусор появиться может только в том случае, если апппликация работала до запуска глобального хука. Да и то это фигня. Память освободится всеравно. А если в момент запуска аппликации ты ее прибьешь из Dll своей, то все путем будет. К этому моменту ничего еще не успеет инициализироваться.
Гм, а что тогда ловить ДО запуска инициализации ? Я пока ловлю создание окон. Cразу сообщение ???
Однако, пойду эксперименты ставить.
ДЧИ>Игры и прочую дрянь можно прибивать как угодно. Аккуратно надо завершать студии, серверы и тд из за возможной потери данных.
Дык это понятно. Так и делаю, просто опасаюсь утечки, повисших ресурсов или еще чего.
Тут я еще не силен. :(
ДЧИ>А зачем при запуске прибивать ? ДЧИ>Лучше сканировать по таймеру процессы и ставить людей перед фактом в виде скриншотов. ДЧИ>И вести лог вредных запусков.
Хм, побочный эффект от программы мог быть запрещение запуска троянов например, или вирусов.
ДЧИ>Хук, кстати, не внелряется в консольную прогу. Вдруг челы будут ADOM запускать ? Он то консольный :)))
Это я знаю, — вот это и проблема небольшая у меня. IMHO это конечно можно искать перебором процессов которые к консольным относятся. Но если чел запускает ADOM, то я и исщу метод определять прогу до ее запуска. В то-то и перец весь. Должен-же быть метод, но боюсь что он не документирован просто, типа евента EVENT_RUN_PROGRAM или сообщения броадкастового всем, что вот в полку процессов прибыло. :shuffle: Должна-ж система сама об этом знать :)
Мало того, если например в политиках домена NT, разрешить выполнять только некие проги, то как она узнает их имя ?
Значит способ есть !!! ;) Вот эго я и ишшу собственно. :crash:
Здравствуйте Добрый чэчэн Ибрагим, Вы писали:
ДЧИ>Здравствуйте Аноним, Вы писали:
ДЧИ>Хук, кстати, не внелряется в консольную прогу. Вдруг челы будут ADOM запускать ? Он то консольный
Это смотря где, еси в в2К/нт то прекрасно внедряется в любой процесс, под 98 отхват появления консоли делается по появлению ГУИшного окна процесса винолдап, правда сама консоль отдельный вопрос...
Ув. Аноним пробуйте перехват АПИ CreateProcess и все тут )))
Compiler can be as trained AI but can't compose music.
Antheil piano jazz sonata. Я болен ПГМ.
Здравствуйте Аноним, Вы писали:
А>>>Мда-а-а, через хуки у меня все работает, НО (!) если прога нежелательная то я хочу остановить ее запуск. Убивать процесс можно, но есть вероятность появления мусора и т.д. и т.п. А>>>Я-то хотел это зделать еще ДО запуска реального программы (типа как монитор касперского чтоли).
ДЧИ>>Что значит мусор ? Мусор появиться может только в том случае, если апппликация работала до запуска глобального хука. Да и то это фигня. Память освободится всеравно. А если в момент запуска аппликации ты ее прибьешь из Dll своей, то все путем будет. К этому моменту ничего еще не успеет инициализироваться. А>Гм, а что тогда ловить ДО запуска инициализации ? Я пока ловлю создание окон. Cразу сообщение ??? А>Однако, пойду эксперименты ставить.
ДЧИ>>Игры и прочую дрянь можно прибивать как угодно. Аккуратно надо завершать студии, серверы и тд из за возможной потери данных.
А>Дык это понятно. Так и делаю, просто опасаюсь утечки, повисших ресурсов или еще чего. А>Тут я еще не силен.
Утечек никаких не будет. Память освободится вместе с процессом. Прога получит управление после того, как загружатся все дллки. Поэтому здесь можно смело прибивать процесс. Если сделаешь чз реестр — будут и консольные прибиваться. Ключ реестра, в котором прописаны длл для обязательной загрузки в процессы :
HKLM\Software\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_Dlls — для 9х не работает.
ДЧИ>>А зачем при запуске прибивать ? ДЧИ>>Лучше сканировать по таймеру процессы и ставить людей перед фактом в виде скриншотов. ДЧИ>>И вести лог вредных запусков. А>Хм, побочный эффект от программы мог быть запрещение запуска троянов например, или вирусов.
ДЧИ>>Хук, кстати, не внелряется в консольную прогу. Вдруг челы будут ADOM запускать ? Он то консольный
А>Это я знаю, — вот это и проблема небольшая у меня. IMHO это конечно можно искать перебором процессов которые к консольным относятся. Но если чел запускает ADOM, то я и исщу метод определять прогу до ее запуска. В то-то и перец весь. Должен-же быть метод, но боюсь что он не документирован просто, типа евента EVENT_RUN_PROGRAM или сообщения броадкастового всем, что вот в полку процессов прибыло. Должна-ж система сама об этом знать
Хуки глобальные сильно загружают всю систему. Поэтому лучше их избегать. Лучше садиться на таймер и сканировать процессы.
Здравствуйте ol-lv, Вы писали:
OL>Ув. Аноним пробуйте перехват АПИ CreateProcess и все тут )))
Да не, это я тут мысли толкаю.
По поводу перехвата CreateProcess — чего-т не пойму как его перезватывать. ULR плиз в студию.
Научился перехватывать только создание окна через WH_SHELL( код HSHELL_WINDOWCREATED) и WH_CBT( код HCBT_CREATEWND).