Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
FDR 2.1 — великолепная программа, предназначенная для качественного восстановления разрушенных дискет. И хотя мне не довелось ее испытать в работе (последнее время у меня дискеты не рушились), подобная утилита всегда должна быть под рукой.
Довольно витиеватый графический интерфейс, стилизованный под ранний MicroSoft, но выполненный аккуратно и со вкусом. В общем, прога мне так понравилась, что даже возникло желание потратить свои кровные 5$ на регистрацию, ибо она того стоила. Но... мы живем не в идеальном мире...
Краем уха я слышал о якобы "крутой" защите FDR, что не могло меня (как любопытного человека) оставить равнодушным.
Вскрытие этой программы разочарования не оставило, хотя и не было сложным. Очень простая защита в простом варианте ее реализации. Антиотладочные приемы были, но увы безнадежно устаревшие. Например, в таблицу векторов прерываний записывались константы, которыми спустя некоторое время расшифровывался один фрагмент. Наивно, да? Правда, сам файл зашифрованный, причем он активно взаимодействует со своим телом на диске, поэтому расшифровка его приведет к краху программы. Но это лишняя головная боль для автора, а хакеры, вооруженные TSR-падчерами, мгновенно сведут на на нет его усилия.
Единственный привлекательный в защите момент (настойчиво рекомендуемый мною всем авторам защит) — то, что регистрационный номер нигде явно не проверяется (проверяется только CRC), а сам используется для =расшифровки== некоторой критической секции кода. Правильно реализовав этот метод, можно было бы сделать взлом по меньшей мере нецелесообразным или сводящимся к утомительному поиску ключа (хотя, имея в наличии хотя бы одну зарегистрированную копию, можно было вычислить пароль). Но увы, данная защита реализована с ошибками. Сдается, что она расшифровывает не "недостающий код", а процедуру, которая, цепляясь на int 21h, "откликается" на вызов модуля защиты. Таким образом, это можно вскрыть приемлемыми усилиями, даже не имея ни одной легальной копии. Впрочем, мне повезло. Одна легальная копия была в моем распоряжении, поэтому не составило труда разобраться в механизме генерации паролей и составить key-generator.
Ниже я предоставляю исчерпывающую информацию, необходимую для написания собственного генератора. В поле "Name" вводится текстовая строка до 24 символов, из которых недостающие символы заполняются пробелами. В поле "reg code" вводится ASCII- строка шестнадцатиричных символов '0-F', которая преобразуется в числовую последовательность (назовем ее ключом) несколько необычным способом. Младший и старший полубайты инвертированы, т.е. ТГ преобразуется в IFh. Ключ представляет собой следующую структуру:
Данные
С R С Шифрованное по паролю выше -имя-
(слово) (не менее 20 символов)
Первые четыре ASCII-символа (т.е. одно слово) — это CRC. Алгоритм подсчета CRC следующий. Сумма 18h ASCII кодов имени (недостающие дополняются пробелами) складывается с побайтовой суммой в "д а иных" ключа (в числовом представлении!), а затем дополняется до нуля.
Т.е. CRC+sum(#Name)+sum(OxKeyDate) = 0. Данные получаются шифрованием имени по магическому слову 'Pink Floyd' следующим алгоритмом, который демонстрирует следующий ассемблерный фрагмент:
XOR BX, BX unsigned char А, В = 0;
MOV CX, OAh for (c=0;c<OxA;c++)
s_repeat: (
ADD AH, [BX+Offset _Names] A+=_Name[c];
MOV AL, [BX+Offset _Magic] B=_Magic[c];
SUB AL, AH B-=A;
XOR AL, 49h B= В " 0х49;
MOV [_KeyDate+BX), AL _KeyDate[c]=B;
INC BX C++;
LOOP s_repeat }
Однако я не сторонник генераторов серийных номеров. Я предпочитаю "выкусывать" защиту из тела программы, и если мне захочется покопаться в ней, то я это сделаю.
Дата публикования: 2014-12-08; Прочитано: 237 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!