Нужно поставить хук на одну функцию, и все бы ничего, все пашет и работает, но есть одна проблема, гвард на нее тоже ставит хук, и все это дело палится. В общем дело обстоит так, по адресу 0x12345678 я сталю джамп на свою функцию, и перехват осуществляется но без возвращения управления, по этому же адресу ставит хук и гвард, после моего хука хук гварда не возобновляется. И при попытке вернуть управление меня икает. Как поставить джамп на мою функцию, так что бы не спалил гвард?
Нужно поставить хук на одну функцию, и все бы ничего, все пашет и работает, но есть одна проблема, гвард на нее тоже ставит хук, и все это дело палится. В общем дело обстоит так, по адресу 0x12345678 я сталю джамп на свою функцию, и перехват осуществляется но без возвращения управления, по этому же адресу ставит хук и гвард, после моего хука хук гварда не возобновляется. И при попытке вернуть управление меня икает. Как поставить джамп на мою функцию, так что бы не спалил гвард?
речь же о хуке winapi? почему без отсутствия возвращения управления? ты уверен, что ГГ тебе это простит? ведь по сути ты убиваешь/подвешивает его поток.
Далее, попробуй как я писал в статье про гг. Ты можешь попробовать метод, который юзает сам ГГ - сначала хукнуть VirtualProtect, убрать доступ на запись в winapi-шные регионы и фильтровать в этом хуке попытки сменить доступ к этим самым регионам. Только обрати внимание, что ГГ может будет ругаться на то, что не может сменить доступ к памяти, поэтому лучше бы имитировать успешность всех операций - и смену доступа, и успешность записи (если, конечно, она идёт через WriteProcessMemory/NtWriteVirtualMemory, а не напрямую). Чёто пока писал, понял, что это не хилый такой гемор )
Давайте варианты проще - при установке сплайс-хука в любом случае будет мост. Место, в котором должны выполниться затёртые инструкции. Попробуй туда впихнуть свой jmp. Не пробовал, но по логике должно работать.
Плюс, можно влепить jmp после их jmp (прокатит со всем кроме почти всех native api). Но тут надо внимательно следить за состоянием регистров, а то будут вылеты. Так я делал, на сколько я помню.
Я не оказываю услуги гаранта!
База данных кидал: blacklist.rf-cheats.ru
Обязательно проверяйте человека через чёрный список прежде чем совершать с ним сделку.
речь же о хуке winapi? почему без отсутствия возвращения управления? ты уверен, что ГГ тебе это простит? ведь по сути ты убиваешь/подвешивает его поток.
Далее, попробуй как я писал в статье про гг. Ты можешь попробовать метод, который юзает сам ГГ - сначала хукнуть VirtualProtect, убрать доступ на запись в winapi-шные регионы и фильтровать в этом хуке попытки сменить доступ к этим самым регионам. Только обрати внимание, что ГГ может будет ругаться на то, что не может сменить доступ к памяти, поэтому лучше бы имитировать успешность всех операций - и смену доступа, и успешность записи (если, конечно, она идёт через WriteProcessMemory/NtWriteVirtualMemory, а не напрямую). Чёто пока писал, понял, что это не хилый такой гемор )
Давайте варианты проще - при установке сплайс-хука в любом случае будет мост. Место, в котором должны выполниться затёртые инструкции. Попробуй туда впихнуть свой jmp. Не пробовал, но по логике должно работать.
Плюс, можно влепить jmp после их jmp (прокатит со всем кроме почти всех native api). Но тут надо внимательно следить за состоянием регистров, а то будут вылеты. Так я делал, на сколько я помню.
функция не апишная + виртуальная и не экспортируемая, сам гг больше не хочет ставить хук по верх моего, да и хук ставится нормально, но как происходит хук, я на нужное место ставлю джамп на свою функцию, делаю в моей функции то что нужно, и возвращаю управление, хук я могу ставить на эту функцию в 3 или 4 разных места, все хорошо, но при возвращении управления палево, ставлю хук за джампом гварда - хук сработал, но при возвращении управления - краш
функция не апишная + виртуальная и не экспортируемая, сам гг больше не хочет ставить хук по верх моего, да и хук ставится нормально, но как происходит хук, я на нужное место ставлю джамп на свою функцию, делаю в моей функции то что нужно, и возвращаю управление, хук я могу ставить на эту функцию в 3 или 4 разных места, все хорошо, но при возвращении управления палево, ставлю хук за джампом гварда - хук сработал, но при возвращении управления - краш
я не пойму, что ты пишешь.. то ты не возвращаешь управление, то гг то ли ставит хук, то ли нет - не пойму. Нафига ГГ ставить хук в не экспортируемой функции? Сорри, такого не видел. Но если такое и есть, то мои методы точно также должны работать - суть то не меняется. Если клиент падает, то это 99% проблема твоего хука - рассогласование между соглашением о вызове и/или как следствие порча стека/регистров. Проще всего сделай _naked функцию и проследи, чтобы всё сохранялось и восстанавливалось.
Я не оказываю услуги гаранта!
База данных кидал: blacklist.rf-cheats.ru
Обязательно проверяйте человека через чёрный список прежде чем совершать с ним сделку.
я не пойму, что ты пишешь.. то ты не возвращаешь управление, то гг то ли ставит хук, то ли нет - не пойму. Нафига ГГ ставить хук в не экспортируемой функции? Сорри, такого не видел. Но если такое и есть, то мои методы точно также должны работать - суть то не меняется. Если клиент падает, то это 99% проблема твоего хука - рассогласование между соглашением о вызове и/или как следствие порча стека/регистров. Проще всего сделай _naked функцию и проследи, чтобы всё сохранялось и восстанавливалось.
под "без возвращения управления" я имел ввиду, что хук работает, но возвращение управления не работает, либо гг палит, либо крит. Гг ставит хук один раз, если я поверх его хука ставлю свой хук, то гг больше на нее не ставит хук. Через эту функцию идет трафик, гг хукает ее и в себе шифрует его, вот зачем он хукает ее.
под "без возвращения управления" я имел ввиду, что хук работает, но возвращение управления не работает, либо гг палит, либо крит. Гг ставит хук один раз, если я поверх его хука ставлю свой хук, то гг больше на нее не ставит хук. Через эту функцию идет трафик, гг хукает ее и в себе шифрует его, вот зачем он хукает ее.
под "без возвращения управления" я имел ввиду, что хук работает, но возвращение управления не работает, либо гг палит, либо крит. Гг ставит хук один раз, если я поверх его хука ставлю свой хук, то гг больше на нее не ставит хук. Через эту функцию идет трафик, гг хукает ее и в себе шифрует его, вот зачем он хукает ее.
а каким образом ты ставишь хуки вообще? и каким образом ты ставишь хуки на функцию на которую уже поставил хуйки гейгвард.
я не пойму, что ты пишешь.. то ты не возвращаешь управление, то гг то ли ставит хук, то ли нет - не пойму. Нафига ГГ ставить хук в не экспортируемой функции? Сорри, такого не видел. Но если такое и есть, то мои методы точно также должны работать - суть то не меняется. Если клиент падает, то это 99% проблема твоего хука - рассогласование между соглашением о вызове и/или как следствие порча стека/регистров. Проще всего сделай _naked функцию и проследи, чтобы всё сохранялось и восстанавливалось.
а вот смотри, за джампом гварда стоит сразу вызов другой функции, если я на ее место ставлю свой хук, то пакеты перехватываются, но получается что я затираю ту функцию, и при возвращении управления получаю краш.
Как тут можно сманеврировать? Как в таком случае можно корректно вернуть управление?