Регистрация mIRC32 v5.41Delphi , Программа и Интерфейс , Исследование программРегистрация mIRC32 v5.41Автор: Russian ОТ АВТОРА В данной статье описывается мой первый полностью самостоятельный опыт ис- следования программы. Прошу заранее извинить за возможные просчеты и несура- зицы, которые будут бросаться в глаза профессионалам. Рассчитываю главным обра- зом на таких же как и я новичков в этом деле. ВВЕДЕНИЕ Все знают программу для общения в IRC серверах mIRC32.exe (а кто не знает, по- смотрите на http://www.mirc.co.uk). Программа mIRC32 v5.41 является Shareware, после 30 дней ее надо зарегистриро- вать. В принципе можно работать и на этой версии, однако после указанного срока при запуске начинают появляться навязчивые сообщения с предложением сделать регистрацию. Как я попытался это проделать, читайте далее. ИССЛЕДОВАНИЕ Для начала я установил на компьютере SoftICE и настроил его так как описано в статье «С чего начинать?». Для таких же как я начинающих, отмечу, что при установ- ке SoftICE сам определяет видеокарту и пытается использовать ее родной драйвер. Здесь главное не поддаться искушению и поступить так, как указано в совете номер один из вышеуказанной статьи, иначе наловитесь всяких ошибок и забудете про иной другой выход из Windows95, кроме как по кнопке Reset (как говорится, проверено на себе). Еще я пользовался дизассемблером WinDasm и редактором QuickView (все программы можно найти в разделе Инструменты). Запустив mIRC32, я посмотрел в меню Help/Register... При выборе данного пункта выводится окошко с предложением ввести имя и регистрационный код и нажать кноп- ку Register. При вводе имени и кода (любых) появляется окно с надписью о том, что все неправильно и надо пытаться сделать все по новой (далее назову его «окно отка- за»). Сначала я пытался остановить программу mIRC в месте ввода кода и имени уста- новкой прерывания по функции MessageBoxA() (так как по названию программы сразу видно, что она 32-разрядная, использую функции с А на конце): bpx MessageBoxA Не помогает. Пробую: bpx GetDlgItemTextА Тоже самое. Перепробовал я много разных функций. Поймать этот момент можно по двум : bpx hmemcpy (как учит нас Эдуард Титов в сборнике статей о исследовании программ) и bpx SendDlgItemMessageA. Вторая более предпочтительна. Небольшая особенность, с которой я столкнулся: после прерывания по SendDialogItemMessage() при нажатии F12 в SoftICE я не толь- ко выходил из функции SendDLgItemMessageA() но и «пролетал» по коду mIRC, по- путно получая «окно отказа» со звуковым сигналом и оказывался опять в каком-то модуле Windows. То есть уже после момента анализа программой вводимой мною информации. Тогда после прерывания по SendDLgItemMessageA() я стал нажимать клавишу F10 и следить за именем модуля в окне кода SoftICE. После около 200 нажатий и «путеше- ствия» из модуля Kernel32 в модуль User32 и обратно, я все-таки оказался в модуле mirc32 по адресу 0043D19Bh. Участок программы по этому адресу, выглядит в WinDasm следующим образом:
Во внутреннем устройстве Windows 95 я, человек, не сильно опытный, но мне по- казалось, что после получения имени и кода (функции со словом Dlg в названии) идет вызов какой-то процедуры по адресу 0043D1BFh. А перед этим в стек заносится два адреса. Поставив прерывание на адрес 043D1BAh можно посмотреть содержимое этих адресов командой db 04d1bb4 и db 04d1E70 (или установив курсор на адрес в окне кода и, нажав правую кнопку мыши, выбрать в появившемся меню пункт Display):
Значит, вызывается поцедура анализа этих данных. После нее мы видим проверку и переход , если EAX равен нулю. Посмотрев, куда осуществляется переход, Вы уви- дите, что это вывод «окна отказа» и звукового сигнала (функция MessageBeep() сразу после перехода и ссылка на строку):
Казалось бы тут можно просто поменять условие перехода или вообще убрать сам переход. Забегая вперед скажу, что можно так и сделать. Но в тот момент у меня зак- ралось сомнение, а вдруг внутри этой процедуры происходит, что-то эдакое, что зас- тавит программу в дальнейшем «увидеть», что она взломана. Например при проверке ставится какой-то флаг, где-нибудь в ячейке памяти, ука- зывающий, то мол все нормально, код проверен. Также хотелось увидеть какой правильный код соответствует моему имени. Про- трассировав всю подпрограмму клавишей F8 в SoftICE я не смог уловить подробно, что она такое делает с введенным именем и кодом. Видно, что что-то делает, и как-то проверяет , но что именно? Разобраться в хитросплетении команд сдвигов и сумми- рования , а также вызове еще нескольких подпрограмм я не смог (а, вобщем-то, и не пытался). Единственное, я попытался проследить за содержимым памяти, не появит- ся ли где мой «правильный» код. Кода нигде не было и в при выходе из этой процеду- ры я увидел следующее:
Очевидно, что здесь производится последняя проверка и по ее результатам выс- тавляется содержимое регистра EAX. Так как больше никаких ячеек памяти после финальной проверки не модифицируется, я сделал вывод, что никаких флагов о пра- вильности проверки программа больше не ставит. Она просто проверяет введенные данные на соответсвие своим и без генерации правильного пароля устанваливает EAX в 1 (True), если все нормально и в 0 (False), если есть проблемы. Хоть я так и не увидел своего «правильного» кода, я ввел по адресу 0048E686h пару NOP и тем самым сделал процедуру регистрации автоматической независимо от введенной информации. Но на этом все не закончилось. Дальнейший анализ показал, что зарегистрирован- ная программа пишет в файл mirc.ini строки типа:
Я попытался подписать такие строки в mirc.ini незарегистрированной программы, но зарегистрированной она от этого отнюдь не стала. Зато обнаружилась следующая интересная деталь: после запуска незарегистрированной версии, версия которая была «зарегистрирована» вышеописанным образом становилась незарегистрированной вновь. Поначалу мне начали мерещиться «секретные флаги» о которых я не узнал, но все оказалось гораздо проще. Зарегистрированная mIRC32 записывает в реестр, в разделе HKEY_Current_User/Software/Mirc некий код (вот для чего процедура кру- тилась) и введенное имя. А незарегистрированная mIRC32 при запуске все это удаля- ет. И потом зарегистрированная mIRC32 не найдя в реестре этих данных становится опять незарегистрированной. Вообщем, сама процедура регистрации, видимо, и со- стоит в этой модификации реестра. Естественно после вышеописанной «доработки» разрегистрированный mIRC32 можно без проблем опять зарегистрировать и пока записи в реестре сохраняются, он будет работать без проблем. Регистрация программы mIRC32 v5.41: описание первого самостоятельного исследования программы, которая является Shareware и требует регистрации после 30 дней использования. Автор описывает свой опыт исследования программы, включая использование дизассембле Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: Исследование программ ::
|
|||||||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |