Blog. Just Blog

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

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

Photo EXIF Manager позволяет просматривать и редактировать различные теги цифровых фотографий стандарта EXIF. Вы можете добавлять, изменять, удалять некоторые теги, а также есть функция удаления всей EXIF-секции из файла. Как видите, ничего принципиально нового или уникального программа не предлагает, но денег все равно за это требует.

На сайте написано, что для работы программы требуется установленный Framework .Net 4.0, значит для нас это хороший провод потренироваться в работе с исполняемыми файлами на дотнете. Скачиваем с офсайта дистрибутив, устанавливаем, смотрим. На первый взгляд все нормально, на файл ничего не навешано, но окончательные выводы пока делать рано. Признаки пакера/протектора, характерные для обычных файлов, на .NET-сборках могут выглядеть совсем не так. Зато при запуске программа сразу встречает нас наг-окном с предложением зарегистрироваться.

Окно регистрации программы
Окно регистрации программы

Для декомпиляции файла воспользуемся JetBrains dotPeek. Это хороший инструмент, дающий на выходе красивый листинг с удобной навигацией и позволяющий проводить дальнейшие исследования. Отправляем исполняемый файл в декомпилятор, через пару секунд можно открывать дерево со структурой проекта.

Файл обработан обфускатором
Файл обработан обфускатором

Но сразу же становится видно, что имена в дереве объектов пустые, в декомпилированных функциях тоже творится полный хаос. Все указывает на то, что над файлом потрудился какой-то обфускатор. Анализаторы DNiD и DotNet Id, заточенные на дотнетовские протекторы и обфускаторы, ничего не показали. Значит самое время воспользоваться мощнейшим инструментом для таких задач - de4dot. Это бесплатный универсальный деобфускатор и распаковщик файлов, написанных на .Net.

de4dot успешно снял обфускатор с файла
de4dot успешно снял обфускатор с файла

de4dot распознал, что файл был обработан с помощью Eazfuscator.NET, и, как видно из лога, успешно его нейтрализовал. Закрываем в JetBrains dotPeek защищенный файл, вместо него отправляем на анализ очищенный файл photo-exif-manager-cleaned.exe

Файл успешно декомпилируется
Файл успешно декомпилируется

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

Класс обработки формы ввода
Класс обработки формы ввода

Тут интерес представляет функция обработки нажатия на кнопку OK, то есть она вызывается после ввода серийника. Строчка "Class2.smethod_0(this.textBoxSN.Text)" говорит о том, что вызывается функция Class2.smethod_0 и ей передается введенный серийный номер. Открываем Class2 в дереве классов.

Функция проверки серийников
Функция проверки серийников

Класс не такой большой, но весь листинг я приводить тут не буду, посмотрите его сами. Интерес представляет функция smethod_3. Даже не будучи знакомым с .NET, по названиям используемых функций можно догадаться, что там происходит. Берется строка серийного номера, из нее удаляются разделители "-", затем от полученной строки считается хэш SHA256, кодируется в base64 и после этого результат поочередно сравнивается с сотней готовых хэшей, захардкоденных в программе. По результатам сравнения из функции возвращается false или true. Уже можно сделать первые выводы: создать генератор ключей не получится, обойти защиту можно только патчем. Надо сделать так, чтобы функция всегда возвращала true. Может быть кто-то помнит все опкоды команд наизусть, я же воспользуюсь возможностью JetBrains dotPeek для просмотра IL Code.

IL Code команд
IL Code команд

Как видите, разница между командами возврата результата - "ldc.i4.1" для true и "ldc.i4.0" для false. К сожалению, JetBrains dotPeek не может сразу же вносить изменения в файл, поэтому закрываем декомпилятор и запускаем очередной первоклассный инструмент отечественной разработки - .NET Patcher от Medsft. Точно так же открываем в нем деобфусцированный файл, находим Class2 и затем открываем на редактирование smethod_3.

Патчим файл
Патчим файл

Напомню, что надо заменить "ldc.i4.0" на "ldc.i4.1". Правый клик на нужной команде - "Binary Edit", в открывшемся окне меняем "16" на "17". Сохраняем изменения, запускаем пропатченный файл.

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

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

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

