Пятница, 22.09.2017
Деменёв Александр
Меню сайта
Форма входа
Поиск
Главная » 2011 » Ноябрь » 13 » Простая статья разъясняющая самые маленькие основы взлома программ.
22:35
Простая статья разъясняющая самые маленькие основы взлома программ.


Инструменты:

1.C++ Builder 6 (Delphi 6,7) Среда быстрой разработки программ.
2.Olly DBG Отладчик.

Данная статья посвещенная реверсингу (иследыванию програмного обеспечния с целью обхода регистрации). В статье не будет показан взлом платного програмного обеспечения, статья несёт лишь познавательный характер. Так-же сразу признаюсь я не являюсь экспертом в этой области и даже не являюсь новичком, но некоторые основы знаю и готов поделиться. Материала в интернете по данной тематике довольно большое количество, но как правило он будет труден для понимая новичком в этом деле. Цель этой статьи обьяснить принципы максимально просто.  

Чтобы обьяснить почему происходит взлом программного обеспечения, создадим тестувую программу имитирущую простейший процесс регистрации с вводом ключа.

 

Пример программы будет приведен на среде разработки Borland C++ Builder 6, эта среда разработки отлично подходит для нашего опыта, позволяет быстро разработать интерфейс программы без использования ручного описания создания окон средствами WinAPI, и при этом компилятор собирает со стандартной структурой EXE файл в отличие от технологии NET. Для технологии NET данный демонтрационный пример неподходит.

 

Создадим в C++ Builder 6 стандартный проект программы с оконным интерфейсом.

 

 

Расположим на форме Form1 одно текстовое поле Edit1 и кнопку Button1

Очистим текст в текстовом поле, а текст в кнопке поменяем на Регистрация.

Должно получиться примерно так:


 

Делаем двойной клик по кнопке Button1 чтобы написать код действия при нажатии на эту кнопку.


 

Открылся редактор кода в котором мы напишем все волишь одно условие проверки текста в текстовом поле Edit1

 


 

if(Edit1->Text=="0000-2222-1111") ShowMessage("Вы успешно зарегистрировали программу");

else ShowMessage("Вы ввели неправельный ключ, пожалуйста попробуйте снова ввести ключ")

 

Здесь мы видим что при нажатии на кнопку проверяется введеный текст, если текст 0000-2222-1111 то мы увидим сообщение Вы успешно зарегистрировали программу иначе мы увидим сообщение Вы ввели неправельный ключ, пожалуйста попробуйте снова ввести ключ .

 

Запускаем программу и проверяем.

 

Вводим 123 в текстовое поле и нажимаем регистрация

 


 

При этом введенном тексте мы увидим следущее окно

 


 

Теперь пробуем ввести правельный ключ 0000-2222-1111 


 

Ну вот мы реализовали простейшую проверку ключа при регистрации парограммы, и теперь настало время взломать данную программу.

Есть несколько способов взлома:

 

-взлом подбором ключа – при длинных ключах может занять годы, он нам не подходит.

 Смысл метода – подбор ключа по порядку (следует использовать когда пароль  несодержит буквы и не слишком длинный).

 

-взлом с помощью использования точек останова программы (устанавливаются в отладчике программы точки останова на показ других окон, или системных сообщений и когда программа дойдет до выполнения кода определенной строки). При срабатывании точек останова ищуться условные (jz,je,jnz,jne) и без условные переходы (jmp) которые срабатывают при вводе неправельного ключа и заменяются на противоположный оператор. Приведенные здесь операторы условного и без условного перехода используются в языке програмиирования Ассемблер, именно на этом языке отладчики и дизассемблеры позволяют заменять куски кода в программах. Профессиональный взломщик программ обязательно хорошо должен знать этот язык программирования.

 

-взлом путем поиска строк ключа в коде программы с помощью отладчиков и дизассемблеров. Такой метод позволяет найти правельный ключ которые находиться в коде в виде строки а не генерируется определенным образом по заданной формуле.

 

Первые два метода требуют получить код на ассемблере, который не всегда получается получить благодаря использованию разработчиками упаковщиков и протекторов EXE файлов. Упаковщики очень часто сжимают ЕХЕ файл чтобы получить более малый его размер.  При использовании упакощиков псмотреть код на ассмеблере не получиться, и чтобы его получить необходимо предварительно распаковать ЕХЕ файл. Для распаковки ЕХЕ файлов существуют специализаированые анализаторы которые помогут подсказать чем можно распаковать данный файл. Протекторы же намеряно упаковывают ЕХЕ файл с внесением различного мусора в код программы чтобы помещать взлому программы.

 

 Так-как мы сами написали программу для тестирования взлома нам не надо искать распаковщики, но очень часто даже коммерческие программы не упаковываются и не используют протекторов.

 

