в статье "Перехват API функций в Windows NT (часть 1). Основы перехвата." расписаны методы установки Hook на NativeAPI ф-ции. По образу ProcHide (http://www.wasm.ru/pub/21/files/prochide.rar) у меня получилось поставить Hook на другую ф-цию. Вопрос в следующем: как из одной dll поставить несколько hook ? Как бы писать под каждую ф-цию свою dll не правильно.
Ну... даже не знаю что и ответить.. По порядку. 1. Не надо использовать этот метод (из первой части) - он слишком топорный и мало применимый (постоянно снятие/установка перехвата - ведет к проблемам при многопоточности и пр.). 2. Вы бы разобрались, что ли, в коде - то, ничто не мешает устанавливать сразу несколько перехватов из одной dll. Просто пишем New- функции для каждой их перехватываемых и делаем перехват столько раз сколько нужно.
Спасибо за ответ, но все же. В ф-ции procedure SetHook(); var Bytes: dword; begin PtrZwq := GetProcAddress(GetModuleHandle('ntdll.dll'), ZwCreateKey); ReadProcessMemory(INVALID_HANDLE_VALUE, PtrZwq, @OldZwq, SizeOf(OldCode), Bytes); JmpZwq.PuhsOp := $68; JmpZwq.PushArg := @NewZwCreateKey; JmpZwq.RetOp := $C3; WriteProcessMemory(INVALID_HANDLE_VALUE, PtrZwq, @JmpZwq, SizeOf(far_jmp), Bytes); end; Явно указывается Hook на какую ф-wb. ставиться, при попытке сделать procedure SetHook(func: PAnsiChar); и дальше в зависимости от func ставить hook на разные ф-ции SetGlobalHook(); SetHook('ZwCreateKey'); SetGlobalHook(); SetHook('ZwDeleteKey'); Система перегрузилась
Все, вроде бы разобрался... Надо было сохранять значения для каждой из перехватываемых ф-ций JmpZwq: far_jmp; OldZwq: OldCode; PtrZwq: pointer;