Внимание! Статья опубликована больше года назад, информация могла устареть!

Комментарии

Отзывы посетителей сайта о статье
caxap (14.12.2015 в 11:22):
Программа без меню "Открыть файл", драг-энд-дропа, ком.строки - это, конечно, "что-то с чем-то"...
И как, скажите пожалуйста, смотреть/редактировать это:
G:\!CLIENTS\2013-11-01 33\2013-11-01\Magic\Pictures\Новая папка\DSC_5757.JPG ??????? Ну раз, ну два... Да ну в пень такую программу!
З.Ы.
Хоть из статьи мало чего понял, всё равно видно, что толково написано толковым человеком. Спасибо за кряки, тулзы и статьи, Кулинар! :) Всех благ!
Rustamer (09.12.2015 в 13:32):
brute, Там оно вроде было доступно и без торрентов в меню Plugins Manager. Другое дело, что de4dot нужно руками юзать - там оно для другой цели встроено. А reflexil исторически привычнее в рефлекторе юзать.
brute (09.12.2015 в 10:21):
Rustamer - уже нашёл. Он бесплатный и лежит на торрентах, в составе пакета "Telerik". К нему (из меню) ставятся три плагина: De4dot - снятие обфускаторов, JustDecompilePowerTools - нахождение точки входа и Reflexil - который патчит файл (ldc.i4.0 меняем на ldc.i4.1 и сохраняем, кликнув правой на имени файла и далее Reflexil - Save As..)
Rustamer (09.12.2015 в 09:54):
brute, Поделюсь, если найду :) Лучше подождем последующих статей автора.
brute (09.12.2015 в 00:35):
Спасибо! Всё получилось!
Rustamer - патчить в DnSpy одно удовольствие! Ещё понравился Telerik JustDecompile - отображает лучше dotPeek и dnSpy, только пока ещё не нашёл новой патченой версии и с плагинами.. Если найдете - делитесь!:)
user (08.12.2015 в 10:54):
Вообще, у меня впечатление, что пока ситуация с .NET повторяет ажиотаж, который был долгое время с VB.
VB на сегодня благополучно почил, после пары десятков лет "процветания" - и в "сухом остатке" у меня не осталось в использовании ни одной утилиты или программы на нём. Уж как-то так получилось.
Предвижу, что то же самое будет и с .NET'ом.

Рассматриваемая утиль требует WinXP/SP3 при инсталляции. И неизвестно, что ещё потребует после. Декомпилер .NET требует .NET 4.0.
ManHunter (07.12.2015 в 18:37):
Можно, но без деобфускации было бы очень сложно выйти на этот адрес, и не удалось бы опробовать на практике de4dot.
DICI BF (07.12.2015 в 17:11):
ManHunter, отличная статья.
Можно обфусцированный файлик запатчить:
0000D01D: 17
Rustamer (07.12.2015 в 15:44):
Тема действительно относительно интересная. Главное не превращайся сам в дотнетчика - это болото, из которого уже не вылезешь :) Обычным людям были бы полезны статьи про стронгнейм, методы борьбы c ним, также интересно было бы почитать про самые полезные из утилит для дотнет реверса.
ManHunter (07.12.2015 в 15:33):
Потому что дотнета становится все больше и больше, а материалов по его ковырянию как-то не прибавляется. Вот и решил пару статей написать.
Rustamer (07.12.2015 в 15:30):
Потри коммент тогда. Лучше расскажи, почему на дотнет тебя понесло?
ManHunter (07.12.2015 в 15:20):
Rustamer, ну не раскрывай сразу все козыри, это тема на следующую статью :)
Rustamer (07.12.2015 в 15:07):
Лучшее имхо средство для внесения изменений на данный момент - это DnSpy. Выделил нужный блок кода -> Edit IL Instructions, а он тебе сразу подсветил нужный блок опкодов. И занопить быстро можно. Очень удобно короче. Reflexil отдыхает теперь.

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

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

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