- •Основы исследование безопасности программного обеспечения
- •Оглавление
- •Обращение к читателю
- •Введение
- •С чего начать
- •Инструменты исследователя
- •Установка исследуемой программы
- •Типовая защита «Запрос пароля» или «Запрос ввода регистрационного номера»
- •Исследование типовой защиты в отладчике OllyDbg
- •Исследование типовой защиты в дизассемблере ida Pro
- •Типовая защита «Запрос пароля» или «Запрос ввода регистрационного номера» с шифрованием сообщения
- •Технологии защиты программного кода от исследования и отладки
- •Как не надо проектировать защиту программ
- •Как обмануть отладчик и дизассемблер
- •Приложение 1. Ассемблер в Windows
- •О стеке
- •Команды передачи управления
- •Литература для дополнительного изучения
- •Приложение 2. Отладчик OllyDbg
- •Откуда скачать программу
- •Установка и настройка программы
- •Дизассемблированный код (листинг)
- •Регистры
- •Наиболее полезные клавиши в OllyDbg
- •Подключение плагинов в OllyDbg
- •Встроенный язык ida Pro
- •Плагины ida Pro
- •Литература для дополнительного изучения
- •Задание для самостоятельного выполнения
- •Список используемой литературы
Санкт-Петербургский государственный инженерно-экономический университет.
Кафедра вычислительных систем и программирования
Основы исследование безопасности программного обеспечения
Составитель: Федоров Д.Ю.
http://pycode.ru
2011
Оглавление
Обращение к читателю 5
Введение 5
С чего начать 5
Инструменты исследователя 7
Установка исследуемой программы 8
Типовая защита «Запрос пароля» или «Запрос ввода регистрационного номера» 9
Исследование типовой защиты в отладчике OllyDbg 11
Исследование типовой защиты в дизассемблере IDA Pro 16
Типовая защита «Запрос пароля» или «Запрос ввода регистрационного номера» с шифрованием сообщения 20
Технологии защиты программного кода от исследования и отладки 29
Как не надо проектировать защиту программ 30
Как обмануть отладчик и дизассемблер 31
Приложение 1. Ассемблер в Windows 32
О стеке 37
Команды передачи управления 38
MASM 40
Литература для дополнительного изучения 42
Приложение 2. Отладчик OllyDbg 43
Откуда скачать программу 43
Установка и настройка программы 43
Наиболее полезные клавиши в OllyDbg 55
Подключение плагинов в OllyDbg 56
Литература для дополнительного изучения 58
Приложение 3. IDA Pro 59
Откуда скачать программу 59
Интерфейс работы с программой 59
Встроенный язык IDA Pro 65
Плагины IDA Pro 66
Литература для дополнительного изучения 66
Задание для самостоятельного выполнения 68
Список используемой литературы 69
Обращение к читателю
Каждая тема, затронутая в пособии, достойна отдельной книги, поэтому темы пришлось рассматривать сжато, на уровне разбора отдельных примеров и комментариев к ним. Также в пособии не приводится справочная информация, которая уже хорошо структурирована в книгах из списка рекомендованной литературы, например, перечень команд ассемблера.
Читать пособие лучше в следующем порядке (тогда сохранится логика и вопросов в процессе прочтения будет меньше):
-
приложение 1;
-
приложение 2;
-
приложение 3;
-
основная часть;
-
задание для самостоятельного выполнения.
Введение
Чтобы обеспечить безопасность программного обеспечения, необходимо знать инструменты и методы обхода средств защиты, которыми пользуются злоумышленники. Чтобы научиться создавать защиты, сначала нужно научиться их снимать.
Навык исследования кода необходим исследователям зловредного программного обеспечения (malware), чтобы разработать средство противодействия.
С чего начать
Необходимо собрать как можно больше информации о самой программе:
-
чем и как программа упакована1 или зашифрована;
-
какие ограничения содержатся в незарегистрированной программе;
-
как выглядит процесс регистрации;
-
что произойдет, если использовать программу дольше, чем положено по ограничению;
-
какие текстовые строки и ресурсы содержатся в программе;
-
к каким файлам и ключам реестра программа обращается при загрузке и т.д.
К примеру, есть программа с ограничением работы в 30 дней, после этого выводится стандартное окно (MessageBox). Перевод системного времени не влияет на работу программы, т.е. программа проверяет текущую дату не на основании часов Windows. Предполагаем, что программа либо в реестре, либо на диске уже сделала отметку «больше не запускаться», второй вариант – программа где-то проверяет время, например, читая дату модификации какого-либо файла.
Мы можем поставить точки прерывания (когда программа дойдет до нужного участка программы, она остановится на точке прерывания) на все вызовы MessageBox в программе и выяснить, какой из условных переходов позволяет избежать появления этого сообщения. Во втором случае можно использовать функции – GetFileTime, CompareFileTime и т.д.
Наиболее уязвимы для злоумышленника – глобальные переменные, где могут храниться состояние программы (зарегистрирована/не зарегистрирована), число запусков (или количество дней) до истечения демонстрационного периода или результат проверки серийного номера на правильность и т. д. Если в глобальной переменной содержит бит (правильный/не правильный пароль), то для обхода защиты злоумышленник может изменить только один бит. Второй прием – поиск константы, с которой производится сравнение и модификация самой константы, либо условия проверки.
Существует «проблема условного перехода», которая заключается в том, что реализовать проверку условия без использования условного перехода достаточно сложно, но в условном переходе можно поменять один бит и условие изменится на противоположное. Условных переходов, имеющих отношение к защите, в программе может быть 100-200.