Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Взлом ПО.docx
Скачиваний:
114
Добавлен:
23.11.2018
Размер:
3.85 Mб
Скачать

Санкт-Петербургский государственный инженерно-экономический университет.

Кафедра вычислительных систем и программирования

Основы исследование безопасности программного обеспечения

Составитель: Федоров Д.Ю.

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.