Суббота, 22.07.2017
Деменёв Александр
Меню сайта
Форма входа
Поиск
Главная » 2012 » Январь » 1 » Простая статья разъясняющая самые маленькие основы взлома программ 2
23:21
Простая статья разъясняющая самые маленькие основы взлома программ 2



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

1.C++ Builder 6 (Delphi 6,7) Среда быстрой разработки программ.
2.IDA Pro 5.5.0 Дизассемблер.
3.Hiew 7.10 Редактор кода


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

Далее начало статьи будет похоже на предыдущую, но алгоритм защиты уже будет посложнее.

ВНИМАНИЕ: Если Вы не читали предыдущую статью то прежде чем читать дальше эту статью прочитайте предыдущую, иначе некоторые детали указанные здесь будут Вам непонятны.

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

 

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

 

 

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

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

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


 

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


 

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




 String a="0";
 String b="1";
 String c="2";
 String d="3";
 String e="4";
 String f="5";
 String g="6";
 String h="7";
 String i="8";
 String j="9";

 if(Edit1->Text==a+a+a+a+b+b+b+b+a+a+a+a) ShowMessage("Вы успешно зарегистрировали программу");
 else ShowMessage("Вы ввели неправельный ключ, пожалуйста попробуйте снова ввести ключ");

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

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

 

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

 


 

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

 


 

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


 

Из приведенного кода выше стоит запомнить строку кода: 

void __fastcall TForm1::Button1Click(TObject *Sender) 

из неё мы видим, что это код для кнопки с именем Button1 и он работает при Click (щелчке мышью).

Мы будем искать в дизассмблере строку Button1Click.


Запустим IDA Pro 


В последующих окнах ничего не изменяем а просто нажимаем далее.

После того как откроется главное окно дизассемблера выполним поиск.



по слову Button1Click



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


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

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



Откроется код на ассемблере проверки ключа

красной стрелкой показан адрес по которому срабатывает переход JZ (у меня адрес 00401C92, у Вас может быть другой)

зеленой областью показан код проверки ключа на правильность, в данном случае кусок кода:

test cl,cl
jz short loc_401cc1

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

Настало время запустить HIEW

При запуске редактор сразу предлагает выбрать файл нашей подопытной программы.

после открытия файла увидим нечто подобное:




Нажмём F4 (Mode) чтобы выбрать режим отображения и выберем DECODE:


Вот теперь мы уже види код на ассемблере, и теперь ищем адрес нашего перехода
(у меня адрес 00401C92, у Вас может быть другой)



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



Нажмём F3(EDIT Для редактирования) F2 (ASM Для редактирования ассемблерного кода)
появится строка редактирования показанная ниже.



Заменим JE на JNE.
После изменения JE на JNE нажимаем Enter,F9 чтобы сохранить изменения в файле.




Теперь необходимо закрыть редактор HIEW.

Запустите программу над которой мы проводим опыт и попробуйте ввести любой ключ, он должен подойти.




Просмотров: 3220 | Добавил: demenev | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Календарь
«  Январь 2012  »
ПнВтСрЧтПтСбВс
      1
2345678
9101112131415
16171819202122
23242526272829
3031
Архив записей
Наш опрос
Результаты работы программы ABS в Windows 7
Всего ответов: 17
Друзья сайта
Статистика

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