[c] Chaos Computer Russian Magazine. WRiTER:  D()CT()r [c] D.i.P.G. Hack Lab's  "Слово и Дело" текстовый редактор Вот решил немного поделиться впечатлениями о системе защиты в ре- дакторе WD (ВД - в народе "Ведро Дерьма") (слово и дело). Мои впечат- ления немного жутковаты. Следя за новыми версиями редактора я почему- то подумал, что Гутников (автор) больше наворачивает защиту самого редактора чем его функциональные возможности. Сам я как-то пробовал хакать WD по молодости, но написать ключеделку было ломы. И вот мне попалось описания крека/кеймэйкера для WD 7.40 от VLAD. И я решил привести его в сокращениях и выгрызках (да простит меня VLAD). Мои коментарии помечены **> ───────────────────────────────────────────────────────────────────── [....] Замеченные ГЛЮКИ. 1) нельзя редактировать шрифты ни с постоянным ключом, ни с временным (во всяком случае в моей версии редактора). **> Оказалось г-н Гутников "вынял" кусок кода в Shareware версии для **> редактирования шрифтов. Такая "феня" идет начиная с версии 7.30a **> и последняя у меня 7.70 2) регистрированный с постоянным ключом редактор при двойном нажатии левой кнопки мыши на пункте верхнего меню или при переходе с одного пункта на другой повисает (этот глюк отсутствует при регистрации с временным ключом) **> В 7.70 этот глюк пофиксен. [....] Получение ключей регистрации. С ключом /g осуществляется перебор чисел в диапазоне 1 .. 999999 и для каждого числа проверяется выполнение нескольких условий. Из за большого объема вычислений этот алгоритм оказался довольно мед- ленным (а на старых машинах это может быть очень заметно), поэтому мной разработан "ускоренный" вариант перебора, реализуемый с ключом /f, основанный на изучении поведения функции, используемой Автором для преобразований во время проверки ключа. (По моим наблюдениям в каждой сотне тысяч существуют всего 2 постоянных ключа и 2 временных, а также ключи свыше 999999 (и постоянные и временные) вычисляются по формуле K + N * 100000, где K - это ключ из интервала 900000 .. 999999, N - це- лое > 0, т.е. существенными являются только первые 20 постоянных клю- чей, хотя в программе под ключ отводится 4 байта и соответственно клю- чи могут лежать в диапазоне от 1 до 0FFFFh = 4294967295.) ! Почему генерится столько ключей если любой из них подходит??? Да по- тому что первые 20 ключей существенно различны и кроме того у меня не заработало редактирование шрифтов ни с первым подобранным ключом, ни с последующими. (Может быть у Вас заработает, но Imho так было задумано). И кроме того я уверен (ну почти) что запустив _СВОЮ_ ко- пию WD.COM с ключом $ XXXXXX при любом XXXXXX я не смогу редактиро- вать шрифты, так как только на эти 20 постоянных ключей он говорит "РЕГИСТРИРОВАН". Либо редактировать шрифты надо как то хитро и об этом не сказано в WD.HLP. ! Медленный алгоритм должен работать на 100% (ну я так думаю ;), быс- трый же не обязательно (но у меня и всех моих друзей он работает). [....] Формат ключевой метки. Свою ключевую метку (далее KEY_LABEL) WD обычно хранит на ин- женерном цилиндре жесткого диска (кроме некоторых случаев когда, нап- ример, когда количество цилиндров жесткого диска > 1024 и первая Partition неактивна), а номера головки и сектора получаются после преобразований над байтами из BIOS и поэтому на каждой машине уника- льны. KEY_LABEL это 9 байт, находящиеся по смещению 01F0h в key sector: 01F0: Word - CRC2 = F2(CRC1) 01F2: Byte - контрольный байт 01F3: Byte - счетчик запусков 01F4: Word - CRC1 = F1(BIOS, CPU) 01F6: Byte - RANDOM по которому шифруется KEY_LABEL 01F7: Byte - сумма байтов незашифрованной области 01F0h - 01F5h + D0h mod 256 01F8: Byte - байт, от младшей десятичной цифры которого зависит A-XXXXXX [.....] Реакция редактора на изменение KEY_LABEL. Контрольный байт по смещению 01F2h показывает, регистрирован ли WD и с каким ключом. Если туда поместить A2h то WD будет зарегис- трирован с временным ключом. Чтобы узнать значение байта для постоян- ного ключа запустите wd_740.com /r а затем wd_740.com /e (у меня и моих друзей этот байт равен 73h и есть подозрение что он бу- дет таким и на других машинах). При других значениях байта WD будет нерегистрированным. Первоначально устанавливается в 08h. Байт по смещению 01F3h - это счетчик запусков редактора. Пер- воначально он устанавливается в FEh. У WD в зависимости от этого байта есть разные способы реакции на нерегистрированность: 1) [01F3h] >= F0h - пишет при выходе: Unregistered copy ... 2) E6h <= [01F3h] < F0h - в среднем при каждом четвертом запуске реда- ктора получаем сообщение о нерегистрированной копии + при выходе: Unregistered ... 3) C8h <= [01F3h] < E6h - теперь при каждом запуске редактора получаем это сообщение + при выходе: Unregistered copy ... 4) [01F3h] < C8h - (вообще сказка!!!) после каждых 32-ух символов в буфере клавиатуры вылетает это противное окно + при выходе: Unregistered copy ... ! Если у Вас временный ключ, то пока [01F3h] >= A0h против Вас не при- меняется никаких вредных действий, зато когда истекает период испо- льзования ключа - вы получаете по полной программе ;) (смотри 4). При нажатии на кнопку "Регистрация" получаете вместо "РЕГИСТРИРОВАН" свой регистрационный номер, кроме того не работает обещанное редак- тирование шрифтов с временным ключом :(. В программе не предусмотре- но увеличение счетчика запусков кроме того случая когда слетает KEY_LABEL ( [01F7h] не совпадает с вычисленной суммой), поэтому если время использования ключа закончилось то повторный его ввод ничего не даст. ! Счетчик уменьшается в среднем 3 раза на каждые 32 запуска редактора. Байт по смещению 01F8h определяет какой регистрационный номер выдаст WD в пункте "Регистрация". Вообще то используется весь байт, но похоже что влияние оказывает только младшая ДЕСЯТИЧНАЯ цифра этого ба- йта (это последняя цифра регистрационного номера), во всяком случае у меня номера циклически повторяются при изменении [01F8h] с шагом 10. [.....] Проблемы с mouse после регистрации с постоянным ключом. При двойном нажатии левой кнопки мыши на пункте меню или при переходе из одного пункта меню в другой вылетает знакомое окно с сооб- щением ;) и после нажатия на кнопку "Условия регистрации ..." машина подвисает. Причина этого меня очень удивила: пока редактор нерегистри- рован - проходим мимо куска кода, стоит только зарегистрироваться с постоянным ключом - попадаем на этот код, получаем менюшку с "Усло- виями ..." и уходим в "никуда". Выхода тут как минимум два: либо на- писАть резидентный патч (может и сам напишу если ломы отпустят или ес- ли кто захочет - скажу где править и что - там достаточно заменить всего один байт), либо (что в данной ситуации Imho более правильно) пользоваться временным ключом - благо счетчик теперь можно установить без проблем. 03.01.97 С уважением == VLAD == 2:5022/2.30 P.S. За всю свою недолгую историю взлома программ я не встречал более изощренной защиты чем применил Гутников - это не просто навесная "приблуда", а умело вплетенный в тело программы многоуровневый МОНСТР ;-)) (я лично не занимался такими подсчетами, но по моим впечатлениям заметную часть кода программы занимают только защит- ные функции и разного рода проверки, причем код программы распо- ложен не только в WD.COM, но и в WD.FNT) .