2015_лекции / Лекция №8_2015
.pdfДизассемблер: рекурсивное прослеживание информационных потоков (1) VS линейный анализ (2)
1
2
Дизассемблер: рекурсивное прослеживание информационных потоков (1) VS линейный анализ (2)
Дизассемблер: рекурсивное прослеживание
информационных потоков (1) VS линейный анализ (2)
Анти-дизассемблирование
Идея: использовать особенности реализации и принципов функционирования дизассемблеров
Например,
подобрать данные так, чтобы они могли быть интерпретированы как многобайтные инструкции
(для линейного анализа)
E8 <адрес> = call
E9 <адрес> = jmp
использовать операции передачи управления с учетом особенностей определения порядка их интерпретации
Анти-дизассемблирование:
Использование операций передачи управления
1. Jmp переход на один и тот же адрес
Анти-дизассемблирование:
Использование операций передачи управления
1. Jmp переход на один и тот же адрес
Анти-дизассемблирование:
Использование операций передачи управления
Jmp c постоянным условием
Анти-дизассемблирование:
Ачто если байт входит в состав сразу нескольких инструкций ?
→ преобразовать последовательность
INC EAX |
== |
NOP , ZF = 1 |
DEC EAX |
|
|
Анти-дизассемблирование:
Ачто если байт входит в состав сразу нескольких инструкций ?
ОТСЛЕЖИВАНИЕ ФЛАГОВ И ИЗМЕНЕНИЕ РЕГИСТРОВ
Анти-дизассемблирование:
Использование одних и тех же блоков кода в разных функциях
1)Обфуцирование кода (распределение совместно используемых блоков кода по всей коду программы)
2)Уменьшение объема кода (в упаковщиках)
Armadillo packer