![]() |
Сделано для тех кто не любит таскать за собой целые библиотеки хуков.
Благодаря возможности указывать размер пролога, можно хукать как WIN API так и пользовательские функции. Присутствует трамплин. Цитата:
C++: Код:
DWORD TrampolineАвтор: ЯedЯuM |
А для чего нужен трамплин?
|
Цитата:
|
А для чего нужен пролог?
|
Цитата:
|
Цитата:
Само понятие на сколько знаю пришло из ассемблера. Просто если поставить хук, на прыжок требуется 5 байт, в вин апи почти в каждой стоит в самом начале инструкция mov edi, edi и вместе с push ebp, mov ebp, esp код как раз столько же и весит. А в случае с пользовательскими функциями к примеру, после mov ebp, esp может не быть инструкции размером в два байта, в итоге получится что хук затрёт два байта от той инструкции и она разобьется на другой код который будет уже не валид, возврат трамплином в такой код спровоцирует краш, вот почему нужно учитывать размер пролога функции, потому что инструкции push ebp, mov ebp, esp весят только 3 байта чего не достаточно для jmp инструкции прыжка на хук. @Stiopko вот пример с пояснением как знать сколько байт указывать в размер пролога https://forum.antichat.xyz/attachments/27302738/ Нам нужно занопить лишний байт, по этому указываем размер хука в 6 байт и тот байт 08 переставит на 90 (nop - ничего не делающая инструкция). https://forum.antichat.xyz/attachments/27302738/ А вот наглядный пример для чего нужен трамплин а он нужен не только для возврата в оригинальную функцию. https://forum.antichat.xyz/attachments/27302738/ |
| Время: 06:08 |