Как декомпилировать игры
Маленькое пособие для тех, кто интересуется, как устроены их любимые интерактивные работы. Разберём все популярные и не очень популярные движки.
Фотоиллюстрация статьи: Alexander Andrews
Вам понадобится Python 2, rpatool и декомпилятор.
Сначала при помощи rpatool нужно разархивировать файлы RPA:
Так легко посмотреть аудио и изображения из игры. Но так как нас интересуют скрипты, придётся пойти дальше. Скачайте файл un.rpyc и положите его в папку с игрой, а затем запустите саму игру. После этого она сама декомпилирует все .rpyc файлы в обычные .rpy на Питоне.
С 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 открывается QGen'ом. Этого достаточно, чтобы сделать патч к какой-нибудь чужой заброшенной игре.
Если игра защищена паролем, то можно воспользоваться декодером от AleksVersus.
Ink использует машиночитаемый формат JSON, в котором всё довольно прозрачно для человека, хотя трудно разобрать логику. По крайней мере, видны все строки. Обратной трансформацией пока никто не занимался.
Логика игры компилируется в DLL для виртуальной машины .NET, обычно под названиями Assembly-CSharp.dll, Assembly-CSharp-firstpass.dll и Assembly-UnityScript.dll. Они открываются декомпиляторами .NET: Telerik, dotPeek, ILSpy, Reflector. На выходе будет код на C#.
Конечно, уже существует платный обфускатор, который делает код менее читабельным.
Ресурсы распаковываются, например, через Unity Assets Explorer.
Игры на INSTEAD шифруются как текст. Кодирование исходников идёт в обратную сторону при запуске игры, и в проекте с открытым исходным кодом легко посмотреть, как же оно устроено. И относительно легко повторить.
В отличие от других движков, INSTEAD ещё не настолько популярен, чтобы в интернете были легко упакованные программы для распаковки игр. Поэтому вам понадобится консоль, компилятор Си и кусок кода из instead.c. Кусок с побитовым сдвигом нужно поставить в простую программу чтения файла в консоли. (Оставлю это упражнение пытливому читателю.) В полученном коде сохраняются даже комментарии автора.
Справедливости ради, существует вариант с реальной компиляцией кода Lua, но им никто не пользуется, потому что байтовый код непереносим: пришлось бы выпускать несколько версий игры для каждой архитектуры (отдельно 32 бита, 64 бита, Android и так далее).
Незашифрованные игры на URQ достаточно открыть в текстовом редакторе. Опытные игроки называют это «прохождение в блокноте».
Алгоритмы декодирования QS1 и QS2 можно взять из исходников FireURQ.
Законченных декодеров, конечно, нет в публичном доступе, но наш пытливый читатель на уровне начинающего программиста, конечно, справится с этой задачей.
В ЯРИЛ тоже есть шифрование игр, и, что неожиданно, оно использует реальную криптографию — ключи DES. Написать собственный декодировщик DES уже гораздо сложнее чем пять раз перепройти «Комсомольца», так что ЯРИЛ останется единственной неприступной платформой в этом списке.
Пропустим другие HTML-платформы, потому что код игр на Javascript и HTML уже достаточно читабелен. Но вот Twine стоит подробного осмотра.
Во-первых, все игры Twine открываются в самом редакторе Twine. Игры Twine 1 открываются только в редакторе Twine 1 и то же самое для второй версии. Поэтому если вы хотите посмотреть исходники какой-нибудь игры, её достаточно импортировать в редактор.
Кроме того, при помощи программы tweego HTML-файл можно преобразовать в приличный человеческий черновик для редактирования.
Скрипт даёт читабельный вывод даже на русской RTADS, но в моём тестировании исходник скомпилировался без ошибок только для игры на английском.
Данная информация дана для личного ознакомительного использования. Законы большинства стран запрещают взлом программного обеспечения, а также распространение результатов взлома. Играйте честно.

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'ом. Этого достаточно, чтобы сделать патч к какой-нибудь чужой заброшенной игре.
Если игра защищена паролем, то можно воспользоваться декодером от AleksVersus.
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. Написать собственный декодировщик DES уже гораздо сложнее чем пять раз перепройти «Комсомольца», так что ЯРИЛ останется единственной неприступной платформой в этом списке.
Twine
Пропустим другие HTML-платформы, потому что код игр на Javascript и HTML уже достаточно читабелен. Но вот Twine стоит подробного осмотра.
Во-первых, все игры Twine открываются в самом редакторе Twine. Игры Twine 1 открываются только в редакторе Twine 1 и то же самое для второй версии. Поэтому если вы хотите посмотреть исходники какой-нибудь игры, её достаточно импортировать в редактор.
Кроме того, при помощи программы tweego HTML-файл можно преобразовать в приличный человеческий черновик для редактирования.
TADS 2 (дополнение)
Кроме вышеупомянутой страницы, которая достаёт все строки из игры, есть ещё один скрипт на Perl, который полностью декомпилирует игру. Если запустить его в командной строке, то вы получите файл .t со всеми функциями игры.Скрипт даёт читабельный вывод даже на русской RTADS, но в моём тестировании исходник скомпилировался без ошибок только для игры на английском.
В заключение
Данная информация дана для личного ознакомительного использования. Законы большинства стран запрещают взлом программного обеспечения, а также распространение результатов взлома. Играйте честно.
Ren'Py
Можно проще. Уже делали готовые батники, чтобы не ставить самостоятельно ничего лишнего. Плюс минимальный гуи. Скачать, положить в папку с игрой, запустить батник, выбрать нужный пункт. На английском только.
Для винды
Линукс и мак
Скачать можно и без регистрации на форуме.
QSP
На куспе есть ещё одна хитрость, помимо пароля. Можно в конечный файл игры (через txt2gam) вписать несколько локаций с одинаковым названием, тогда qgen выдаст ошибку и не откроет файл. Был ещё AeroQSP, там есть нюансы по открытию.
URQ
Всё же проще, чем собирать из исходников.
QS1 расшифровывается в URQEdit, если повторно зашифровать уже зашифрованный файл. (Сорри за тавтологию).
Для QS2 была готовая программка, но есть нюансы: только под винду и не работает в современных (64-битных)системах, но реально запустить в виртуальной машине с Windows XP, например.
Также там ещё одна старая программка для разбора exe-файлов, когда объединяют плеер с игрой. Тоже для старых систем.
Ещё есть формат шифрования QS3 для старой akurq подробности. Готовых программ для расшифровки QS3 не видела.
Ещё есть шифрование от Фаертона, как в коде этой игры. Для неё я писала программу расшифровки (2 версии: на куспе и на питоне). Прикладывать не буду, так как мне стыдно за тот ужасный код, который может содержать баги. Но если кому-то сильно надо, пишите в личку, на почту, в дискорд. В общем знаете, где меня найти.
ADRIFT
https://ifwiki.ru/ADRIFT
Читала, что есть способ расшифровки. Но не пробовала, точного рецепта не знаю.
RPG Maker
Для извлечения файлов есть две программки:
Одна для RPG Maker MV https://bitbucket.org/SilicaAndPina/rpgmv-decryptor/downloads/
и вторая для всех остальных https://rpgmaker.ru/forum/utility/58724-raspakovshchik-zashifrovannykh-arkhivov-xp-vx-ace (сайт заблокирован не территории рф)