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

Скриншот программы Secure Delete
Программа Secure Delete, по заверениям разработчиков, предназначена для гарантированного удаления файлов и каталогов без возможности их последующего восстановления. Перед удалением файл может быть несколько раз перезаписан случайными данными, у него может быть модифицирована дата создания, изменено имя файла, а также выполнены другие действия согласно выбранным настройкам безопасности. Без регистрации постоянно вываливает окна с предложением прогуляться в кассу, а также в таком режиме заблокированы некоторые полезные функции. Лицензия представляет наиболее мерзкую свою разновидность - платную подписку на ограниченный период. Что ж, будем исправлять.
Забираем с сайта дистрибутив, устанавливаем, смотрим что и как. Главный исполняемый файл написан на дотнете, да еще и накрыт обфускатором Obfuscar. Его особенность - полное шифрование строк, так что к текстовым данным привязаться не получится. Имеющийся у меня вариант de4dot с Obfuscar не справляется, поэтому придется искать другие варианты решения.

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

Вызов триального окна
Поищем в деобфусцированном файле что-нибудь, связанное со строкой "Pro", так как именно это должно быть в полной версии. Поиском обнаруживается несколько вхождений, пробежавшись по которым можно посмотреть содержимое их кода. Одно из мест очень любопытное. Тут проверяется условие, после чего открывается форма с характерным названием "uf_form_offerpro". И, как видно из кода, за ее появление отвечает флаг global::A.F.A.

Инициализация флага
Кликом на названии переходим на код, в котором этот флаг инициализируется значением false. Теперь открываем в dnSpy оригинальный файл и в списке классов находим класс "A", в нем метод "F" и уже в нем первый метод - инициализация. Но, как мы помним, в оригинальном файле все обфусцировано. Однако, структуру кода легко узнать.

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

Модифицируем IL-команду
Через контекстное меню открываем на редактирование IL-команду. Любые другие способы редактирования ни к чему хорошему не приведут. Поскольку тут просто используется булева переменная, то заменяем значение 0 на 1, то есть false на true. Сохраняем изменения.

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

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

Комментарии
Отзывы посетителей сайта о статье

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

https://github.com/cod3nym/Deobfuscar