Skip to content

Latest commit

 

History

History
73 lines (48 loc) · 7.83 KB

README.md

File metadata and controls

73 lines (48 loc) · 7.83 KB

Восстановление скриптов resources.dspack

Источник: два пользовательских вложения EXTRACTresources.txt и EXTRACTresources-2.txt, фактически ZIP-архивы. Сохранены как EXTRACTresources.zip и EXTRACTresources-with-tool.zip вне Git. Все 228 Lua-файлов в них побайтово одинаковы; во втором архиве дополнительно находится Linux ELF EXTRACTresources/cLuaDecompiler размером 1 212 432 байта.

Происхождение скриптов из resources.dspack указано пользователем; сам игровой контейнер не предоставлен. Архивы распакованы с проверкой путей и сохранением регистра и структуры папок.

Итог

228 восстановленных исходников. Все выбраны из обычного режима unluac после сравнительной проверки трёх декомпиляторов. Каждый исходник повторно скомпилирован Lua 5.1; у 228/228 полностью совпало исполняемое дерево с входным байткодом.

Входные файлы содержат суммарно 1 407 прототипов и 65 067 инструкций. Полный разбор и обратная сериализация каждого входа дали побайтовое равенство оригиналу.

Сравнение вариантов

Инструмент / режим Синтаксис корректен Точное исполняемое дерево
LuaDec, стандартный 149 / 228 91 / 228
LuaDec, -dg 114 / 228 74 / 228
LuaDec, -a 175 / 228 0 / 228
unluac, стандартный 228 / 228 228 / 228
unluac, --nodebug 202 / 228 0 / 228
cLuaDecompiler, --dec 227 / 228 99 / 228
cLuaDecompiler, --dec --annotate --debug 223 / 228 99 / 228

«Не совпало» не обязательно означает неправильное поведение: другой эквивалентный код также может отличаться по инструкциям. Однако при наличии точно совпадающего варианта предпочтение отдано ему. Успешный код выхода декомпилятора не считается доказательством корректности: например, cLuaDecompiler завершился с кодом 0 во всех перечисленных запусках, но часть исходников не компилируется. LuaDec -dg аварийно завершился на одном файле; ошибка сохранена в диагностике.

Приложенный cLuaDecompiler действительно использован

В отличие от предыдущего восстановления boot, теперь бинарник доступен. Его SHA-256 записан в provenance.json. Подлинность и соответствие конкретному релизному тегу независимо не установлены.

Для каждого из 228 файлов выполнены четыре отдельных запуска:

cLuaDecompiler --dec input.lua
cLuaDecompiler --dec --annotate --debug input.lua
cLuaDecompiler --dis input.lua
cLuaDecompiler --ssa-dump input.lua

Все 912 запусков завершились с кодом 0. Это статистика выполнения, не гарантия корректности SSA или декомпиляции. Обычный и аннотированный исходники отдельно проверены luac и включены в сравнение кандидатов. Дизассемблирование и SSA сохранены в итоговом ZIP, вместе со stdout/stderr и результатами других инструментов.

--lua-version 51 не понадобился: заголовки корректно распознаны автоматически. Пользовательская --opcode-table не применялась: стандартное сопоставление опкодов уже обеспечило точное восстановление, доказательств необходимости другого нет. --help сохранён в архиве.

Дополнительно LuaDec запускался с -dis, -pn, -fc. Результаты -fc относятся только к стандартному варианту LuaDec, а не к выбранному unluac-исходнику.

Что проверено

Для каждого файла сравниваются рекурсивно:

  • байты всех инструкций;
  • типы и байты констант;
  • параметры, число upvalues, vararg и maxstacksize;
  • порядок и содержимое вложенных прототипов.

Отладочная информация (имена источников, локальных переменных, номера строк) в это равенство не входит. Оригинальные комментарии и форматирование не восстанавливались. В игре скрипты не запускались, функции движка не имитировались. Совпадение — статическая проверка байткода, а не тест игрового поведения.

Для LuaDec с 64-битным size_t созданы переносимые копии входного Lua 5.1, с пересериализацией длин строк. Равенство их разобранных деревьев проверено. cLuaDecompiler и unluac работали напрямую с оригинальными файлами.

Повторение

Используйте новый пустой рабочий каталог и инструменты, описанные в provenance.json:

python tools/recover_boot.py /path/EXTRACTresources.zip \
  --work-dir /path/resources-recovery \
  --luadec /path/luadec --luac /path/luac \
  --java /path/java --unluac /path/unluac.jar \
  --clua /path/cLuaDecompiler

Имя recover_boot.py сохранено для совместимости; скрипт подходит и для resources. Параметр --clua теперь не только сохраняет диагностику, но и добавляет обычный/аннотированный результат в общий отбор с проверкой повторной компиляцией. Приоритет — точное равенство исполняемого дерева; синтаксическая корректность сама по себе недостаточна для утверждения о восстановлении.

В manifest.json содержатся SHA-256 входов и выбранных исходников, результаты всех семи вариантов и коды выхода диагностических режимов. Исходные бинарные чанки, инструменты и объёмная диагностика в Git не добавлены; исходные чанки и диагностика доступны в ZIP-результате. Игровым скриптам новая лицензия не назначается.