Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпора(Егерев).docx
Скачиваний:
13
Добавлен:
16.09.2019
Размер:
58.62 Кб
Скачать
  1. Виды точек останова в отладчике. Алгоритм работы точек останова.

То́чка остано́ва (англ. breakpoint) — это преднамеренное прерывание выполнения программы, при котором выполняется вызов отладчика (одновременно с этим, программа сама может использовать точки останова для своих нужд).

Виды

- Программная точка останова - Это самая обыкновенная точка останова (BPX)

- Аппаратная -

DR0-DR3 -- задают четыpе линейных адpеса контpольных точек по адpесам,

котоpые фоpмиpуются текущей пpогpаммай. Эти pегистpы отладки сpавниваются с

каждым адpесом выполненяемой команды и пpи pавенстве генеpиpуется особый

случай.

К pегистpам отладки также относятся D6 -- pег. состояния отладки, D7 -- pег.

упpавления отладкой.

Имеем 4 pег. отладки обеспечивающие 4 независимые контpольные точки,

котоpые позволяют pегестpиpовать пеpеключение на конкpетную задачу, установка

контpольных точек по адpесам ПЗУ и фиксиpовать модификацию значений пеpеменных в

памяти.

- по памяти - Данный вид точек останова модифицирует свойства страниц памяти, которым принадлежит область, на которую вешается (BPM)

  1. Антиотладочные приёмы. Использование функции IsDebuggerPresent и защита от неё.

Функции не передаётся никаких параметров, в ответ она говорит, запущен процесс под отладчиком (EAX = 1) или нет (EAX=0). Функция экспортируется из модуля kernel32.dll

Внутренности функции

MOV EAX, DWORD PTR FS:[18] ; EAX = offset TIB

MOV EAX, DWORD PTR DS:[EAX+30]; EAX = offset PEB

MOVZX EAX, BYTE PTR DS:[EAX+2]; EAX = Peb.BeingDebugged

Переменная влияет на многие механизмы, один из которых - отладочный вывод. Функция DbgPrint() проверяет это поле, если оно обнулено сообщение доставляется отладчику ядра, иначе генерируется исключение DBG_PRINTEXCEPTION_C(0x40010006), которое обрабатывает пользовательский отладчик. Это позволяет локально обрабатывать отладочный вывод(например посредством VEH перенаправить его в консоль).

Защита от обнаружения

Вручную изменить на 0. Или использовать плагины для OllyDbg - например HideDbg

  1. Антиотладочные приёмы. Использование функции FindWindow и защита от неё.

Функция FindWindow разыскивает данные о дескрипторе окна верхнего уровня, чье имя класса и имя окна соответствуют определенным строкам. Эта функция не ищет дочерние окна.

Синтаксис

HWND FindWindow

(

LPCTSTR lpClassName, // указатель на имя класса

LPCTSTR lpWindowName // указатель на имя окна

);

Параметры

lpClassName

Указывает на строку с нулевым символом в конце, которая определяет имя класса или - атом, который идентифицирует строку имени класса. Если этот параметр - атом, он должен быть общим атомом, созданным предыдущим вызовом функции GlobalAddAtom. Атом - это 16-разрядное значение, в котором должно быть помещено в младшем слове lpClassName; старшее слово должно быть нулевое.

lpWindowName

Указывает на строку с нулевым символом в конце, которая определяет имя окна (заголовок окна). Если этот параметр - ПУСТО (NULL), полное соответствие имени окна.

Возвращаемые значения

Если функция завершилась успешно, возвращаемое значение - дескриптор окна, которое имеет определенное имя класса и имя окна. Если функция терпит неудачу, возвращаемое значение - ПУСТО (NULL). Чтобы получить дополнительные данные об ошибках, вызовите GetLastError.