
Исследование защиты программы Sharp World Clock

Скриншот программы Sharp World Clock
Программа Sharp World Clock позволяет добавлять на рабочий стол виджеты с различным мировым временем по городам и часовым поясам. Хорошее подспорье для столичных менеджеров, которые постоянно забывают, что в Петропавловске-Камчатском - полночь.
Скачиваем дистрибутив последней версии, устанавливаем, смотрим. Главный исполняемый файл написан на дотнете, а также накрыт обфускатором.

Снимаем обфускатор
Снимаем обфускацию с помощью de4dot, после чего отправляем файл на анализ в dnSpy. Никогда не перестану повторять, что на сегодняшний день это лучший инструмент для реверса и анализа дотнетовских приложений.

Окно регистрации
Параллельно посмотрим, как выполняется активация. Онлайновый вариант нам сразу не подходит, было бы странно вообще предположить, что сервер примет какой-то левый серийник. А вот активация в оффлайне - это совсем другое дело. К тому же программа сама любезно подсказывает какого формата серийник ей нужен. Ок, давайте введем что-нибудь типа "1111-1111-1111-0000-0000-0000-0000-0000", лишь бы строка соответствовала формату.
Вторым пунктом инструкции по активации следует "Save". Нажимаем. Программа предлагает сохранить текстовый файл с именем "Sharp World Clock License Info.txt", у меня получилось что-то типа такого:
************************************************************
************ Sharp World Clock 9.6.4 *********************
************************************************************
***************** License Key ******************************
1111-1111-1111-0000-0000-0000-0000-0000
************************************************************
***************** Computer-ID ******************************
xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxx
************************************************************
Send this to the author for an offline activation key:
http://www.programming.de/index.php/contact
************************************************************
Как видите, тут присутствует уникальный идентификатор компьютера, к которому будет выполнена привязка копии программы. По идее вы должны отправить его авторам, они сгенерят под него ключ активации и пришлют обратно. Затем его надо будет ввести в соответствующее поле в окне активации и все заработает.

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

Сообщение о неправильной активации
Если ввести левую строку, но правильного формата, то программа реагирует вот таким сообщением. Отлично, все исходные данные у нас имеются, переходим в dnSpy.

Функция проверки активации
Поиском по строке сообщения выходим на следующий код. Тут выполняется сравнение результатов еще одной функции проверки и значения из поля ввода.

Ставим точку останова
Ставим точку останова на строку 295, запускаем программу и повторяем активацию с тем же левым серийником и левым кодом активации. Когда точка останова сработает, надо пройти эту команду один раз в пошаговом режиме.

Проверяемые значения
В окне локальных переменных обнаружится некоторое количество характерных строк. Тут код компьютера, введенный серийный номер, а в самом конце будет еще одна строка, у меня это "D8E8-18BF-1275-8C3A-5762-B505-F809-95EA". И вот именно с ней выполняется сравнение введенного кода активации. Несложно понять, что перед нами искомый код активации для нашего левого серийника. Закрываем отладку, выходим из dnSpy.

Программа успешно зарегистрирована
Запускаем программу в обычном режиме, повторяем оффлайновую активацию с тем же левым серийником, но с найденным кодом активации. Программа благодарит за активацию. Цель достигнута. При желании можно декомпилировать метод, где проверяется активация, и заменить вывод сообщения на вывод результата функции проверки. Тогда программа будет работать как генератор ключей активации для конкретного компьютера, любезно подсказывая пользователю, что ему надо ввести. Но это уже вам в качестве домашнего задания.
Просмотров: 691 | Комментариев: 3
Метки: исследование защиты, .NET

Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
Илья
(04.11.2023 в 08:53):
de4dot не справляется с деобфускацией данного файла. Посмотрите, у вас if (a7.a() == ...), а также после такой деобфускации он не компилируется.

ManHunter
(31.10.2023 в 13:38):
Надо прочитать статью дальше первого абзаца.

adnext
(31.10.2023 в 13:24):
Здравствуйте, а если net обфусцирован, как поступать?
Спасибо.
Спасибо.

Добавить комментарий
Заполните форму для добавления комментария
