Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lektsia_5.pptx
Скачиваний:
14
Добавлен:
09.04.2023
Размер:
1 Mб
Скачать

Лекция 5.

Анализ программного кода и данных

(Часть 1. Защита от статического анализа)

Защита программ и данных

Константин Евгеньевич Израилов

Содержание

Освоение образовательной программы

oСтатистика посещения

oПромежуточная аттестация

От анализа к защите

Применение категориального деления

oЗащита от какой атаки: Статического VS Динамического анализа

oЗащита какого состояния: Хранения VS Выполнения

oЗащита какой составляющей: Формы VS Содержания

Способы защиты

oЗапутывание вида программы

oЗапутывание логики программы

oУпаковка программы (с сжатием)

oУпаковка программы (с кодированием)

oУпаковка программы (с шифрованием)

oВиртуализацией выполнения программы

Практическое задание

oПроведение ручной многоэтапной обфускации кода

Вопросы

//

Статистика посещения

А есть ли

тут наука?

ИКБ-61

ИКБ-62

Мероприятие Процент

Лекции 46%

Практика 48%

Задания 25%

Мероприятие Процент

Лекции 58%

Практика 55%

Задания 20%

ИКБ-63

ИКБ-64

Мероприятие Процент

Лекции 44%

Практика 53%

Задания 13%

// Лучше всех Хуже всех

Мероприятие Процент

Лекции 58%

Практика 61%

Задания 22%

Промежуточная аттестация

Дата проведения: 29 октября 2018 г.

Способ проведения = Оценка участия в учебе:

oПосещение: Лекции + Практика; Выполнение: Задания (Лаб. работы)

Формула показателя аттестационности (арифм. взвеш.):

oF() = 1.0 x KЛекции + 0.33 x KПрактика + 0.66 x KЗадания

 

KЛекции – доля посещения Лекций

 

 

 

KПрактика – доля посещения Практики

 

Минутка

 

KЗадания – доля выполненных Заданий

 

 

мотивации

Проходной критерий показателя аттестационности*:

 

o F() 1.0 (достаточно низкий)

ИКБ-62

ИКБ-63

ИКБ-64

Группа

 

ИКБ-61

Доля

 

52%

55%

48%

64%

аттестованных

 

 

 

 

Время занятий (П)

9.00, 10.45

13.00

10.45, 13.00

13.00, 16.30

Анализ результатов:

 

 

 

 

oВсе, кто делал задания – аттестовался

oОбразовалось 2 четко выделенных кластера:

{Ходит+Делает = A} + {Не ходит и Не делает = B}

oДоля аттестованных НЕ коррелирует с временем занятий =( … науки нет

//*Искажение результатов: не учитывается время проведения лекций (Понедельник VS Вторник, Утро VS Вечер)

От анализа к защите

Что изучали раньше: o Как анализировать программу и данные?

Статический анализ

Динамический анализ

ПО

Что будем изучать дальше

oКак защитить от анализа программу и данные?

От статического анализа

От динамического анализа

ПО

Для каких целей защищать ПО от анализа?

o1. Несанкционированное использование (т.е. взлом)

o2. Кража интеллектуальной собственности (т.е. раскрытие “ноу-хау”)

o3. Обнаружение антивирусами (Зачем?)

o4. Что еще?

//

Категории средств защиты от анализа

Категориальные пары:

o Защита от какой атаки:

 

 

Статического VS Динамического анализа

 

 

Анализируется код ПО

 

 

 

или оно отлаживается

С

o Защита какого состояния:

 

Хранения VS Выполнения

 

 

 

Защищается как хранится или выполняется ПО

Ф

o Защита какой составляющей:

 

Формы VS Содержания

Защищается вид кода (язык) или его логика (алгоритмы)

Классификация средств защиты от анализа по категориям:

Х

С

Д

В

 

Хранение

Выполнение

 

Форма

Содержание

Форма

Содержание

От статического

Запутывание

Запутывание

Упаковка

Виртуализация

анализ

логики

вида программы

(сжат./код./шифр.)

 

 

программы

 

 

От

 

 

 

 

динамического

 

На следующей лекции

 

анализ

 

 

 

 

Защита от статического анализа изменением выполнения – Контейнеризация

//

Применяется ли в реальной жизни обфускация идей?

Запутывание программы

Обфускация – запутывание кода программы, сохраняющее ее функциональность, но затрудняющее анализ

Уровни представлений ПО: o Машинный код o Байт-код

o Исходный код

oАлгоритмы, Архитектура, Концептуальная модель, Идея

Оптимизация (частный случай обфускации) – изменение выполняемого кода для максимизации его характеристик: скорость, размер, др.

Недостатки:

oПотеря гибкости – может стать платформенно-зависимым

oСложность отладки – разработчику будет сложнее найти ошибку

oОбратимость – код все равно может быть восстановлен

oОшибки – средство, как и компилятор, сложно тестируем

oИзменение имен программы – могут делаться вызовы по именам классов

Существуют изначально запутанные языки программирования: Brainf*ck:

oЭзотерический* язык программирования

oHelloWorld: ++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.++++++

+..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.

// Эзотерический ЯП – разработаны для: исследований возможностей, док-ва реализации идей, как произведение искусства или шутка

Запутывание программы: Механизм

1)

