![]() |
eXeL@B —› Вопросы новичков —› Кто поставил хук |
Посл.ответ | Сообщение |
|
Создано: 08 января 2018 10:02 · Поправил: Ate · Личное сообщение · #1 Здравствуйте, с прошедшими! Подскажите, есть достаточно инструментов чтобы посмотреть установленные в процессах хуки, а есть ли инструменты, которые могут определять кто данный хук установил? Я пробовал определить сам, действуя в лоб - если это вызов или прыжок, по адресу назначения через GetModuleHandleEx + GetModuleFileName, чтобы понять в какой модуль осуществляется переход, но то ли написал кривовато, то ли это вообще не рабочий случай. В общем, подскажите инструменты, или пути самостоятельной реализации для такого случая. ![]() |
|
Создано: 08 января 2018 10:50 · Поправил: 0xC3 · Личное сообщение · #2 |
|
Создано: 08 января 2018 11:34 · Поправил: Ate · Личное сообщение · #3 Ate пишет: есть достаточно инструментов чтобы посмотреть установленные в процессах хуки К которым относится все вышеперечисленное, никто из них не имеет искомый функционал. В принципе можно понять его отсутствие, определить "источник" хука постфактум вообще нерешаемая задача, но если хук явный и указывает вместо штатного указателя переход на один из загруженных модулей, то почему бы эту информацию дополнительно не указать. Мне как раз это нужно, в уже реализованном виде, или в виде концепта, как это программно реализовать. ![]() |
|
Создано: 08 января 2018 11:56 · Личное сообщение · #4 |
|
Создано: 08 января 2018 20:45 · Личное сообщение · #5 |
|
Создано: 09 января 2018 02:08 · Личное сообщение · #6 Vamit пишет: А если хук внутри одной либы (даже функции) тогда на выходе будет имя собственного модуля, в чем проблема отфильтровать эти частные случаи? Ate пишет: определить "источник" хука постфактум вообще нерешаемая задача, но если ссылка на модуль в адресном пространстве и этот модуль != наш модуль - пытаемся получить имя модуля. Это все что я хотел бы получить (реализовать). Разве невыполнимо? ![]() |
|
Создано: 09 января 2018 03:06 · Поправил: difexacaw · Личное сообщение · #7 Ate Не хук", а патч во первых. Хуки это один из оконных механизмов Так как код перетёрт может быть как угодно, то что бы не покрывать все возможные варианты(да и в статике такое врядле возможно) можно сделать так. Находим изменённый код, инструкцию в буфер, адрес её в таблицу, а вместо инструкции пишем Int3. Когда ловушка сработает начинаем трассировать до выхода из текущей секции модуля. Кстате есчо придётся рекурсивно цепочку обработчиков ловушек трассировать, так как патч может быть через Int3 ![]() Добавлено спустя 10 минут > GetModuleFileName, чтобы понять в какой модуль осуществляется переход Обычно переход выполняется в промежуточный буфер. Так что нужно всю трассу снять, что бы попытаться найти передачу управления в модуль, который как то связан с обработкой патча. Хотя модуля может не быть вовсе. ----- vx ![]() |
![]() |
eXeL@B —› Вопросы новичков —› Кто поставил хук |