Установка hardware breakpoint

Установка hardware breakpoint

Точки останова используются для контроля выполнения программ и, естественно, для их остановки в нужный момент. Есть два типа брейк‑пой­нтов (точек останова): программные точки останова и аппаратные точки останова. В статье поговорим про установку hardware breakpoint.

Еще по теме: Как хакеры обходят проверку AMSI

Hardware breakpoint (хардверный брейкпоинт) — это специальный механизм, встроенный в аппаратное обеспечение компьютера или микроконтроллера, который позволяет автоматически приостанавливать выполнение программы, когда определенное условие или адрес в памяти программы достигнуты.

Установка hardware breakpoint

Ус­тановить hardware breakpoint (HWBP) про­ще прос­того — дос­таточ­но лишь занес­ти в нуж­ный регистр адрес. Для боль­шей абс­трак­ции я написал фун­кцию SetHWBP(), куда нуж­но передать адрес, по которо­му сле­дует уста­новить точ­ку оста­нова, булево зна­чение ( TRUE — уста­новить, FALSE — снять), а так­же номер регис­тра.

Сог­ласно докумен­тации, адрес может быть ука­зан в Dr0, Dr1 и так далее, но у меня почему‑то работа­ло толь­ко с Dr0.

Для получе­ния зна­чения регис­тров текуще­го потока исполь­зует­ся фун­кция GetThreadContext(), а для уста­нов­ки изме­нен­ных зна­чений исполь­зует­ся SetThreadContext().

При­чем, если мы хотим обра­баты­вать толь­ко исклю­чения, сра­ботав­шие из‑за hardware breakpoint, в нашей фун­кции — обра­бот­чике сле­дует пре­дус­мотреть про­вер­ку на наличие в струк­туре EXCEPTION_POINTERS эле­мен­та ExceptionCode, рав­ного STATUS_SINGLE_STEP. Это зна­чение сви­детель­ству­ет о том, что воз­никло событие, ког­да одна инс­трук­ция завер­шает­ся и сле­дующая инс­трук­ция готова к выпол­нению.

Ис­поль­зовать в сво­ей прог­рамме этот код про­ще прос­того.

Вот при­мер.

Здесь был уста­нов­лен hardware breakpoint по адре­су фун­кции printf(). Как толь­ко сис­тема дош­ла до вызова этой фун­кции, сра­бота­ло исклю­чение, выз­вался обра­бот­чик исклю­чений, вывел содер­жимое регис­тров, а затем вер­нул управле­ние на фун­кцию, что при­вело к появ­лению на кон­соли Hello, world!.

Сра­ботав­ший hardware breakpoint

Итак, мы научи­лись ста­вить hardware breakpoint. О том, как их исполь­зовать для пен­тестер­ских целей, я расскажу в статье «Обход AMSI».

ПОЛЕЗНЫЕ ССЫЛКИ:

Дима (Kozhuh)

Эксперт в кибербезопасности. Работал в ведущих компаниях занимающихся аналитикой компьютерных угроз. Анонсы новых статей в Телеграме.

Добавить комментарий