Blog. Just Blog

Исследование защиты программы Date Time Counter

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Темная сторона Силы | Автор: ManHunter
Скриншот программы Date Time Counter
Скриншот программы Date Time Counter

Военная мудрость гласит: "Eсли твоя голова как унитаз и в ней ничего не держится, заведи записную книжку. А лучше две, как у меня". Программа Date Time Counter представляет собой что-то вроде такой записной книжки, куда можно заносить предстоящие события и смотреть, сколько дней и часов осталось до наступления той или иной даты. Если бы не шароварность, то можно было бы даже посоветовать к использованию.

Забираем с офсайта дистрибутив, устанавливаем, смотрим. Приложение написано на дотнете, значит обычный дизассемблер нам не помощник, воспользуемся проверенным dnSpy. Но сперва определимся, что будем искать. Для этого попробуем зарегистрировать программу каким-нибудь левым ключом.

Сообщение о неправильной регистрации
Сообщение о неправильной регистрации

Интерфейс мультиязычный, все строки хранятся в соответствующих языковых файлах, которые ожидаемо находятся в папке \langs. Находим тег с сообщением:

<error_key text="Please input the correct license key." />
Имя тега - error_key, значит в файле будем искать именно эту строку. Выбираем тип поиска "Число/строка", обнаружится единственный результат, это функция с характерным названием "cmsLicense_ItemClicked".

Строка найдена
Строка найдена

Двойной клик на названии, пару секунд на декомпиляцию и получаем следующий код:

Код вывода сообщения
Код вывода сообщения

Код чистый и очень понятный, даже если вы не пишете на дотнете. Чуть выше вывода сообщения обнаруживается интересная проверка с таким же характерным названием SelfService.VerifyKey. Переходим туда, и видим ни что иное, как проверку введенного серийного номера.

Первая проверка
Первая проверка

Вот и первая проверка. Аффтар любезно палит нам формат ключа и в придачу дарит валидный ключ NDTC-XYMM-TMSG-MGDY, который работал с предыдущей версией. Похоже, что когда-то программа раздавалась на сервисах типа GAOTD и в текущей версии этот ключ заблокирован. Самый простой вариант лечения пациента - сохранить ключик в сухом прохладном месте, найти и пропатчить строчку в файле и попробовать регистрацию. Все получилось! Значит как минимум формат ключа с прошлой версии не изменился. Попробуем разобрать алгоритм проверки серийного номера. Листаем код дальше.

Проверка формата серийника
Проверка формата серийника

Тут тоже все понятно. Сравнивается подстрока из первых 4 символов со строкой "NDTC", следующий символ должен быть "-", именно это мы и видим в валидном серийнике. Значит серийный номер всегда должен начинаться с этой строки. Смотрим дальше. Несколько похожих проверок типа таких:

text2 = SelfService.Letter2Num(text.Substring(5, 2));
if (Conversions.ToInteger(text2) > 59 ....

Из строки серийника выбираются несколько групп по два символа, затем над ними выполняется какое-то преобразование, результат преобразования конвертируется в число и сравнивается с граничными значениями. Переходим к функции с говорящим названием SelfService.Letter2Num.

Функция преобразования строки
Функция преобразования строки

И тоже ничего сложного. Символы преобразуемой строки заменяются на цифры. Если откинуть весь говнокод (я надеюсь, что это просто компилятор постарался, потому что хомо сапиенс в трезвом уме не мог написать такое), то останется вот такое правило подстановки: C=8, D=4, G=9, J=6, K=3, M=1, S=5, T=0, X=2, Y=7. Остальные символы считаются запрещенными и приводят к ошибке.

Проверим второй блок символов из валидного серийника на соответствие правилам: "XY" = 27 (не больше 59 и не меньше 0), "MM" = 11 (не больше 12 и не меньше 1). Все нормально, едем дальше.

Проверка типа лицензии
Проверка типа лицензии

Вторая пара символов из третьей группы серийника может принимать строго фиксированное значение из списка "SG", "PS", "HM", "TM", "EP". Как выяснилось позднее, это тип лицензии. Впрочем, на функционал программы тип лицензии никак не влияет.

Проверка количества лицензий
Проверка количества лицензий

Дальше проверяется длина серийника и тип лицензии. Для одиночной лицензии длина остается 19 символов, для мультилицензий к серийнику через черточку дописывается закодированное количество лицензий от 11 до 999999. Теперь можно взять заблокированный серийный номер и на его основе сделать новый, но уже рабочий. Последние символы четвертой группы в проверках не используются, поменяем их на любые другие, например, NDTC-XYMM-TMSG-MGMH или даже можно смастерить мультилицензионный ключик NDTC-XYMM-TMEP-MGMH-TTTJJJ. Проверяем.

Программа успешно зарегистрирована
Программа успешно зарегистрирована

Программа успешно зарегистрирована
Программа успешно зарегистрирована

Вот и все. Данные для преобразований есть, формат ключа известен, граничные значения можно посмотреть в функции проверки. Теперь вы сможете легко написать генератор ключей.

Поделиться ссылкой ВКонтакте
Просмотров: 2066 | Комментариев: 8

Внимание! Статья опубликована больше года назад, информация могла устареть!

Комментарии

Отзывы посетителей сайта о статье
user (23.09.2017 в 18:54):
.. Вот оффлайн копия офсайта BirthdayMillenium
Полный фарш:
old-dos.ru/dl.php?id=14372
Оффтоп конечно, но всёже
user (23.09.2017 в 18:42):
Но интерфейс у программы дубовый.
Для заявленной цели пользуюсь старинной программой-напоминашкой
"Birthday Millenium"
Arttomov (11.09.2017 в 11:39):
Спасибо за статью,всё изложено кратко лаконично и доступно.
Успехов Вам
ManHunter (02.09.2017 в 08:40):
Я-то думал, там софтина реально читает из реестра триальные метки всяких защит и программ, расшифровывает их, да чо. А оказалось просто конвертер из TIMESTAMP в дату.
Noobie (02.09.2017 в 08:10):
>DCode от Digital Detective
Кажется, оно самое, сразу нашел у себя в закромах. Весьма благодарен за помощь!
Игорь (01.09.2017 в 14:59):
В последнее время ловлю себя на мысли, что чтений статей раздела "Темная сторона силы" увлекает, как детективный сериал с продолжением...
Anonplus (01.09.2017 в 02:05):
DCode от Digital Detective, например. Или WinHex.
Noobie (31.08.2017 в 18:13):
Респект за труд, мое самое больное место - гребаный дотнет, хоть чуток поумнее после таких статей становлюсь :-)

Есть вопросец, почти по сабжу - как-то попалась софтина с такой полезной функцией, как вычисление даты, времени и всего прочего по триальным меткам в реестре. То есть преобразование хекс кода метки во вполне понятные годы, месяцы, дни и так далее. Но проклятый склероз напрочь удалил название этой софтины. Может кто сумеет подсказать искомое? Может быть это была крякерская утилита, может быть функция некой программы, не могу сказать точно. Но ее суть запомнил твердо, поскольку часто приходится с этим сталкиваться при кряках.

Добавить комментарий

Заполните форму для добавления комментария
Имя*:
Текст комментария (не более 2000 символов)*:

*Все поля обязательны для заполнения.
Комментарии, содержащие рекламу, ненормативную лексику, оскорбления и т.п., а также флуд и сообщения не по теме, будут удаляться. Нарушителям может быть заблокирован доступ к сайту.
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2024
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.09 сек. / MySQL: 2 (0.0072 сек.) / Память: 4.5 Mb
Наверх