Изучение методов защиты программного обеспечения
Автор: Alya3107 • Октябрь 25, 2022 • Лабораторная работа • 649 Слов (3 Страниц) • 259 Просмотры
Страница 1 из 3
Лабораторная работа № 1 – Изучение методов защиты программного обеспечения
Цель работы
Изучение методов защиты программного обеспечения и возможных способов их преодоления.
Формулировка задания
В ходе выполнения лабораторной работы необходимо выполнить следующие действия:
- Изучить подходы, применяемые для защиты программного обеспечения [1-21].
- Реализовать программу на компилируемом языке (C\C++, Go, Rust, Swift), осуществляющую считывание пароля из файла “password.txt” и в случае совпадения его с заданным, вывод сформированного серийного номера в формате KEY$xxxxxxxxxx$ (x – произвольные символы) в файл “serial.txt”, а также вывод сообщения об успехе в интерфейсе программы, в обратном случае - сообщения об ошибке. Все файлы должны быть расположены в одной директории с исполняемым файлом программы.
- В качестве защищаемого программного обеспечения (ПО) может быть выбрана программа, ранее разработанная студентом, либо любое ПО с открытым исходным кодом.
- В программе должен быть «полезный функционал», выполнение которого не должно происходить при введении неправильного пароля.
- Осуществить модификацию исполняемого файла (бинарный патчинг) таким образом, чтобы результат проверки пароля всегда был положительным.
- В отчете привести описание осуществленных действий для нахождения места проверки пароля и модификации файла.
- Необходимо реализовать защиту разработанного программного обеспечения от возможности изменения поведения программы при помощи бинарного патчинга.
- Реализованная программа должна использовать следующие общие подходы к защите ПО:
- Хранение в зашифрованном виде всех строк, в т.ч. выводимых на экран.
- Проверка и вывод информации в разных местах программы.
- Контроль целостности участков кода, ответственных за проверку «пароля» (подсчет CRC исполняемого кода функции проверки пароля в оперативной памяти во время выполнения программы).
- Наличие нескольких проверок пароля в разных местах программы.
- Наличие ложных проверок (в т.ч. сразу после считывания «пароля»).
- Использование методов запутывания кода для усложнения анализа кода программы.
- Защитные механизмы должны быть тесно переплетены с логикой защищаемого кода и распределены по всему «полезному» коду, в случае модификации кода защитных механизмов код полезной нагрузки должен стать некорректным.
- Реализованная программа должна использовать:
- Не менее 4 методов обнаружения средств отладки и противодействия им.
- Не менее 3 методов противодействия дизассемблированию (методы, которые приводят к некорректному дизассемблированию кода, см. главу 15 [1]).
- Не менее 2 методов выявления виртуальных машин.
- Фрагменты самомодифицирующегося кода.
- Методы бинарной обфускации и обфускации потока передачи управления (нелинейная передача управления, например, через исключения [2].
- Для реализованной программы произвести обход внедренных механизмов защиты путем бинарного патчинга исполняемого кода.
- Произвести упаковку исполняемого файла с использованием одного из распространенных упаковщиков исполняемых файлов (например, UPX).
- Провести анализ принципов работы используемого средства защиты бинарного кода с помощью дизассемблера, отладчика и других программных средств. Найти в отладчике оригинальную точку входа в программу после упаковки файла.
- Сравнить параметры оригинального и упакованного файлов (энтропия).
- В отчете необходимо привести следующую информацию:
- исходный код программы до внесения в нее механизмов защиты;
- описание полезной функциональности программы;
- описание процесса модификации программы без механизмов защиты;
- перечень механизмов защиты и фрагменты исходного кода, отвечающие за их реализацию;
- описание принципа действия используемых механизмов защиты;
- исходный код программы после добавления механизмов защиты;
- описание процесса обхода реализованных механизмов защиты;
- описание программы-упаковщика;
- описание алгоритма упаковки исполняемого файла;
- фрагмент кода упакованной программы, отвечающий за самораспаковку исполняемого файла (загрузчик), полученный с помощью дизассемблера;
- схема структуры упакованного файла;
- параметры исполняемых файлов до и после упаковки (размер файла, энтропия и т.п.).
Список источников
- Michael Sikorski, Andrew Honig. Practical Malware Analysis
https://doc.lagout.org/security/Malware%20%26%20Forensics/Practical%20Malware%20Analysis.pdf
- Binary Deobfuscation. https://calwa.re/reversing/obfuscation/binary-deobfuscation-preface#indirect-branches
- Анти-дизассемблерные приемы
https://www.malwinator.com/2015/11/22/anti-disassembly-used-in-malware-a-primer/
https://www.malwinator.com/2015/11/27/anti-disassembly-techniques-used-by-malware-a-primer-part-2/
...
Доступно только на Essays.club