Перейти к содержанию
На нашем форуме вы можете получить приватный чит для игры Euro Truck Simulator 2. Подробности по ссылке ниже:
Тема с читом на Euro Truck Simulator 2
Авторизация  
Senpai

Теоретический вопрос про хук сплайсингом

Рекомендуемые сообщения

Возник вопрос, если в момент снятия хука и выгрузке длл будет выполняться код "трамплина" или функции из длл, идущей перед "трамплином", это ведь может вызвать некоторые проблемы?
Если да, то как можно их избежать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если ты при вызове хука каждый раз патчишь функцию, то проблемы могут возникнуть даже без выгрузки, а например когда 2 и более потока вызывают хукнутую функцию 

Но если ты устанавливаешь хук так:
1) Определить длины начальных инструкций в целевой функции через дизассемблер длин

2) Выделить буфер под трамплин и настроить его: скопировать байты из проанализированной функции в конец буфера с трамплином. Настроить адрес функции myDllFunc и рассчитать адрес прыжка в тело оригинальной функции с учетом скопированных байтов.
3) Заменить скопированные байты в оригинальной функции для прыжка на трамплин

тело трамплина:

trampoline:
call myDllFunc();
orig_intructions
jmp original_func_addr+sizeof(orig_intructions)



То проблем быть не должно

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
3 часа назад, mrPTyshnik сказал:

То проблем быть не должно

Всё же проблемы были, пришлось придумывать костыль с остановкой потока и (get/set)threadcontext, но теперь хук снимается нормально

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну, вообще, на самом деле, надо предусматривать условие завершения потока. Если у тебя в потоке крутится бесконечный цикл, то лучше сделать его не бесконечным, а пока выставлена какая-то переменная, например.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

×

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.