230105 - “ Программное обеспечение вычислительной техники и автоматизированных систем ”
Преподаватель
Е. В. Щанова
Студент гр. ПО-306
В.О.Игнатьев
Дата выполнения: 18.04.13
Оценка_____________________
Подпись____________________
Екатеринбург 2013
Цель работы: изучить различные способы защиты программ от взлома, научится их применять.
Работа:
1) Сейчас мы разберемся как ввести регистрационный код.
Устанавливаем точку останова на считывание текста из стандартного элемента ввода.(функции GetWindowText, GetGlgItemText модуля KERNEL32).
При вызове этой функции анализируются ее параметры. Определение того по какому адресу будет размещено считываемое значение и ставится обращение к этой области памяти точку останова. После выполнения функции там появится введенная строчка.
При срабатывании этой точки останова мы попадаем в анализатор введенного значения и либо делаем генератор введенных ключей, либо ломаем процедуру проверки.
2) Анализируем регистрационный код.
Не анализируем код сразу после его ввода. Не проверяем код только в одном месте и не пишем для проверки функцию. Не проверяем пароль одним алгоритмом. Не принимаем не каких действий после проверки.
3) Отладчики и дизассемблеры.
Распаковываем файл OllyDbg.
И заходим в программу:
Открываем файл CrackMe.
Рассматриваем части и функции этой программы:
- Дизасемблированный код, он автоматически анализирует программу
Можно облегчить работу с ней: APPEARENCE → HIGHLIGHTING → JUMPS AND CALLS.
- Регистры: в них отображается значительная часть информации. Есть три состояния.
- Стек и «куча»
Зона памяти, где сохраняются данные которые должны быть восстановлены в ближайшее время.
- Дамп.
Много режимов отображения которые можно менять. По умолчанию используется режим 8 – байтовый Hex/ASCII.
Он чаще всего используемый.
Immunity Debugger
Отличительная черта - возможность писать скипты на языке Python.
YDbg
Очень мощный мод.
SoftICE
Отладчик для Windows. Работает на уровне ядра.
Microsoft Debugger
Входит в состав WDK. Microsoft Debugger может работать как на прикладном уровне (ring-3), так и на уровне ядра.
Syser Kernel Debugger
Отладчик уровня ядра с графическим оконным интерфейсом. Позволяет отлаживать как приложения, так и драйвера.
GDB
Основной отладчик под UNIX, ориентированный на совершенно иной тип мышления, чем все вышеперечисленные отладчики.
IDA Pro
Это одновременно интерактивный дизассемблер и отладчик. Она позволяет превратить бинарный код программы в ассемблерный текст, который может быть применен для анализа работы программы.
Hex-Rays
Hex-Rays - декомпилятор, требующий обязательно установленную на компьютеру ИДУ.
W32DASM
Удобный и понятный. Набор функций с точки зрения профессионала довольно ограничен, но W32DASM выдает хороший листинг.
DeDe
Для декомпиляции кода, написанного на Delphi/Borland C++ Builder, т.е программ.
PEiD
Способен определить название и версию упаковщика.
PE Explorer
Программа для просмотра и редактирования PE-файлов - начиная с EXE, DLL и ActiveX контролов, и заканчивая скринсейвверами SCR (Screensavers), апплетами панели управления CPL, SYS и бинарниками для платформы Windows Mobile.
Контрольные вопросы:
1) Дизассемблирование - это получение из исполняемого кода программы код на языке ассемблера.
3) Интерактивный дизассемблер - программа, тесно взаимодействующая с пользователем в процессе дисассемблирования.
4) Отладчик – программа, предназначенная для анализа поведения другой программы, обеспечивающая остановку в указанных точках и позволяющая просматривать (редактировать) содержимое ячеек памяти, регистров процессора и команды программы.
Эмулирующий отладчик - отладчик, который самостоятельно интерпретирует и выполняет команды программы (без использования реального процессора).
5) Мне известны средства – Дисассемблирование, Дисассемблер. Интерактивный дисассемблер, Отладчик, Эмулирующий отладчик.
6) Надежная защита - такая, на взлом которой необходимы материальные и трудовые затраты, во много раз превышающие затраты на покупку программного обеспечения.
7) Методы защиты от дезассемблирования: шифрование, архивирование программного кода, динамическое изменение кода программы, нестандартная структура программы.
8) Методы защиты от работы под контролем отладчика: перехват прерывания INT 3, использование отладчиком стека.
9) Отладочные механизмы: OllyDbg, Immunity Debugger, YDbg, SoftICE, Microsoft Debugger, Syser Kernel Debugger, GDB и так далее.
10) Трассировка - пошаговое выполнение программы.
11)
1. Советы помогающие обезопасить программу от взлома: Пишите защиту на ассемблере.
2. Никогда не давайте осмысленные имена важным функциям, типа IsValidSerialNum.
3. Не предупреждайте (сразу) пользователя о том, что защита нарушена. Лучше сделайте это через два-три дня - хакеры это ненавидят…
4. Используйте "перекрестные" проверки CRC-кодов ваших EXE- и DLL-файлов.
5. Делайте паузу (одной-двух секунд будет вполне достаточно) после ввода пароля (серийного номере) перед возвратом результата. При этом подобрать правильный пароль путем прямого перебора (с помощью специально написанной программы) будет совершенно невозможно.
6. Сохраняйте пароли в каком-нибудь "необычном" месте, например, в свойствах поля базы данных.
7. Не привязывайтесь к системной дате. Вычисляйте текущую дату из времени создания каких-нибудь системных файлов, например SYSTEM.DAT или USER.DAT (Windows Registry).
8. Сохраняйте пароль в нескольких местах одновременно.
9. Не используйте "статические" (то есть жестко прошитые в вашу программу) строчки текста для уведомления пользователя о том, что пароль правильный (или неправильный). Это первое, на что смотрит хакер. Генерируйте эти строчки динамически, или используйте шифрование, хотя бы самое простенькое.
10. Используйте "мелкие хитрости" для защиты от дизассемблирования и отладки.
11. Наконец, никому никогда не рассказывайте о том, как построена ваша защита.
12) Отладчики и дизассемблеры: OllyDbg, Immunity Debugger, YDbg, SoftICE, Microsoft Debugger, Syser Kernel Debugger, GDB и так далее.
13) Возможности OllyDbg: бесплатный проприетарный 32-битный отладчик уровня ассемблера для операционных систем Windows, предназначенный для анализа и модификации откомпилированных исполняемых файлов и библиотек, работающих в режиме пользователя. встроен специальный анализатор, которые распознает и визуально обозначает процедуры, циклы, константы и строки, внедренные в код, обращение к функциям API, параметры этих функции. Отличается от классических отладчиков.
14) Стек или «куча»- это зона памяти, где сохраняются данные, которые должны быть восстановлены в ближайшее время. Здесь не много конфигурационных опций – разве что возможность отобразить информацию, касающуюся регистров ESP и EBP.
Вывод: в этой работе я научился разными способами защищать программы от взлома и рассмотрел все возможности этой защиты.