Вопрос Anti-hook?

Забаненный
Статус
Оффлайн
Регистрация
9 Дек 2022
Сообщения
3
Реакции[?]
0
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Относительно недавно начал очень увлекаться антидебаг трюками, подскажите насчёт anti-hook, как это в общем должно работать?
 
✊Rot Front✊
Пользователь
Статус
Оффлайн
Регистрация
2 Июл 2020
Сообщения
130
Реакции[?]
256
Поинты[?]
84K
Относительно недавно начал очень увлекаться антидебаг трюками, подскажите насчёт anti-hook, как это в общем должно работать?
Поскольку вы сказали про anti-debug и anti-hook,то отвечу про него(я понял, что вы подразумевали bp т.к это подходит под хукинг частично):
Во-первых, заденем тему bp в дебаггере т.к без него дебаггер бесполезен.
Обычно используют дебаггеры 2 вида bp:
1)патчинг байтов и
Пожалуйста, авторизуйтесь для просмотра ссылки.
в DEBUG_EVENT.u.Exception.ExceptionRecord.ExceptionCode
2)
Пожалуйста, авторизуйтесь для просмотра ссылки.
(Dr регистры потока).

Итак,вы ,скорее всего, хотите противодействовать им и вот решения, которые я знаю:
1)Для предотвращения обычных bp можете использовать просто CRC. Да, его могут найти и обезвредить, если он 1,
но если их несколько и они считают CRC другой секции(так делает VMProtect,например),то вам придётся обойти их все
(всё можно обойти и не пытайтесь втирать эту мысль 0x1337 раз).
2) Вы можете сломать NtProtectVirtualMemory и заставить его завершаться неудачно.
Для UM решения вы можете использовать SEC_NO_CHANGE(бесполезно, если секция имеет права Write,что логично).
Вам придётся сделать unmap и map кода с использованием этого флага (Zw/NtMapViewOfSection с SEC_NO_CHANGE ).
Не забывайте, что их могут ремапнуть, чтобы удалить этот флаг.
В ядре NtProtectVirtualMemory -> MmProtectVirtualMemory -> MiCheckSecuredVad и заставить вернуть MiComparePteProtections STATUS_INVALID_PAGE_PROTECTION(windows 10)
Так же можно ломать NtWriteVirtualMemory,но я не знаю элегантного способа, который можно порекомендовать.
3)Для противодействия HWBP вы можете просто проверять Dr регистры у потока/обнулять их(NtContinue/NtSetContextThread/NtGetContextThread/KiUserExceptionDispatcher).
В ядре вы можете проверить просто DebugActive PETHREAD->Tcb.Header.DebugActive(смотрите KiRecordDr7/PspSetContext)
P.S если я вас понял слегка неправильно(например, вы подразумевали хуки anti-anti-debug tool или обход определённых хуков), то напишите, что вы хотели узнать и подразумевали.
 
Последнее редактирование:
Забаненный
Статус
Оффлайн
Регистрация
9 Дек 2022
Сообщения
3
Реакции[?]
0
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Поскольку вы сказали про anti-debug и anti-hook,то отвечу про него(я понял, что вы подразумевали bp т.к это подходит под хукинг частично):
Во-первых, заденем тему bp в дебаггере т.к без него дебаггер бесполезен.
Обычно используют дебаггеры 2 вида bp:
1)патчинг байтов и
Пожалуйста, авторизуйтесь для просмотра ссылки.
в DEBUG_EVENT.u.Exception.ExceptionRecord.ExceptionCode
2)
Пожалуйста, авторизуйтесь для просмотра ссылки.
(Dr регистры потока).

Итак,вы ,скорее всего, хотите противодействовать им и вот решения, которые я знаю:
1)Для предотвращения обычных bp можете использовать просто CRC. Да, его могут найти и обезвредить, если он 1,
но если их несколько и они считают CRC другой секции(так делает VMProtect,например),то вам придётся обойти их все
(всё можно обойти и не пытайтесь втирать эту мысль 0x1337 раз).
2) Вы можете сломать NtProtectVirtualMemory и заставить его завершаться неудачно.
Для UM решения вы можете использовать SEC_NO_CHANGE(бесполезно, если секция имеет права Write,что логично).
Вам придётся сделать unmap и map кода с использованием этого флага (Zw/NtMapViewOfSection с SEC_NO_CHANGE ).
Не забывайте, что их могут ремапнуть, чтобы удалить этот флаг.
В ядре NtProtectVirtualMemory -> MmProtectVirtualMemory -> MiCheckSecuredVad и заставить вернуть MiComparePteProtections STATUS_INVALID_PAGE_PROTECTION(windows 10)
Так же можно ломать NtWriteVirtualMemory,но я не знаю элегантного способа, который можно порекомендовать.
3)Для противодействия HWBP вы можете просто проверять Dr регистры у потока/обнулять их(NtContinue/NtSetContextThread/NtGetContextThread/KiUserExceptionDispatcher).
В ядре вы можете проверить просто DebugActive PETHREAD->Header.DebugActive(смотрите KiRecordDr7/PspSetContext)
P.S если я вас понял слегка неправильно(например, вы подразумевали хуки anti-anti-debug tool или обход определённых хуков), то напишите, что вы хотели узнать и подразумевали.
Большое спасибо!
 
Сверху Снизу