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

Скриншот программы TurboCollage
TurboCollage - мощная и очень удобная программа для создания эффектных коллажей из набора фотографий. По принципу работы TurboCollage похожа на программу Shape Collage, которую я активно использую при подготовке публикаций на этом сайте, только в TurboCollage есть интересные эффекты компоновки изображений, которые мне очень понравились. Так что мне тоже захотелось использовать ее в своей деятельности, естественно, не выкладывая за это ни копейки.
Забираем с сайта дистрибутив, устанавливаем, смотрим. Программа написана на дотнете, причем по ней дополнительно прошлись обфускатором. Это значит, что первым делом надо использовать утилиту de4dot.

Неудачная попытка снятия обфускации
При попытке снять обфускатор, de4dot сообщает, что в файле есть неподдерживаемые данные и надо использовать ключ --dont-rename. И действительно, при обычной распаковке файл получается неработоспособным.

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

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

Результаты поиска строки
Поиск по слову "trial" выдает несколько результатов. Начнем с функции с названием "trial".

Функция "trial"
Она практически пустая, судя по всему, это просто закрытие наг-окна по кнопке "продолжить работать в триальном режиме". Зато чуть выше код уже гораздо интереснее:

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

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

Функция проверки лицензии
Тут вообще красота. Множество манипуляций со строками, криптография, какие-то фрагменты строк, похожие на хэши, и все в таком духе. На выходе возвращается одно из значений из списка типов лицензий. Как мы выяснили ранее, нам нужно, чтобы результат работы этой функции соответствовал "профессиональной" лицензии, то есть значению 30.

Открываем метод класса на редактирование
Открываем метод на редактирование.

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

Программа успешно "зарегистрирована"
Вот и все, теперь у нас есть программа в максимально доступной "профессиональной" комплектации, со всеми активированными опциями и снятыми ограничениями. Цель достигнута. Точно таким же образом нейтрализуется защита и на остальных программах автора.
Просмотров: 2455 | Комментариев: 6

Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
ManHunter
(20.01.2018 в 19:50):
MacTeP, ну ты поясни за подвороты. К чему этот фрагмент кода относится?

MacTeP
(20.01.2018 в 18:20):
Вариант кода
-------
public static xxx
{
return xxx8f6478.xxx5f0341;
}
-------
PS:
С крещением Всех.
-------
public static xxx
{
return xxx8f6478.xxx5f0341;
}
-------
PS:
С крещением Всех.

xussr
(01.01.2018 в 06:07):
Пример из жизни это точно все повторил все OK! спасибо !!!!

pawel97
(31.12.2017 в 10:58):
ManHunter, уточню вопрос - примерчик хоть с полунамёком на решение :)
Дамп снять ещё можно, но и это не всегда помогает - код как был кашей, так и остаётся, да ещё и нерабочей.
Дамп снять ещё можно, но и это не всегда помогает - код как был кашей, так и остаётся, да ещё и нерабочей.

ManHunter
(31.12.2017 в 10:49):
Новый PDF Reducer жи есть :)

pawel97
(31.12.2017 в 10:39):
Для большей читабельности кода, "--keep-names nt" вместо "--dont-rename" (nt = namespaces + types).
Примерчик бы, когда de4dot обломался чуть более, чем полностью :)
Примерчик бы, когда de4dot обломался чуть более, чем полностью :)

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