Главная » Хабрахабр » [Из песочницы] Реверс-инжиниринг приложений после обфускации

[Из песочницы] Реверс-инжиниринг приложений после обфускации

Введение

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

Предмет исследования

В качестве примера будем изучать код Atomineer Pro Documentation (далее APD). Это плагин для Visual Studio предназначенный для автоматической генерации комментариев в исходных кодах. Для начала установим данный плагин и проверим его работу. Бесплатная версия имеет триальный период и ряд ограничений использования в течении этого времени. Так при добавлении комментариев в файл пользователю выдается сообщение о том, что в течении дня можно обработать только 10 файлов

Сообщение 1

image

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

Сообщение 2

image

Приступим

Для начала посмотрим в каталог установленного расширения и найдем там только одну динамическую библиотеку. Она нам и нужна. Первое что мы сделаем это загрузим ее в декомпилятор dotPeek от компании JetBrains.

dotPeek

image

Как видно на скрине по библиотеке прошлись обфускатором, переменные и методы переименованы и имеют названия вида a, b, c, d… это нам и нужно. Мы же искали именно это. Давайте посмотрим, что же можно сделать.

Часть 1

Первое что приходит на ум это отыскать строчку, но ввиду того что функционала поиска нет в dotPeek, пойдем по другому пути. Декомпилируем библиотеку штатным ildasm.exe из состава Microsoft SDKs. На выходе получим только один текстовый файл. В нем и поищем текст сообщения «Trial Mode. Please note that your…»

текстовый файл

image

Нашли метод

.method family hidebysig static bool e() cil managed

Который принадлежит классу CmdDocThisScope. Теперь возвращаемся в dotPeek.

Заголовок спойлера

image

Итак, что мы имеем. Мы нашли метод, который выводит сообщение о триальности APD и в зависимости от условия возвращает true или false. Найдем все места из которых вызывается этот метод

поиск вызова

image

Нашлось только 2 места вызова и это методы CmdDocThisFile::c и CmdDocThisScope::c.

нашли

image

По названию классов и коду конструкторов очевидно что классы отвечают за пункты меню, а виртуальность метода «с» говорит о том что это обработчик события выбора соответствующего пункта меню пользователем (Эта информация нам еще пригодится далее). Несложно догадаться что если метод возвращает true, то команда выполнится хоть и покажет диалог с предупреждением.

Откроем окно «IL View» и найдем код команды: В начале метода CmdDocThisScope::e увеличивается переменная f.

IL View

В википедии есть статья с описанием этих инструкций.

Делать это будем с использованием инструмента IDA. Далее найдем этот метод в файле библиотеки APD. В окне с функциями найдем наш метод, и увидим уже знакомый код.

IDA

Выделив инструкцию ldsfld найдем ее бинарное представление в окне Hex View

Hex View

Описание команды подтверждает то, что мы нашли нужное место.

Wiki

Дальнейший анализ кода этого метода и последующие шаги выходят за рамки данной статьи.

Часть 2

Теперь, как уже опытные исследователи, найдем вызов диалога с сообщением "The 'Document all in Project' command is only available in the full version…”. Вот этот метод CmdDocThisProject::c

CmdDocThisProject::c

Класс CmdDocThisProject отвечает за команду «Обработать проект», метод «с» виртуальный. И он содержит только одно – это вызов диалога с сообщением. Ни условий, ни проверок. Поиск по исходному коду приводит нас к методу CmdDocThisProject::i, в котором есть то что мы ожидаем в CmdDocThisProject::c. Теперь в IDA мы с легкостью найдем нужные методы и сможем изучить CIL инструкции

Заключение

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


Оставить комментарий

Ваш email нигде не будет показан
Обязательные для заполнения поля помечены *

*

x

Ещё Hi-Tech Интересное!

Слушаем SID-музыку через OPL3 на современных ПК

Кто-то может подумает, что это будет что-то ужасное, а оказывается если сделать простой маппер, то можно получить весьма хорошее звучание, как это сделали несколько разработчиков в программе LLSID ещё в далеком 2007 году. Наверное не все любители чиптюн музыки знают, ...

Пользователь в Docker

В новой статье он рассказывает, как создать пользователей в Docker. Андрей Копылов, наш технический директор, любит, активно использует и пропагандирует Docker. Правильная работа с ними, почему пользователей нельзя оставлять с root правами и, как решить задачу несовпадения идентификаторов в Dockerfile. Это кажется очень удобно, ведь ...