Исследование защиты программы Diving Log
Скриншот программы Diving Log
Diving Log - программа для дайверов, электронный журнал погружений. Позволяет вести подробную статистику погружений, импортировать данные с дайв-компьютеров и приложений, сохранять результаты в различные форматы. По сути это база данных, узкозаточенная для любителей подводного плавания. Для превращения демо-версии на 10 записей в полноценную версию требуется выложить почти сорок евро. На фоне стоимости оборудования для дайвинга это может показаться незначительной суммой, но, как говорится, копейка рубль бережет.
Забираем с офсайта дистрибутив, устанавливаем, смотрим. Еще при установке инсталлятор предупреждает, что для работы программы требуется .NET Framework, так что было б странным сомневаться, на чем оно все написано. Для регистрации программа открывает вот такую форму.
Окно для ввода серийного номера
На ввод левых регистрационных данных программа никак не реагирует. Со стороны автора это правильное решение, меньше возможности для нахождения зацепок.
В наше время сложно найти программу на дотнете, которая не была бы обработана тем или иным обфускатором. Diving Log не исключение. Скармливаем главный исполняемый файл de4dot, но указываем параметр "--dont-rename", как он просит. Деобфускация проходит без проблем.
Снимаем обфускатор
Отправляем распакованный файл в dnSpy, затем в дереве ресурсов в модуле "Divinglog" находим форму регистрации "frmReg":
Форма регистрации в ресурсах
Последовательным просмотром ее обработчиков выходим на обработку изменения текста в поле регистрационного имени:
Вызов функции проверки
Тут нас интересует вызов функции с характерным именем "CheckCode60". Кликом на названии переходим на эту функцию, где, в свою очередь, вызывается еще одна функция с таким же названием. Еще один клик и нашему взору открывается замечательная картина. Весь алгоритм генерации серийного номера содержится во втором экземпляре функции "CheckCode60". Можно просто скопировать в кейген и будет готовый релиз. Я в писательстве на дотнете не силен, так что это останется вам в качестве домашнего задания. А вот отследить правильную регистрационную пару можно прямо в dnSpy.
Алгоритм генерации серийника
Ставим точку останова (F9) на команду return, запускаем программу на выполнение, повторяем регистрацию. Проверка выполняется после каждого введенного символа, так что лучше набрать регистрационное имя где-нибудь в Блокнотике, а потом просто вставить в соответствующее поле. Когда точка останова сработает, в логе переменных будет следуюшая картина:
Значения переменных
То есть регистрационному имени "ManHunter / PCL" соответствует правильный серийный номер "DL6.0-284-0498856270". Деактивируем точку останова и повторяем регистрацию с найденными данными.
Регистрационный номер правильный
На этот раз при вводе серийника рядом с полем появляется зеленая галочка, что сигнализирует о правильности введенных данных.
Программа успешно зарегистрирована
В окне "О программе" красуется регистрационное имя и серийник.
Программа успешно зарегистрирована
После перезапуска программы эта же информация отображается на стартовом экране. Из меню пропали пункты, относящиеся к покупке и регистрации. Ограничений по функционалу тоже нет. Цель достигнута.
Просмотров: 996 | Комментариев: 1
Метки: исследование защиты, .NET
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
voffka
(09.01.2022 в 22:12):
Пляски с de4dot тут лишние, exe чистый.
Добавить комментарий
Заполните форму для добавления комментария