Форум программистов, компьютерный форум CyberForum.ru

Изучаем PE формат и получаем сведения из таблиц импорта/экспорта (Часть 4)

Войти
Регистрация
Восстановить пароль
Рейтинг: 5.00. Голосов: 1.

Изучаем PE формат и получаем сведения из таблиц импорта/экспорта (Часть 4)

Запись от _lunar_ размещена 29.06.2017 в 21:56
Обновил(-а) _lunar_ 30.06.2017 в 11:48

Перед тем как приступить к редактированию таблицы импорта/экспорта, давайте разберёмся зачем это нужно вообще?
Чтобы понять как это работает мы проанализируем взломанную, группой хакеров CODEX, игру Assassins Creed Rogue.
В начале 2000-х хакеры активно ломали непосредственно сам исполняемый файл (EXE-файл), убирали лишний код, который просил ввести ключ (а если его не ввести или ввести неверный, то игра не запускалась), и всё в таком духе.
Но разработчики тоже на месте не стояли и в 2007 году студия Ubisoft выпустила игру Assassins Creed с новой непробиваемой по тем временам DRM защитой.
Банальное отсоединение этой защиты в коде EXE-файла (как это делали раньше), приводило либо к crash игры, либо удавалось запустить только меню игры. Оказалось, что новая DRM технология активно использует сервера и загружает часть кода из сети, чтобы лицензионная игра могла запуститься.
Только после мощнейшей DDoS атаки на сервера Ubisoft, хакерам удалось понять как работает данная защита и как её обойти. Чтобы запустить пиратскую версию необходимо было написать эмулятор сервера.
Первые версии таких эмуляторов работали плохо - не было возможности сохранять пройденный прогресс, не подгружались некоторые текстуры, и многие другие баги и ошибки.
Но со временем эмуляторы улучшались, и на данный момент предоставляют мощное средство, взаимодействующее с игрой как лицензионный продукт.
Вот именно такой эмулятор мы сегодня рассмотрим, его работу и как он устроен. Некоторый функционал этого эмулятора я применю в своём редакторе PE.

Итак, во-первых давайте взглянем на импорт/экспорт EXE-файла (ACC.exe)
Нажмите на изображение для увеличения
Название: 1-ACC.png
Просмотров: 59
Размер:	29.6 Кб
ID:	4310
Секции выглядят как обычно (ничего странного с ними нет), таблица экспорта нас не интересует вообще, да и таблица импорта не вызывает никаких подозрений. Как же активизируется эмулятор при запуске исполняемого файла?
В таблице импорта есть список всех подгружаемых DLL-библиотек и их функций. Рассматривать системные библиотеки (такие как kernel32.dll и другие библиотеки из папки Windows\System32) не имеет смысла, редактировать их и менять в системной папке не будет никто.
Остаётся присмотреться к библиотекам, которые поставляются вместе с игрой, например binkw64.dll

Подгрузим библиотеку в редактор и видим следующее
Нажмите на изображение для увеличения
Название: 2-bink.png
Просмотров: 52
Размер:	16.8 Кб
ID:	4311
Ага, в её заголовке создана дополнительная секция, в которой расположена новая таблица импорта, которая вызывает библиотеку codex.dll с именем функции, созданной без специальных атрибутов.

Загрузив codex.dll в редактор, можно убедиться, что экспортируется именно эта функция (для DLL нам уже нужна таблица экспорта)
Нажмите на изображение для увеличения
Название: 3-codex.png
Просмотров: 53
Размер:	12.7 Кб
ID:	4312

Чтобы понять что же находится в библиотеке codex.dll давайте сперва рассмотрим что ещё импортирует ACC.exe
Нажмите на изображение для увеличения
Название: 4-ACC.png
Просмотров: 54
Размер:	31.0 Кб
ID:	4313
В таблице импорта есть библиотека uplay_r1_loader64.dll которая взаимодействует с серверами Ubisoft

Названия функций прямо означают что они выполняют
Нажмите на изображение для увеличения
Название: 5-uplay_r1_loader64.png
Просмотров: 51
Размер:	17.7 Кб
ID:	4314

Загрузим codex.dll в дизассемблер IDA и посмотрим на таблицу экспорта
Нажмите на изображение для увеличения
Название: 6-export (2).png
Просмотров: 51
Размер:	52.4 Кб
ID:	4318
IDA любезно расшифровала имя функции - void CODEX(void){}

Перейдём в просмотр кода, найдём строковый параметр имени uplay_r1_loader64.dll и далее в мнемокод (по кнопке F5)
Нажмите на изображение для увеличения
Название: 7-mnemocode1.png
Просмотров: 53
Размер:	123.7 Кб
ID:	4319
тут происходит загрузка модуля библиотеки uplay_r1_loader64.dll и инициализация нескольких функций.

Переходим например в sub_18002FC70 и видим следующее
Нажмите на изображение для увеличения
Название: 8-emulator1.png
Просмотров: 60
Размер:	124.7 Кб
ID:	4320
Имея хендл загруженной библиотеки можно воспользоваться функцией GetProcAddress и уже непосредственно работать с функциями, загруженными из библиотеки uplay_r1_loader64.dll
Дальше по коду происходит обработка этих функций - это и есть эмулятор сервера, т.е. код этих функций выполняет аналогичную работу оригинальных функций. Анализировать код дальше я не буду (всё таки я даю материал не по взлому), кому надо можете сами разбирать код на составляющие и переписывать исходник.

Что в итоге?
на основе анализа этого эмулятора я сделаю в своем редакторе две вещи:
- функционал для создания новой секции (уже реализовано)
- функционал для редактирования таблицы импорта (в процессе).
Как только я закончу со вторым, подготовлю 5 часть данного цикла статей.

А на этом пока всё, спасибо за внимание.
Просмотров 274 Комментарии 0
Всего комментариев 0

Комментарии

 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru