русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Принудительная регистрация


Дата добавления: 2015-06-12; просмотров: 583; Нарушение авторских прав


Несмотря на то, что раздражающий NAG успешно убран, программа остается незарегистрированной и честно пишет в заголовке окна: "evolution copy". А если нажать "About", мы увидим "40 days trial copy". И хотя никаких ограничений в демонстрационной версии нет, чисто психологически работать с зарегистрированной копией намного приятнее.

Известно, что регистрация осуществляется с помощью ключевого файла с электронной подписью, сгенерированной на криптографической основе с таким расчетом, чтобы подделка ключа была невозможной. Все это так, но ведь нам не нужен ключ! Мы хотим установить флаг регистрации! А как его найти? Вернемся к листингу 2. Выше уже известной нам инструкции "cmp eax, 28h" ополчилась целая серия условных переходов, при определенных обстоятельствах перепрыгивающих через этот противный диалог. Очевидно, один из них принадлежит флагу регистрации (ведь у зарегистрированных пользователей NAG не выводится), но как определить, какой из них - какой?

Будем действовать по плану (план - эта такая шутка, что растет во дворе). Назначение переменной byte_495A60 определяется сразу. При выводе диалога сюда записывается 1, то есть диалог уже выведен и повторно выводить его не нужно. С переменной dword_4B3A90 разобраться гораздо сложнее. Чтобы узнать, кем она используется и для чего, необходимо просмотреть перекрестные ссылки. Подводим курсор к имени переменной, вызываем контекстное меню и выбираем пункт "jump to xref to operand" или просто нажимаем <X>. Появляется следующее окно (см. рис. 6):

Рисунок 6.Исследование перекрестных ссылок.

Фу! Куча перекрестных ссылок по чтению (r) и записи (w), разбросанных по всему телу программы, среди которых доминируют dec и inc. На флаг регистрации это мало похоже. Скорее, это какой-то дикий семафор, использующийся для организации взаимоблокировок. В общем, запчасть от интерфейса. К переменной byte_4B7E00, ведут три перекрестные ссылки, две из которых находятся в непосредственной близости от функции DoDragDrop, так что их можно сразу откинуть.



А вот переменная byte_49F9BC - это настоящий клад. К ней ведет множество перекрестные ссылок на чтение и запись, но все записываемые значения возвращаются либо функцией sub_40DB5C, либо функций sub_44A278. И только одна ссылка ведет к команде mov byte_49F9BC, 0, принудительно сбрасывающей переменную в ноль.

При первом же взгляде на sub_44A278 бросаются в глаза текстовые строки "rarkey", заботливо оформленные дизассемблером как комментарии. Ага! Держи мыщъх'а за хвост! Похоже, это и есть процедура, ответственная за регистрацию. Подводим курсор к ее началу, нажимаем <N> и переименовываем ее в "DoRegister".

Рисунок 7.Дизассемблерный листинг функции DoRegister, выдающей себя текстовыми строками "rarkey".

С функцией sub_40DB5C разобраться тоже несложно. Достаточно проанализировать код, находящийся в самом начале DoRegister:

DoRegister proc near

...

0044A299 call sub_40DB5C

0044A29E test al, al

0044A2A0 jz short loc_44A2B6 ; продолжение регистрации

0044A2A2 mov al, 1

0044A2A4 mov edx, [ebp+var_11C]

0044A2AA mov large fs:0, edx

0044A2B1 jmp loc_44A40D ; на выход из функции

Листинг 3. Загадочная функция sub_40DB5C.

Если sub_40DB5C возвращает ноль, функция DoRegister продолжает регистрацию. Ненулевое значение приводит к немедленному выходу из функции. Логично предположить, что sub_40DB5C просто сообщает статус регистрации: ноль - не зарегистрирован, не ноль - зарегистрирован. Подведем курсор к началу sub_40DB5C и переименуем ее в "IsRegistered".

А давайте заставим IsRegistered всегда возвращать ненулевое значение! Тогда программа будет признана зарегистрированной, несмотря на то, что ключевого файла, заверенного электронной подписью, у нас нет (да и откуда бы ему взяться)!

Запускаем hiew, дважды нажимаем <ENTER> для перехода в дизассемблерный режим, давим <F5>, вводим ".40DB5C" (адрес функции IsRegistered), затем <F3> для перехода в режим редактирования и <ENTER> xor eax,eax <ENTER> inc eax <ENTER> retn <ESC> (обнулить регистр eax, тут же увеличить его на единицу и свалить из функции нахрен). Записываем изменения клавишей <F9> и выходим из hiew'а.

Надпись "evaluation copy" в заголовке окна послушно исчезает, а в окне About появляется строка "Registered to" (см. рис. 8)

Рисунок 8.Как демонстрационная версия стала зарегистрированной.

Правда, после добавления любого файла в архив, RAR-регистрация загадочным образом исчезает. А все потому, что мы забыли исправить команду "mov byte_49F9BC, 0", расположенную по смещению 44D049h на "mov byte_49F9BC, 1". Сделаем это и тогда надпись evaluation copy никогда не появится!



<== предыдущая лекция | следующая лекция ==>
Подавление NAG'а | Чистый взлом или укрощение about'а


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.232 сек.