| Вернуться на сайт |
Пример 1: Создание
простейшей парольной защиты
и исследование ее безопасности
Для данного примера нам потребуются следующие программы:
Все эти средства общедоступны в Интернете, желательно скачать самые последние версии.
Для создания программы-имитации парольной защиты воспользуемся средой разработки Builder.
|
|
Создаем новый проект, на форму вытаскиваем 2 элемента: Edit1 и Button1. В свойстве Caption у Button1 пишем название кнопки «Регистрация», свойство Text для поля ввода Edit1 делаем пустым. В обработчике нажатия Button1->OnClick пишем текст программы, показанный справа. Правильным паролем для показа сообщения о регистрации является «pass», при этом выводится сообщение о регистрации. |
void __fastcall TForm1::Button1Click(TObject *Sender) { if (Edit1->Text==String('p')+String('a')+ String('s')+String('s')) ShowMessage ("Registered!"); else ShowMessage ("Wrong!"); } |
|||||
|
Компилируем программу, не забываем в свойствах проекта убрать галочку в Packages->Build with runtime packages и в Linker->Use dynamic RTL для создания exe-файла, который будет запускаться на любой машине. Компилируем проект, получаем на выходе файл Project1.exe. Запускаем программу и пробуем ввести различные варианты в поле ввода, убеждаемся, что строка «Registered!» появляется только в случае ввода пароля «pass». Теперь загружаем полученную программу в дизассемблер IDA Pro. Ждем окончания анализа и переходим на вкладку Strings. |
|||||||
|
|
Нам известно, что программа при вводе неправильного пароля выводит сообщение «Wrong», поэтому ищем эту строчку в переменных, нажав Alt-T. Естественно, такая строчка найдена, а заодно и соседняя, «Registered!». Теперь все, что нам надо, это найти условие, при котором выбирается то или иное сообщение. Для этого щелкаем два раза на переменной Wrong и переходим к вкладке IDA View-A. |
||||||
|
|
|||||||
|
В поле DATA XREF: показано место в программе, откуда вызывается данная строковая переменная. Щелкаем два раза на XREF (перекрестная ссылка), который соответствует строковой переменной “Registered” |
|||||||
|
|
Разобраться
в этом куске кода на Ассемблере достаточно просто. Стоит лишь обратить
внимание на операторы test и jz перед
показом сообщения «Registered».
|
||||||
|
Нажимаем
на кнопку
При этом видим внизу надпись «Jump is taken», что означает, что прыжок в данном случае будет совершен. Чтобы обойти прыжок щелкаем на этой строчке 2 раза и в окне замены инструкции пишем «nop»
|
При этом условный прыжок заменяется двумя инструкциями nop (no operation), которые ничего не делают. |
||||||
|
Продолжаем выполнение программы, нажав F9, и наблюдаем показ сообщения о регистрации. Таким образом, изменение условного перехода jz на nop устраняет возможность перехода к показу сообщения «Wrong!». Последнее, что мы сделаем в данном примере, это создадим патч для программы. Для этого вернемся в окно дизассемблера IDA, поставим курсор на инструкцию jz по адресу 401ACE и посмотрим на строку состояния.
000010CE в
данном случае является физическим адресом инструкции jz в
файле Project1.exe.
Запускаем шестнадцатеричный редактор WinHEX и
переходим по этому смещению, нажав на кнопку Наблюдаем
по этому смещению наличие байтов 74
Заменяем эти два байта на 90 90, что соответствует двум командам nop. Таким образом, мы проделали в файле то, что до этого делали отладчиком Olly в оперативной памяти. Сохраним измененный файл под именем Project2.exe. Для пробы запустим его и убедимся, что при вводе любой строки выдается сообщение «Registered!» об успешной регистрации. Для создания патча воспользуемся программой CodeFusion. В поле Patch Window Caption напишем «Project1» и нажмем Next. В появившемся окне нажимаем на зеленый плюсик для выбора File to Patch и добавляем файл Project1.exe |
|||||||
|
Для выбора Data to Patch нажимаем зеленый плюсик и выбираем File Compare |
Нажимаем ОК и Next. Далее нажимаем на кнопку Теперь при запуске патча в файле с именем Project1.exe будут произведены все необходимые замены. Конечно, необходимо помнить, что создание патчей для коммерческих программ и их распространение является нарушением УК РФ и карается лишением свободы. Поэтому данный пример затрагивает лишь самолично созданную программу и ее анализ. По всем вопросам к данному руководству писать: mimicria@mail.ru |
||||||
|
|
Original File –
это Project1.exe, Patched File –
соответственно Project2.exe.
Нажимаем кнопку «Compare» и
видим, что по смещению 10CE будут
заменены 2 байта:
|
||||||
|
|
|||||||