[#] Как декомпилировать игры
RSS-bot(tavern,2) — All
2020-05-28 17:21:20


Маленькое пособие для тех, кто интересуется, как устроены их любимые интерактивные работы. Разберём все популярные и не очень популярные движки.

Фотоиллюстрация статьи: Alexander Andrews



##### Ren'Py


Вам понадобится Python 2, rpatool и декомпилятор.

Сначала при помощи rpatool нужно разархивировать файлы RPA:




python rpatool -x scripts.rpa


Так легко посмотреть аудио и изображения из игры. Но так как нас интересуют скрипты, придётся пойти дальше. Скачайте файл un.rpyc и положите его в папку с игрой, а затем запустите саму игру. После этого она сама декомпилирует все .rpyc файлы в обычные .rpy на Питоне.



##### Z-машина


С Inform всё хитро, потому что у него две виртуальных машины: Z-машина и Glulx. Начнём со старенького.

В общем случае для файлов Z1-Z8 есть дезассемблер TXD, который входит в пакет ztools. Его придётся собирать из исходников на Си, но после этого всё довольно просто: ему достаточно указать адрес файла, и он выдаст его код. Сам код даётся в опкодах для Z-машины, поэтому он ничего не скажет непосвящённым людям, а вот полный список используемых строк в игре будет очень полезен. Это очень полезно, например, при переводах парсерок.

К сожалению, на играх RInform txd падает (по segfault) как только доходит до русских строк.

Самые старые файлы Z1-Z3 также открываются онлайн при помощи интерпретатора Encrusted. Просто откройте файл, нажмите на «гамбургер-меню» справа и выберите галочку «Show object tree», которая покажет дерево всех объектов в игре. Это не декомпиляция, но тоже интересно.

Для glulx есть декомпилятор mrifk. Он даёт полный псевдокод игры, вместе с комнатами, объектами, параметрами и глаголами, но тоже очень не любит RInform.

> «Sfbf 5so-nibtew ntgno( — rpqa7icafs Xlli- — Sfbf pqacea tgf poqa rpasw»-

Кроме того, есть онлайн-декомпилятор glulx-strings, который даёт полный список строк из игр Glulx, Z-машины, TADS 2 и TADS 3. Он не ломается на русских играх, но текст игр на RInform-Z6 будет зашифрован подстановкой. Пытливый читатель легко поймёт, из какой игры была цитата выше.



##### QSP


Формат QSP открывается QGen'ом. Этого достаточно, чтобы сделать патч к какой-нибудь чужой заброшенной игре.



##### Ink


Ink использует машиночитаемый формат JSON, в котором всё довольно прозрачно для человека, хотя трудно разобрать логику. По крайней мере, видны все строки. Обратной трансформацией пока никто не занимался.



##### Unity


Логика игры компилируется в DLL для виртуальной машины .NET, обычно под названиями Assembly-CSharp.dll , Assembly-CSharp-firstpass.dll и Assembly-UnityScript.dll. Они открываются декомпиляторами .NET: Telerik, dotPeek, ILSpy, Reflector. На выходе будет код на C#.

Конечно, уже существует платный обфускатор, который делает код менее читабельным.

Ресурсы распаковываются, например, через Unity Assets Explorer.



##### INSTEAD


Игры на INSTEAD не компилируются, а шифруются как текст. Кодирование исходников идёт в обратную сторону при запуске игры, и в проекте с открытым исходным кодом легко посмотреть, как же оно устроено. И относительно легко повторить.

В отличие от других движков, INSTEAD ещё не настолько популярен, чтобы в интернете были легко упакованные программы для распаковки игр. Поэтому вам понадобится консоль, компилятор Си и кусок кода из instead.c. Кусок с побитовым сдвигом нужно поставить в простую программу чтения файла в консоли. (Оставлю это упражнение пытливому читателю.) В полученном коде сохраняются даже комментарии автора.

Справедливости ради, существует вариант с реальной компиляцией кода Lua, но им никто не пользуется, потому что байтовый код непереносим: пришлось бы выпускать несколько версий игры для каждой архитектуры (отдельно 32 бита, 64 бита, Android и так далее).



##### URQ


Незашифрованные игры на URQ достаточно открыть в текстовом редакторе. Опытные игроки называют это «прохождение в блокноте».

Алгоритмы декодирования QS1 и QS2 можно взять из исходников FireURQ.

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



##### ЯРИЛ


В ЯРИЛ тоже есть шифрование игр, и, что неожиданно, оно использует реальную криптографию — ключи DES. Стандарт 1975 года сейчас немного устарел, но его и не потребуется взламывать, когда код плеера полностью открыт.

Опять же, ЯРИЛ не пользуется широким признанием среди программистов, поэтому готовых программ здесь не будет. Написать собственный декодировщик DES уже вряд ли по силам начинающему программисту на Java, так что если вы можете это сделать, то вам пора становиться соавтором ЯРИЛ.



##### Twine


Пропустим другие HTML-платформы, потому что код игр на Javascript и HTML уже достаточно читабелен. Но вот Twine стоит подробного осмотра.

Во-первых, все игры Twine открываются в самом редакторе Twine. Игры Twine 1 открываются только в редакторе Twine 1 и то же самое для второй версии. Поэтому если вы хотите посмотреть исходники какой-нибудь игры, её достаточно импортировать в редактор.

Кроме того, при помощи программы tweego HTML-файл можно преобразовать в приличный человеческий черновик для редактирования.



##### В заключение


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

Ссылка: https://ifhub.club/2020/05/28/decompiling-if-for-dummies.html