2015_лекции / Лекция №6_2015
.pdfЗатруднение отладки
Использование исключений
Зафлудить исключениями
Отключение аппаратных точек останова с помощью обработчика исключений
Самоотладка
Создание дочернего процесса, который осуществляет отладку родительского процесса
Разделить поток выполнения программы между этими двумя процесса, обеспечить взаимодействие через исключения
Использование прерываний
Int 3, 0xCD03 (STATUS_BREAKPOINT) в WinDbg EIP + 1 байт
INT 2D
ICEBD
Маскировка точек входа и формата файла
Использование TLS
Затруднение отладки
Использование уязвимостей отладчиков
Например, OllyDbg v1.0
1) уязвимость к неправильному формату PE заголовка -> выдается ошибка о неверном формате исполняемого файла
NumberOfRvaAndSizes = 0x99 (вместо 0x10) в IMAGE_OPTIONAL_HEADER
SizeofRawData = 77777777h в IMAGE_SECTION_HEADER
2) переполнение буфера с использованием форматированной строки:
OutputDebugString (%s%s%s%s%s%s%s%s%s)
Как обойти антиотладочные приемы
Сделать отладчик менее заметным для исследуемой программы
Сбросить флаги в PEB
Отключить флаги, контролирующие выделение кучи
У OllyDbg есть расширения, автоматизирующие эти задачи
В зависимости от характера анти-отладочных трюков выберите свою стратегию анализа
Если отключены аппаратные точки останова, используйте программные
Подключитесь к процессу после того, как он распаковал себя, но до его завершения
Пропустите наиболее сложные части кода, и анализируйте код рядом в ручную
Сложно и затратно по времени