Железный бряк. Используем хардверные брейк-пойнты в пентестерских целях - «Новости» » Самоучитель CSS
Меню
Наши новости
Учебник CSS

Невозможно отучить людей изучать самые ненужные предметы.

Введение в CSS
Преимущества стилей
Добавления стилей
Типы носителей
Базовый синтаксис
Значения стилевых свойств
Селекторы тегов
Классы
CSS3

Надо знать обо всем понемножку, но все о немногом.

Идентификаторы
Контекстные селекторы
Соседние селекторы
Дочерние селекторы
Селекторы атрибутов
Универсальный селектор
Псевдоклассы
Псевдоэлементы

Кто умеет, тот делает. Кто не умеет, тот учит. Кто не умеет учить - становится деканом. (Т. Мартин)

Группирование
Наследование
Каскадирование
Валидация
Идентификаторы и классы
Написание эффективного кода

Самоучитель CSS

Вёрстка
Изображения
Текст
Цвет
Линии и рамки
Углы
Списки
Ссылки
Дизайны сайтов
Формы
Таблицы
CSS3
HTML5

Новости

Блог для вебмастеров
Новости мира Интернет
Сайтостроение
Ремонт и советы
Все новости

Справочник CSS

Справочник от А до Я
HTML, CSS, JavaScript

Афоризмы

Афоризмы о учёбе
Статьи об афоризмах
Все Афоризмы

Видео Уроки


Наш опрос



Наши новости

      
      
  • 24 марта 2016, 16:20
28-10-2023, 00:00
Железный бряк. Используем хардверные брейк-пойнты в пентестерских целях - «Новости»
Рейтинг:
Категория: Новости

AddVectoredExceptionHandler().
PVOID AddVectoredExceptionHandler(
ULONG FirstHandler,
PVECTORED_EXCEPTION_HANDLER VectoredHandler)


  • FirstHandler — вызывать обра­бот­чик рань­ше всех ранее зарегис­три­рован­ных обра­бот­чиков (зна­чение CALL_FIRST) или пос­ле всех (зна­чение CALL_LAST);


  • VectoredHandler — адрес фун­кции обра­бот­чика. Эта фун­кция дол­жна воз­вра­щать EXCEPTION_CONTINUE_EXECUTION. Обра­бот­чики далее не выпол­няют­ся, обра­бот­ка средс­тва­ми SEH не про­изво­дит­ся, управле­ние переда­ется в ту точ­ку прог­раммы, из которой было выз­вано исклю­чение или EXCEPTION_CONTINUE_SEARCH (выпол­няет­ся сле­дующий век­торный обра­бот­чик, а если таких нет, то раз­ворачи­вает­ся SEH).


За­регис­три­руем обра­бот­чик и про­верим работу VEH. Исклю­чени­ем пока будет стан­дар­тный Null-Pointer Reference. То есть обра­щение к ука­зате­лю, который име­ет зна­чение nullptr.


#include <iostream>
#include <windows.h>
#include <errhandlingapi.h>
LONG WINAPI MyVectoredExceptionHandler(PEXCEPTION_POINTERS exceptionInfo)
{
std::cout << "Exception occurred!" << std::endl;
std::cout << "Exception Code: " << exceptionInfo->ExceptionRecord->ExceptionCode << std::endl;
std::cout << "Exception Address: " << exceptionInfo->ExceptionRecord->ExceptionAddress << std::endl;
return EXCEPTION_CONTINUE_SEARCH;
}
int main()
{
if (AddVectoredExceptionHandler(1, MyVectoredExceptionHandler) == nullptr)
{
std::cout << "Failed to add the exception handler!" << std::endl;
return 1;
}
int* p = nullptr;
*p = 42; // Исключение возникает тут
return 0;
}
Об­работ­ка исклю­чения с помощью VEH

Ви­дим, что обра­бот­чик успешно сра­баты­вает и вызыва­ется, затем воз­вра­щает EXCEPTION_CONTINUE_SEARCH. Это, в свою оче­редь, дер­гает SEH, SEH в прог­рамме нет, поэто­му Visual Studio вклю­чает­ся и выда­ет нам исклю­чение. Если будем воз­вра­щать EXCEPTION_CONTINUE_EXECTION, то получим бес­конеч­ный вызов обра­бот­чика, так как каж­дый раз будет сра­баты­вать стро­ка *p = 42.


