Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Subj: FDR2.1___________________________________



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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...