2015_лекции / Лекция №8_2015
.pdfФедеральное агентство по образованию
Санкт-Петербургский Государственный Электротехнический Университет «ЛЭТИ»
Стратегии самозащиты вредоносного ПО. Анти-дизассемблирование
Анти-дизассемблирование
Анти-дизассемблирование
Цель: затруднение статического анализа кода программы :
•шифрование исходного кода
•обфускация кода
•динамическое изменение кода
•полиморфизм
•метаморфизм
•использование упаковщиков
Дизасемблирование
Крис Касперски, Ева Рокко
Искусство дизассемблирования (+ CD-ROM) БХВ-Петербург , 2008
Дизассемблирование
0101001100010101
24 AA 40 00 53
0101010101001010
AA 40 00 85 AA
1010101010101010
40 00 B7 AA 40
1011110101001010
00 E8 CF 40 00
011101010000
97 D1 40 00 D7
…
D1 40 00 5A
…
…
…
…
PUSH EBP MOV EBP,ESP
PUSH -1
PUSH Crackme1.00410600 PUSH Crackme1.
MOV EAX,DWORD PTR FS:[0]
….
PUSH ESI CALL
Crackme1.0040234C POP ECX
PUSH 1B
…
…
Дизассемблирование
Дизассемблеры:
Линейные (linear)
Дизассемблеры с рекурсивным прослеживанием информационных потоков (recursive traversal)
Дизассемблер: линейная интерпретация кода
Принцип работы:
Считать инструкцию,
Определить ее размер
Перейти к следующей инструкции с учетом вычисленного размера инструкции
Преимущества:
Простая реализация
Недостаток
Слишком много кода
Некорректная трактовка кода при 1) использовании инструкции передачи управления, 2) данные совмещены с кодом
Дизассемблер: линейная интерпретация кода
0042ABFE: |
EB 01 |
jmp 0042AC01 |
0042AC00: |
F3 BB 44 33 22 11 |
rep mov ebx,11223344h |
0042AC06: |
5F |
pop edi |
Дизассемблер: рекурсивное прослеживание информационных потоков
Принцип работы:
Анализ инструкций
Список адресов, по которым должна быть дизассемблирована программы
Рекурсивный анализ веток программы
Преимущества:
Корректная обработка веток программы
Недостаток
Ошибки при интерпретации операций, передающих управление по динамически вычисленным адресам
Дизассемблер: рекурсивное прослеживание информационных потоков (1) VS линейный анализ (2)
Условный переход
да |
нет |
|
|
|
Условие |
Линейный анализ: анализ следующей инструкции
Рекурсивный анализ: анализ ветви НЕТ