Исследование защиты FTPControlDelphi , Программа и Интерфейс , Исследование программИсследование защиты FTPControl
Введение Данная программа - хороший FTP-клиент, который позволяет соединяться с FTP-серверами и обеспечивает полный набор услуг такого рода. Получить shareware версию можно на узле компании-производителя http://www.ftpcontrol.com/. Для проведения исследования использовалась версия 2.9 build 5. Инструменты
Исследование При каждом запуске программа выдает окно с сообщением о том, что она незарегистрированная и осталось определенное число дней до окончания срока действия evaluation copy. Тут же можно нажать на кнопку Register и ввести имя и код. Следует отметить, что программа не докучает своими сообщениями о регистрации, и сообщение при запуске можно отключить. Однако после 30 дней использования программы со дня установки, она "сворачивается" в версию light, и целый ряд функций данной программы становится недоступным. Использование нормальной (не "light" версии) более 30 дней возможно достичь двумя путями:
Первый из вышеуказанных способов описан в сборнике Cracking Tutorial (статья CpuIdle - временная защита), поэтому останавливаться на нем не будем. Отмечу только, что описание вышеуказанной статьи полностью применимо в данном случае, только дату нужно поставить свою(кто так и не понял о чем речь, отсылаю к сборнику Cracking Tutorial ). Далее я рассмотрю второй способ, а именно "регистрацию". Итак, регистрацию, как выясняется из меню HELP, можно осуществить получив после оплаты регистрационный номер, который надо вводить в меню HELP/SHAREWARE NOTES/REGISTER. Обращаю внимание на то, что здесь есть еще некоторые пункты меню посвященные регистрации, где надо, в частности, вводить номер кредитной карточки и прочие личные данные, но речь идет не о них. Итак, при выборе вышеуказанного пункта появляется окно с предложением ввести Имя и Номер, а ниже уже стоит адрес Вашей электронной почты, который программа просит указать еще при инсталляции, т.к. это требуется при подключении к FTP серверам в анонимном режиме. После введения имени и номера появляется типичный MessageBox со словами IDKeyInvalid. Ставим в SoftIce контрольную точку на вызов MessageBox():
и после выхода в отладчик, нажимаем F12 и видим код, где вызывается данная функция. Я не привожу здесь этот код, так как он бесполезен. Просмотр данного места в WinDasm говорит о том, что это код общей процедуры вызова любого MessageBox(), о чем в частности видно по строке:
далее будет MessageBoxA() Зададим в WinDasm поиск по слову "IDKeyInvalid" и находим следующее место:
Здесь уже более интересно, просмотрев код от адреса 4E2320D вверх, видим идентичный кусок программы, но уже со строкой:
Очевидно, что мы находимся в месте где заканчиваются все неудачные регистрации, и попадаем мы сюда из адреса 4E2B28. Т.е. отсюда:
Забегая вперед, скажу, что у меня было несколько неудачных попыток исследования защиты данной программы и забивание Nop'ами данного перехода входило в одну из них. Данная программа изобилует конструкциями типа try……………except, что видно из часто встречающегося кода типа:
В Win32 регистр FS указывает на структуру, где хранятся адреса обработчиков исключений и если программа модифицирует адрес fs:[eax], значит она добавляет свой обработчик исключений, который может делать все что угодно и, в конце концов, не возвращаться в процедуру, где произошло исключение. В частности был такой момент, когда программа выдавала сообщение об удачной регистрации, но при следующем запуске все возвращалось "на круги своя". Поиски выхода из данной ситуации завели меня внутрь процедры по адресу: 004E2590, которая вызывается непосредственно перед переходом на неудачную регистрацию. Внутри данной процедуры есть такое место:
При прохождении отладчиком данного участка, можно увидеть, что [ebp-04] указывает на введенное Имя, а [ebp-08] указывает на введенный Номер. Причем указание идет неявное а через адрес, значение которого лежит по адресам, указанным [ebp-04] и [ebp-08]. Соответственно [ebp-0C] всегда указывает на двойное слово, состоящее из 4 нулей. Значит можно предположить, что там тоже должен быть какой-то адрес, который должен указывать на то с чем сравнивать Имя и Номер. Почему его там нет, сложный вопрос. Забегая вперед скажу, что программа после удачной проверки Имени и Номера переходит к процедуре соединиения с сервером компании производителя по Интернет. Может быть введенные данные передаются туда для проверки? Во всяком случае при отсутствии соединения регистрация программы прерывается и считается незавершенной, а копия остается Evaluation. Вобщем, не вдаваясь в подробности, я предположил, что по адресам 004e2610 и 004e2620 вызываются процедуры какого-то сравнения. А чтобы им было что с чем сравнивать , я просто поменял структуру [ebp-0C] в обоих случаях на структуру, которая используется в качестве второго параметра при вызове процедуры. Т.е. измененный код выглядит так:
Теперь при попытке регистрации, программа не выдает никаких "IDKeyInvalid", однако потом просит ввести имя какого-нибудь mail-сервера, для посылки информации о регистрации по интернету фирме-производителю. Естественно в процессе связи наверняка можно сделать какие-нибудь дополнительные проверки (например на предмет поступления долларов от пользователя на счет компании за регистрацию). Косвенно такие догадки подтверждает наличие в программе следующих комментариев WinDasm:
Соединившись с узлом компании Транссофт вы нигде не найдете ссылки на файл leg.txt. Однако вы легко можете получить данный файл по вышеуказанному URL. Там длинный список всяких имен и названий фирм, типа:
Как я понял, это список легальных пользователей программы, который дополняется во время регистрации. То есть leg. от сокращенного legal. Что интересно, в этой же директории http://www.transsoft.com/codes, лежит еще один список, который называется ill.txt. Он уже поинтереснее (и надо сказать гораздо меньше по обьему). Там можно увидеть вот что:
Ясно, что это список нелегальных пользователей, которых удалось распознать компании Транссофт, то есть ILLEGAL. Вобщем, чтобы избежать попадания в разные списки и закончить регистрацию, нужно прерваться где-нибудь после введения кода, например по адресу 4E2b21, и начинать выполнять программу пошагово без захода в процедуры (т.е.по F10), фиксируя появление окна, где предлагается ввести имя mail-сервера. Выяснилось, что данное окно появляется при вызове процедуры по адресу 004E2F90, причем, если невозможно соединиться с указанным mail-сервером, из процедуры возврата уже нет (видимо опять try…………except срабатывает). Рискнув предположить, что при удачном соединении и обмене информацией с сервером Транссофт, выход из процедуры осуществляется обычным образом, затираем код вызова процедуры по адресу 004E2F90 пятью Nop'ами и после "регистрации" получаем сообщение о том что она была "successful". После перезапуска убеждаемся, в том, что исчезли все напоминания об "Evaluation Period" а также, что в названии окна исчезло слово UNREGISTERED и появилось введенное Вами имя. Статья Исследование защиты FTPControl раздела Программа и Интерфейс Исследование программ может быть полезна для разработчиков на Delphi и FreePascal. Комментарии и вопросыМатериалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: Исследование программ ::
|
|||||||||||||||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |