Blog. Just Blog

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

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

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

Забираем с сайта дистрибутив, устанавливаем, смотрим. Программа написана на дотнете, причем по ней дополнительно прошлись обфускатором. Это значит, что первым делом надо использовать утилиту de4dot.

Неудачная попытка снятия обфускации
Неудачная попытка снятия обфускации

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

Снимаем обфускатор
Снимаем обфускатор

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

Обфусцированные названия
Обфусцированные названия

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

Результаты поиска строки
Результаты поиска строки

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

Функция "trial"
Функция "trial"

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

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

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

Вызов функции проверки
Вызов функции проверки

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

Функция проверки лицензии
Функция проверки лицензии

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

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

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

Редактируем код
Редактируем код

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

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

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

Поделиться ссылкой ВКонтакте Поделиться ссылкой на Facebook Поделиться ссылкой на LiveJournal Поделиться ссылкой в Мой Круг Добавить в Мой мир Добавить на ЛиРу (Liveinternet) Добавить в закладки Memori Добавить в закладки Google
Просмотров: 837 | Комментариев: 6

Комментарии

Отзывы посетителей сайта о статье
ManHunter (20.01.2018 в 19:50):
MacTeP, ну ты поясни за подвороты. К чему этот фрагмент кода относится?
MacTeP (20.01.2018 в 18:20):
Вариант кода
-------
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):
ЦитатаПримерчик бы, когда de4dot обломался чуть более, чем полностью :)

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

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

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

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