Бес­конеч­ная обра­бот­ка исклю­чения

Точ­но такое же исклю­чение будет сра­баты­вать и при хар­двер­ных бря­ках.


На­конец, пос­ледний тип обра­бот­чиков — Unhandled Exception Filter. Он ред­ко ког­да исполь­зует­ся, но изна­чаль­но задумы­вал­ся как обра­бот­чик для исклю­чений, которые вооб­ще ник­то не обра­баты­вает. Ни VEH (если отсутс­тву­ет или вер­нул EXCEPTION_CONTINUE_SEARCH), ни SEH (если тоже отсутс­тву­ет или ука­зано EXCEPTION_CONTINUE_SEARCH). Уста­нав­лива­ются такие обра­бот­чики через фун­кцию SetUnhandledExceptionFilter().


LPTOP_LEVEL_EXCEPTION_FILTER SetUnhandledExceptionFilter(
[in] LPTOP_LEVEL_EXCEPTION_FILTER lpTopLevelExceptionFilter
);

Фун­кция при­нима­ет один‑единс­твен­ный параметр — адрес фун­кции‑обра­бот­чика, которая дол­жна вызывать­ся при воз­никно­вении необ­работан­ного исклю­чения. С помощью UEF так­же ловят­ся исклю­чения, воз­ника­ющие при бря­ках.


Возь­мем прош­лый код и переде­лаем его под UEF.


#include <iostream>
#include <windows.h>
LONG WINAPI MyUnhandledExceptionHandler(PEXCEPTION_POINTERS exceptionInfo)
{
std::cout << "Unhandled exception occurred!" << std::endl;
std::cout << "Exception Code: " << exceptionInfo->ExceptionRecord->ExceptionCode << std::endl;
std::cout << "Exception Address: " << exceptionInfo->ExceptionRecord->ExceptionAddress << std::endl;
return EXCEPTION_CONTINUE_SEARCH;
}
int main()
{
if (SetUnhandledExceptionFilter(MyUnhandledExceptionHandler) == nullptr)
{
std::cout << "Failed to set the unhandled exception filter!" << std::endl;
return 1;
}
int* p = nullptr;
*p = 42;
return 0;
}

Об­рати вни­мание, что если ты запус­тишь этот код в Visual Studio, то она выдаст ошиб­ку до UEF.


Ис­клю­чение от «Сту­дии», а не от UEF

Это свя­зано с тем, что исклю­чение в дан­ном слу­чае обра­баты­вает Visual Studio. Если же файл будет запущен за пре­дела­ми IDE, то мы получим успешный вызов обра­бот­чика.


Вы­зов обра­бот­чика 

Установка hardware breakpoint

Цитирование статьи, картинки - фото скриншот - Rambler News Service.
Иллюстрация к статье - Яндекс. Картинки.
Есть вопросы. Напишите нам.
Общие правила  поведения на сайте.

AddVectoredExceptionHandler(). PVOID AddVectoredExceptionHandler ( ULONG FirstHandler , PVECTORED_EXCEPTION_HANDLER VectoredHandler ) FirstHandler — вызывать обра­бот­чик рань­ше всех ранее зарегис­три­рован­ных обра­бот­чиков (зна­чение CALL_FIRST) или пос­ле всех (зна­чение CALL_LAST); VectoredHandler — адрес фун­кции обра­бот­чика. Эта фун­кция дол­жна воз­вра­щать EXCEPTION_CONTINUE_EXECUTION. Обра­бот­чики далее не выпол­няют­ся, обра­бот­ка средс­тва­ми SEH не про­изво­дит­ся, управле­ние переда­ется в ту точ­ку прог­раммы, из которой было выз­вано исклю­чение или EXCEPTION_CONTINUE_SEARCH (выпол­няет­ся сле­дующий век­торный обра­бот­чик, а если таких нет, то раз­ворачи­вает­ся SEH). За­регис­три­руем обра­бот­чик и про­верим работу VEH. Исклю­чени­ем пока будет стан­дар­тный Null-Pointer Reference. То есть обра­щение к ука­зате­лю, который име­ет зна­чение nullptr.
Просмотров: 255
Комментариев: 0:   28-10-2023, 00:00
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь. Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

 
Еще новости по теме:



Другие новости по теме: