Вопрос Аппаратный брейкпоинт

Новичок
Статус
Оффлайн
Регистрация
23 Авг 2023
Сообщения
1
Реакции[?]
0
Поинты[?]
0
Прочитал, что при обращении к регистрам DrX (установка hardware breakpoint), процессор проверяет откуда поступил запрос на изменение этих регистров и если не от ядра (драйвера) - процессор не даёт изменить регистры (или сразу их обнуляет, тут тоже вопрос). Так же прочитал, что можно в реальном режиме попробовать ставить регистры, но тоже сомневаюсь. Цель - считать регистр RAX и RCX, когда вызывается инструкция по адресу, который находится через сигу (поиск уже реализован как часы).

Есть ли простой способ решения? Возможно ли изменить CS регистр для маскировки под ядро или упор в ту же проблему доступа? Насколько сложно написать драйвер? Я бы хотел разобраться, если можете скиньте статей.
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
783
Реакции[?]
331
Поинты[?]
63K
Прочитал, что при обращении к регистрам DrX (установка hardware breakpoint), процессор проверяет откуда поступил запрос на изменение этих регистров и если не от ядра (драйвера) - процессор не даёт изменить регистры (или сразу их обнуляет, тут тоже вопрос). Так же прочитал, что можно в реальном режиме попробовать ставить регистры, но тоже сомневаюсь. Цель - считать регистр RAX и RCX, когда вызывается инструкция по адресу, который находится через сигу (поиск уже реализован как часы).

Есть ли простой способ решения? Возможно ли изменить CS регистр для маскировки под ядро или упор в ту же проблему доступа? Насколько сложно написать драйвер? Я бы хотел разобраться, если можете скиньте статей.
попроси ядро за тебя поставить эти дебаг регистры(через syscall).
(Nt)SetThreadContext тебе нужен
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
(\ /) _ ($ __ $ ) _ (\ /)
Пользователь
Статус
Оффлайн
Регистрация
22 Окт 2021
Сообщения
368
Реакции[?]
92
Поинты[?]
24K
Прочитал, что при обращении к регистрам DrX (установка hardware breakpoint), процессор проверяет откуда поступил запрос на изменение этих регистров и если не от ядра (драйвера) - процессор не даёт изменить регистры (или сразу их обнуляет, тут тоже вопрос). Так же прочитал, что можно в реальном режиме попробовать ставить регистры, но тоже сомневаюсь. Цель - считать регистр RAX и RCX, когда вызывается инструкция по адресу, который находится через сигу (поиск уже реализован как часы).

Есть ли простой способ решения? Возможно ли изменить CS регистр для маскировки под ядро или упор в ту же проблему доступа? Насколько сложно написать драйвер? Я бы хотел разобраться, если можете скиньте статей.
Советую почитать - https://vk.com/@haccking1-skrytyi-potencial-registrov-otladki-dr0-dr7
Ты можешь написать драйвер используя dr0, чтобы ставить брикпоинты и считывать регистры какие тебе нужны - RAX, RCX. Нашел на гитхабе что-то похожее, но для x86:
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
Сверху Снизу