Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

2015_лекции / Лекция №6_2015

.pdf
Скачиваний:
61
Добавлен:
22.03.2016
Размер:
4.66 Mб
Скачать

Основные механизмы реализации отладки (x86 процессоры)

Использование флага отладки (TF= 1, регистр

EFLAGS)

Использование прерывний (int 3 (0xcc))

Использование отладочных регистров (DR0-DR7)

Использование отладочного API ОС

Основные типы антиотладочных приемов

Цель : затруднение отладки программы

Затруднить отладчику подключение к отлаживаемому процессу

Обнаружить присоединенный отладчик и

Завершить программу аварийно или нет

Реализовывать другую функциональность

Затруднение отладки путем

удаления брейкпоинтов,

передачи управление в середину «тела» экспортируемой функции для того, чтобы избежать срабатывания брейкпоинтов,

генерации исключений и т.д.Антиотладочные приемы основаны на:

Обнаружение поведенческих особенностей отладчиков

Обнаружение присутствие отладчиков в системе

Использование поведенческих особенностей отладчиков

Расчѐт контрольных сумм (CRC, MD5)

Сканирование кода на наличие 0xCC

Изменение содержимого регистров DR0-DR7

Проверка состояния стека во время выполнения кода.

Использование поведенческих особенностей отладчиков: Пример 1

Сканирование кода на наличие точек останова call $+5

pop edi sub edi, 5

mov ecx, 400h mov eax, 0CCh repne scasb

jz DebuggerDetected

Использование поведенческих особенностей отладчиков: Пример 2

Проверка состояния стека

mov

EBP , ESP

; (т.е. BP=SP) получили указатель на стек

push

EAX

; запишем значение EAX в стек

pop

EAX

; вытащим это значение из стека

cmp word ptr [EBP-2], EAX ; сравним эти значения,

jne

DEBAG

; если они оказались не равны → перейти на

 

 

; дебагер

 

 

 

Использование поведенческих особенностей отладчиков: Пример 4

Изменение содержимого отладочных регистров

push offset handler push dword ptr fs:[0] mov fs:[0],esp

xor eax, eax

div eax ;generate exception pop fs:[0]

add esp, 4 ;continue execution ;...

handler:

mov ecx, [esp+0Ch] ;skip div

add dword ptr [ecx+0B8h], 2 ;skip div mov dword ptr [ecx+04h], 0 ;clean dr0 mov dword ptr [ecx+08h], 0 ;clean dr1 mov dword ptr [ecx+0Ch], 0 ;clean dr2 mov dword ptr [ecx+10h], 0 ;clean dr3 mov dword ptr [ecx+14h], 0 ;clean dr6 mov dword ptr [ecx+18h], 0 ;clean dr7 xor eax, eax

ret

Использование поведенческих особенностей отладчиков

Использование временных меток

Записать временную метку T1

Выполнить набор операций/вызвать прерыванию и его обработку

Записать временную метку T2

Сравнить T1 и T2

Реализация:

rtdsc (0x0F31) (число тиков после последней перезагрузки системы, результат записывается

EDX:EAX)

GetTickCount

QueryPerformanceCounter (число операций выполненных

процессов)

Использование поведенческих особенностей отладчиков: Пример 3

Использование инструкции rdtsc

rdtsc

 

 

 

xor

ecx, ecx

 

add

ecx, eax

 

rdtsc

 

 

 

sub

eax, ecx

 

cmp

eax, 0xFFF

(1)

jb

NoDebuggerDetected

rdtsc

 

 

 

push

eax

(2)

 

ret

 

 

 

Обнаружение присутствия отладчика в системе

Использование специальных функций ОС

IsDebuggerPresent()

CheckRemoteDebuggerPresent()

NtQueryInformationProcess()

OutputDebugString()

Проверка наличия отладчика с помощью получения списка драйверов

Сканирование памяти на наличие процесса отладчика

Проверка на наличие объектов, создаваемых отладчиком

Файлы

Устройства

Окна

Значение ключей в реестре

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug

Шифрование с использованием регистров, указателей на стек SP, ESP

Обнаружение присутствия отладчика в системе

Интересные флаги структуры PEB

PEB!BeingDebugged (PEB + ox2 байта)

push dword ptr fs:[30h]

pop edx

cmp byte ptr [edx+2], 1

je DebuggerDetected

PEB!NTGlobalFlag (PEB + 0x68 байт)

PEB!ProcessHeapFlag (PEB+ox18 байт)

ForceFlag и Flags

Соседние файлы в папке 2015_лекции