Декомпилинг FoxPro на примере RostBif 4.2 Общепит. |
[Исследование] |
Subject: Cracking Target: RostBif 4.2 Общепит URL: rostbif.hypermart.net. Author: aSL! Date: 11.07.2001 |
Before starting! |
I. Вступление |
Здравствуйте мои маленькие любители прекрасного! :) Тут недавно наткнулся я на такую прогу, как RostBif 4.2
Общепит. Точнее, меня опросили ее поломать на предмет нахождения валидного
ключа. Посмотрел я на нее и мне стало немножко не по себе. Почему? Дело
в том, что она написана на Visual FoxPro 6.0, что является еще большим
геморроем, чем небезызвестный VB. (Не, ну чего тянет MS на интерпретируемые
продукты в P-коде?). Но как известно, невозможного не бывает. |
II. Постановка задачи |
|
III. Исследование |
Необходимые инструменты:
Итак, приступим... Загружаем жертву в ReFox... Опа! ReFox, умная девочка, сама нашла нам код стартера: Заходим туда. (Кстати, забыл сказать, что необходимо поставить в Options->Table
View в Record, иначе у нас ничего не получится. И видим такой код:
Что все это значит? А то, что автор оказался умным и попытался отключить ReFox. Но если версия целиком пропатчена, то это не страшно. Что же мы видим? А то, что в самом начале вызывается форма Start. Ищем ее. И скроллируем по компонентам: Что это? А это событие Click у кнопки "Пуск", т.е. то,
что происходит при клике на нее. Смотрим этот код внимательно. Меня в
первую очередь интересуют следующие строки: SET LIBRARY TO donlibr.prg Первым делом здесь выполняется функция USTSET из donlibr.fxp, а потом активным устанавливается класс Kronos.vcx. Смотрим дальше: IF THISFORM.IEDICT() Ага! тут значит из Kronos'а выполняется LOADING, а затем уже появляется форма "Введите пароль". Значит, именно в LOADING где-то и происходит проверка рег. кода. Ну что же. пора сдампить объект ROS из kronos.vcx. Ага: а вот и LOADING. А какие тут есть интересные строки, вы не находите?: IF CHESTRU(LCHES,LCKEY)=.F.Хех! Так вот ты какой, северный олень :) Значит всем тут заправляет функция CHESTRU, если она возвращает TRUE (.T.), то все пучком, а вот если FALSE (.F.), то все ... А что за CHESTRU и что за LCHES и LCKEY. Смотрим чуть выше: IF FILE('uconfig.dbf') Если существует uconfig.dbf, то продолжаем... Дальше идут функции открытия именно этого файла и т.д. Смотрим дальше: GOTO TOP Угу. Идем в начало базы данных, ищем строку, в поле CVALNAM которого записано 'CHES', после этого пишем в поле CVAL результат функции RECHES от имени организации (Справочники->Константы). Не забываем записать в LCHES и PCCHES этот результат. Смотрим дальше... Чуть ниже: GOTO TOP Идем в начало. Ищем строчку, в поле CVALNAM которой записано CKEY.
Читаем в LCKEY значение поля CVAL. Вот мы и выяснили откуда LCHES и
LCKEY. Из базы данных. Дальше. FUNCTION reches Вот и ответ на все наши вопросы. Рассмотрим сначала функцию reches. Дано CNAM. От нее берется контрольная сумма (к сожалению, я не знаю алгоритма, если кто знает - напишите). После этого над контрольной суммой делаются нехитрые преобразования, а именно функция CHRTRAN. Что она делает? Да элеметарно. Привожу вырезку из FoxPro HELP: CHRTRAN( ) FunctionReplaces each character in a character expression that matches a character in a second character expression with the corresponding character in a third character expression. Syntax CHRTRAN(cSearchedExpression, cSearchExpression, cReplacementExpression) [Skipped] Remarks CHRTRAN( ) translates the character expression cSearchedExpression using the translation expressions cSearchExpression and cReplacementExpression and returns the resulting character string. Т.е. это ни что иное, как шифр подстановкой (aka шифр Цезаря).
|
IV. Подводим итоги: |
Принцип генерации серийника мы раскрыли. Но не могу же оставить
все это просто так, без домашнего задания? Нееет. Не дождетесь. Ловите! Задача: найти этот пароль. (Кстати, с этим паролем можно заходить в программу и его нельзя сменить :) HINT: Проанализировать функцию retckey из модуля donlibr.fxp и места ее вызова. Вот собственно и все! :) |
Endnote: © 2001 aSL! (asl@aslsoft.com ) This essay can be freely distributed/ published/ printed etc... as long as no modifications are made in any way. Greets to: Everyone in UOFG www.uofg.com.ua. |