И так нам понадобиться отладчик OllyDBG, он подходит как новичкам так и профессионалам, к нему существует большое количество различных плагинов.

 

Откроем файл ЕХЕ нашей программы


После открытия мы увидем такой вид:


 

В левом верхнем окне мы видим код ассемблера, но мы будем искать в коде правельный ключ, воспользуемся для этого поиском.

 



 

Сразу же видим строку ASCII, это и есть наш ключ.

 


 

Так-как мы уже знаем наш ключ, то уже уверены что он подойдет.

В реальных программах регистрация сделана анологична, не считая тех программ которые защищены различными электронными ключами или выщитывающие правельный ключ по серийным номерам оборудования (процессора, жесткого диска, монитора).

 

Попробуем пойти дальеш чтобы непросто узнать наш ключ, а именно осуществить взлом.

 

Суть дальнейшего взлома – временно изменить код программы чтобы подходил любой ключ.

 

Для начала необходимо сделать некоторое отступление и описать немного команд языка Ассемблера.

 

Чтобы понять что здесь я напишу нужны маленькие основы работы условий языков программрования.

 

JMP

Кто знаком с оператором языка GOTO (есть и в Basic и C++ и еще много где), то в ассмеблере роль этого оператора выполняет JMP,

 

Пример перехода на метку start

jmp start

start:

….

 

JMP позволяет делать как переход на метку так и на адрес в памяти.

 

JZ/JE

JZ/JE   условие если равно (пример на С++ if(…==…))

 

JNZ/JNE

JNZ/JNE условие если не равно (пример на С++ if(…!=…))

 

Вобщем если мы точно знаем что у нас программа использует для перехода на сообщение о неправельном ключе JZ или JE то мы можем заменить на JMP или JNZ/JNE.

 

Соответственно если программа использует для перехода на сообщение о неправельном ключе JNZ/JNE то заменяем на JZ/JE.

 

NOP

Так же есть ещё один полезный оператор в ассемблере NOP, который ничего не делает.

Благодаря ему можно условный переход заменить на NOP, тоесть ничего ни делание.

 

Теперь когда есть немного теории перейдем к практике, попробуем найти переход.

 

Возвращаемся в отладчик и делаем двойной клик по строке с нашим ключем.


Мы увидем код ассемблера


 

Ищем  ниже любой переход (JZ,JE,JNE,JNZ,JMP)

 

И видим


 

Делаем двойной клик по JE чтобы его поменять на противоположный оператор.

 

Как писалось выше мы его должны заменить на противоположный был JE будет JNE.

 

Было


Стало


Нажимаем Assemble и проверяем запустив проект кнопкой в отладчике 

 

Вводим неправельный ключ


И видим, и так будет при вводе любого ключа


 

После закрытия отладчика к программе небудет уже подходить любой ключ, потому что все сделано было только в оперативной памяти, чтобы приучить программу всегда принимать правельный ключ необходимо написать патч или заменить вручную байты переходов в ЕХЕ файле, однако был подробно рассмотрен процесс взлома.

 

На этом данный материал закончен. В этом примере использовалась очень простая защита с помощью ключа, в следующей статье будет рассмотрена защита программы с помощью ключа который нельзя будет найти в виде строки и для обхода такой защиты будет использован дизассемблер IDA Pro.




Просмотров: 9226 | Добавил: demenev | Рейтинг: 5.0/1
Всего комментариев: 3
3 Krist   (16.09.2012 14:47)
Отличная статья! Что может сделать благодарый читатель для поддержания проекта?

1 vladvoron   (15.01.2012 17:27)
Давно искал статьи, где будет так подробно объяснен механизм реверсинга. + 1000000000000! А еще будут статьи?
Требую продолжения банкета biggrin

2 demenev   (15.01.2012 22:48)
Если бы я ещё в этом отлично соображал biggrin как что нибудь по данной тематике нового узнаю так напишу.

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Календарь
«  Ноябрь 2011  »
ПнВтСрЧтПтСбВс
 123456
78910111213
14151617181920
21222324252627
282930
Архив записей
Наш опрос
Встречались ли Вы с блокировкой Windows 7 баннерами ?
Всего ответов: 46
Друзья сайта
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Copyright MyCorp © 2017
Создать бесплатный сайт с uCoz