Изменяется форма программы

 

A

 

 

Убирается полезная информация

 

 

Меняются имена переменных

B

 

 

 

Добавляется бесполезная информация

 

Форма кода – имена, комментарии, …

 

 

B

2) Изменяется содержание программы

 

 

 

Изменяется структура данных

 

 

 

Изменяется логика 321

 

 

 

Добавляется бесполезная логика

123

321

Содержание кода – алгоритмы, модули, структуры, …

//

Вид кода (Форма)

Логика кода (Содержание)

Бесполезная логика

 

Запутывание программы: Вида

Минутка

 

 

 

1) Удаление полезной метаинформации*

 

смекалки

 

№1

 

Удаление отладочной информации (из скомпилированного кода)

 

 

Удаление комментариев

 

 

// Класс для хранения ПД пользователя

//

 

class Credentials { ...

class Credentials { ...

 

}

 

}

 

2)Изменение имен переменных

Замена имен переменных, понятных человеку, на случайные или с собственной логикой

class Credentials {

class C1 {

public String Login, Password;

public String M1, M2;

}

}

3)Добавление мусорных данных

Внесение в код переменных, констант, операций доступа к ним, которые не нужны для функционирования программы

class Credentials {

class Credentials {

public String Login, Password;

public String _PreLogin;

}

public String Login, Password;

 

public String _PostPassword;

 

}

 

 

// *Метаинформация – информация об информация (т.е. описание самой программы в программе)

Запутывание программы: Логики Минутка

 

смекалки

1) Изменение структуры данные

№1

 

Модификация внутренней структуры данных с “нелогичными” способами доступа к ним

Bool CheckPassword (String pwd) {

String Password = “___abc123###”;

String Password = “abc123”;

Bool CheckPassword (String pwd) {

return pwd == Password;

return pwd == Password.Substring(3, 9);

}

}

 

 

2)Изменение потока управления: if, switch, for, while/do

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

Bool ComparePassword (String pwd1, String pwd2) {

return pwd1 == pwd2;

}

Bool ComparePassword (String pwd1, String pwd2) {

while (pwd1 == pwd2) { return true;

}

return false;

}

3)Добавление мусорных операций

Добавление операций или приемов, не используемых или бесполезных для логики программы

Bool ComparePassword (String pwd1, String pwd2) {

return pwd1 == pwd2;

}

//

Bool ComparePassword (String pwd1, String pwd2) {

Dummy_1(pwd1);

Dummy_2(pwd2);

String result = (pwd1 == pwd2); Dummy_3(result);

return result;

}

Соседние файлы в предмете Защита программ и данных