как без перехвата функции получить уведомление о ее запуске?
Антивирус Касперского 6.0 при вызове функции SetWindowsHookEx
сообщает о потенциально-опасном ПО типа loader, которое пытается всюду
внедрить библиотеку.
При этом он не перехватывает функцию SetWindowsHookEx.
Без Касперского
@SetWindowsHookEx = $00325120 (обычный)
@SetWindowsHookEx1 = $77D45006 (через LoadLibrary)
когда Касперского только что запустили и он матерится о том что базы
устарели итп, но еще не матерится на запуск хука
@SetWindowsHookEx = $00325120 (обычный)
@SetWindowsHookEx1= $77D45006 (через LoadLibrary)
Когда уже полностью загружен и матерится на все
@SetWindowsHookEx = $00325120
@SetWindowsHookEx1= $77D45006
Адрес функции не зависит от того запущен касперский или нет. Но зато он
разный для обычной и загруженной через LoadLibrary.
Почему и как такое происходит? Как же антивирь определяет что функция
запускается?
ну вообще-то касперыч изменяет таблицу Sdt, где он выставляет адресса своих функций. они при вызове сообщают р3 монитору о том что кто-то их вызвал, касперский об этом говорит и спрашивает что делать. если ответ положительный, то вызывается оригинальная функция, которая была запсиана в Sdt до выставления хуков.
пока немного не догнал.
>П.С.2 - а откуда ты взял эти адреса?
Вообщем стандартный пример установки хука (брал из фака forum.sources.ru раздел Делфи). Прога, вызывающая функцию sethook() - ничего интересного.
А вот в dll-ке при вызове setwindowhookex я поставил вывод в файл значения
integer(@setwindowhookex) и то что выдает GetProcAddress(Loadlibrary())
Эти значения я и выложил в 1 посте. Это производится как при НЕ ЗАПУЩЕННОМ касперском (когда ничего подменено не должно быть) так и при запущенном.
Если бы каспер хукал функцию, адреса "до" и "после" были бы разными.