Цитата:
Сообщение от DaVilka
Нужно поставить хук на одну функцию, и все бы ничего, все пашет и работает, но есть одна проблема, гвард на нее тоже ставит хук, и все это дело палится. В общем дело обстоит так, по адресу 0x12345678 я сталю джамп на свою функцию, и перехват осуществляется но без возвращения управления, по этому же адресу ставит хук и гвард, после моего хука хук гварда не возобновляется. И при попытке вернуть управление меня икает. Как поставить джамп на мою функцию, так что бы не спалил гвард?
|
речь же о хуке winapi? почему без отсутствия возвращения управления? ты уверен, что ГГ тебе это простит? ведь по сути ты убиваешь/подвешивает его поток.
Далее, попробуй как я писал в
статье про гг. Ты можешь попробовать метод, который юзает сам ГГ - сначала хукнуть VirtualProtect, убрать доступ на запись в winapi-шные регионы и фильтровать в этом хуке попытки сменить доступ к этим самым регионам. Только обрати внимание, что ГГ может будет ругаться на то, что не может сменить доступ к памяти, поэтому лучше бы имитировать успешность всех операций - и смену доступа, и успешность записи (если, конечно, она идёт через WriteProcessMemory/NtWriteVirtualMemory, а не напрямую). Чёто пока писал, понял, что это не хилый такой гемор )
Давайте варианты проще - при установке сплайс-хука в любом случае будет мост. Место, в котором должны выполниться затёртые инструкции. Попробуй туда впихнуть свой jmp. Не пробовал, но по логике должно работать.
Плюс, можно влепить jmp после их jmp (прокатит со всем кроме почти всех native api). Но тут надо внимательно следить за состоянием регистров, а то будут вылеты. Так я делал, на сколько я помню.