Перейти к содержанию

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


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

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

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

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

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

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

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

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



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

 

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

3 часа назад, mrPTyshnik сказал:

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

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

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

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

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

×
×
  • Создать...

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

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