В официальном издании Age of Empires Collectors Edition на DVD используются крэки из сети

от автора

imageПервые части игры Age of Empires уже давно стали своего рода классикой. У этой игры до сих пор есть немало поклонников. В 2007 году вышло официальное коллекционное издание игры, которое включает первую и вторую части с дополнениями. Причём во всех странах, кроме США, оно вышло на одном DVD вместо четырёх CD. Тогда я уже немного занимался реверс-инжинирингом этой игры и знал, что оригинальные версии исполняемых файлов не захотят работать с одним общим диском, поскольку в код каждой части и их дополнений зашита проверка метки соответствующего диска. Очевидно, что у одного DVD не может быть сразу четыре разных метки, и после покупки русского DVD издания я ожидал увидеть перекомпилированные разработчиками версии файлов с изменённым кодом проверки наличия диска или вовсе без него. Но всё оказалось намного интереснее.

Всё в худших традициях пиратских антологий:

  • все стилизованные (оригинальные) установщики с красивой графикой заменены на стандартные;
  • часть оригинальной музыки лежит на DVD в виде неаккуратного рипа в WAV файлы с именами вида «01-AudioTrack 01.wav»;
  • во время игры мы не слышим оригинальной музыки — игре никто не сказал, что музыку нужно брать из wav файлов, а не из Audio CD, как это было в оригинальной версии;
  • после установки последних официальных обновлений с сайта Microsoft игра не признаёт DVD как родной и отказывается запускаться.

Никто и не занимался адаптацией игры для DVD издания!

Потеряли исходный код? Не нашли подходящего разработчика для пары мелких правок и компиляции нового исполняемого файла? Или может быть страшная бюрократия в Microsoft, из-за которой даже мелкие и легко исправимые ошибки просто объявляются особенностью архитектуры приложения?

Все исполняемые файлы устанавливаются в расшифрованном виде без SafeDisc (защита от копирования), которая использовалась на оригинальных CD. Ok, дешифрованные версии исполняемых файлов у издателя вполне могли быть. Но что с зашитой в исполняемые файлы проверкой метки диска?

Как оказалось, всё дело в крэках!

Да-да, все факты указывают на то, что взломанные версии исполняемых файлов для этого издания были взяты из сети Интернет и… немножко отредактированы, возможно, для сокрытия этого факта.

Рассмотрим это на примере Age of Empires II: The Conquerors 1.0c. Возьмём оригинальный зашифрованный исполняемый файл age2_x1.icd — в нём отлично просматривается вся структура PE файла, а зашифрованы только некоторые участки машинного кода. Используя известные методы снятия SafeDisc получаем расшифрованный файл age2_x1.exe. Теперь у нас есть эталонный файл. Далее для исследования возьмём известный в сети NoCD для этой версии игры, судя по всему созданный в недрах уже несуществующего клана Berserkers в конце 2001 года (age2_x1_bsk.exe). Также с DVD коллекционного издания установим английскую версию The Conquerors (/AOE2CONQ/EN/setup.exe) и возьмём установленный исполняемый файл игры (age2_x1_dvd.exe).

Итак, приступим к исследованию

Сравним файлы друг с другом. Первой бросается в глаза разница в описании секций exe файла:

0001e0

Как известно, имена секций никак не влияют на выполнение программы. По сути они носят исключительно информационный характер. Однако, обычно компиляторы дают всем секциям привычные имена типа «.code», «.data» и т.д. Но в оригинальном исполняемом файле некоторые секции имеют нетипичные названия «THIS_COD», «THIS_DAT» и «Inf32Dat». Скорее столь специфичные имена секций связаны с использованием SafeDisc. В файле с DVD эти секции переименованы в более привычные «.code», «.data2» и «.idata», причём очевидно, что вручную — лишние символы забиты пробелами (код 0x20), а не нулями. То есть явно кто-то открыл исполняемый файл в HEX редакторе и вручную исправил названия секций. Возможно для того, чтобы исполняемый файл выглядел более типично.

Также мы видим, что в BSK оставили немного служебной информации для SafeDisc из зашифрованного файла age2_x1.icd перед началом первой секции:

000fc0

И в конце файла:

292ff0

Эта информация хранится в незначащих участках файла и никак не используется игрой. Как видно, в DVD версии нет никакой служебной информации, указывающей на то, что файл ранее был защищён SafeDisc. Но в конце каждой секции есть одна маленькая зацепка.

228fe8

После работы декодера SafeDisc в конце каждой секции появляется метка в виде последовательности 00 05 43 1F. В исходном icd файле там нули. Поскольку это конец секции, для основной программы это также ничего не значит. В версии файла от BSK мы видим, что их никто не удалял (не мешают — и ладно). В версии с DVD мы видим, что они также никуда не делись.

Ну и самое интересное — сравним машинный код

Сразу же находим участок машинного кода, который отвечает за проверку наличия CD.

0486b8

Эта функция начинается со смещения 485A0h и я уже рассказывал о ней в статье о модификации этой игры. В ней описана достаточно сложная логика проверки наличия диска, но в результате функция просто возвращает 0 в случае неудачи и 1 в случае успеха. Я предлагал для патча заменить код всей этой здоровой функции на простую последовательность, всегда возвращающую 1:

xor	eax, eax inc	eax retn	4 

Но в BSK подошли к душой к этому делу. Намётанный глаз и без дизассемблирования видит, что они заменили пару условных переходов jz (74h) и jnz (75h) на безусловный jmp (EBh) и ещё много чего 🙂 Причём если дизассемблировать этот участок, можно проследить небольшой просчёт крэкера из BSK — если в реестре не будет записи с буквой диска, откуда установлена игра — код будет возвращать 0, и игра будет требовать вставить диск.

Ну а теперь самое важное — в исполняемом файле, установленном с официального коллекционного DVD, весь машинный код совпадает до байта с версией от BSK, включая (сюрприз для любителей AoC) несколько других странных патчей кода, судя по всему не относящихся к проверке диска вообще (с этим ещё предстоит разобраться):

0ff230

1eb2c0

281038

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

И напоследок

Хочу заметить, что у меня на руках есть только официальное русское издание от «Новый Диск». Но есть все основания полагать, что и в других коллекционных изданиях проблема несовместимости игр с DVD решена подобным образом.

Данным постом я хотел лишь подчеркнуть всю комичность ситуации, когда даже официальный издатель вынужден использовать крэки, созданные вроде как «нехорошими дядями» для «нехороших целей».
Кстати да, все файлы предоставлены в ознакомительных целях. После их изучения вы обязаны их удалить.

Спасибо за внимание.

ссылка на оригинал статьи http://habrahabr.ru/post/168269/


Комментарии

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

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