Вход: приложенный пользователем script.txt, фактически ZIP (сохранён как script.zip). Происхождение из boot.dspack указано пользователем; сам контейнер не предоставлен и независимо не проверялся. В архиве 66 записей, из них 43 файла Lua 5.1. Папки и регистр имён сохранены в script/.
| Проверка | Результат |
|---|---|
| Байткод прочитан полностью, без хвостовых данных | 43 / 43 |
| Обратная сериализация входа побайтово идентична | 43 / 43 |
| Выбранные исходники компилируются Lua 5.1 | 43 / 43 |
| Исполняемое дерево после компиляции точно совпало | 43 / 43 |
| Выбранные результаты с маркерами ошибок декомпилятора | 0 |
Все выбранные файлы получены unluac v1.2.3.530 в обычном режиме. LuaDec 2.2 также запускался для каждого файла в режимах default, -dg, -a, -dis, -pn, -fc. Варианты unluac с --nodebug проверены отдельно. Сравнение -fc относится к стандартному варианту LuaDec, а не к выбранному исходнику unluac; его результаты не следует смешивать с финальной проверкой.
Под «точно совпало» понимается рекурсивное равенство для каждого прототипа:
- байтов инструкций;
- типов и байтов констант, включая строковые значения;
- числа upvalues, параметров, флагов vararg и maxstacksize;
- числа, порядка и исполняемых данных вложенных функций.
Имена источников, номера строк, имена локальных переменных и отладочные области видимости из сравнения исключены. Совпадение исполняемых данных — сильная статическая проверка восстановления, но это не запуск в игре и не подтверждение совместимости с другими версиями движка. Оригинальное форматирование, комментарии и удалённые отладочные имена не восстановить по байткоду.
Ссылка пользователя: https://github.com/Coldzer0/LuaDecompiler/releases/download/v1.0.0/cLuaDecompiler_linux_x86-64.zip.
Загрузка по прямой ссылке и через API релизов не удалась: GitHub перенаправляет на release-assets.githubusercontent.com, недоступный в сетевой среде. Поэтому cLuaDecompiler не запускался, его результаты не приписываются этой работе. Исходники проекта получены с GitHub и изучены; точная ревизия и сведения об остальных инструментах находятся в provenance.json. Ревизия исходников не заявляется идентичной релизному бинарнику.
Изученные функции:
| Опция | Назначение и применение |
|---|---|
--dec |
Восстановление Lua-подобного исходника. |
--dis |
Дизассемблирование для проверки инструкций и констант. |
--ssa-dump |
Промежуточное SSA-представление для анализа регистров и потока управления. |
--annotate |
Комментарии дизассемблирования в декомпилированном тексте. |
--debug |
Диагностический поток stderr. |
--lua-version 51 |
Ручная версия при ошибке автоопределения; здесь стандартный заголовок 5.1. |
--opcode-table |
Пользовательское сопоставление опкодов. Не применяется без доказательств изменённых опкодов: стандартные инструкции уже дали точное совпадение. |
Режимы dec/dis/SSA взаимоисключающие; их нужно запускать раздельно, а не передавать все флаги одним вызовом. Этот отчёт описывает первоначальный запуск boot без cLuaDecompiler. Позже пользователь предоставил бинарник: он успешно применён к скриптам resources. Обновлённый скрипт восстановления сохраняет четыре режима cLuaDecompiler и проверяет обычный/аннотированный результат наравне с другими кандидатами. Исходники boot и их первоначальный manifest при этом не изменены.
Требуются входной ZIP, LuaDec, luac 5.1, Java и unluac. Инструменты не включены в Git; их происхождение и контрольная сумма JAR зафиксированы в provenance.json.
python tools/recover_boot.py /path/script.zip \
--work-dir /path/recovery \
--luadec /path/luadec --luac /path/luac \
--java /path/java --unluac /path/unluac.jarОпционально добавьте --clua /path/cLuaDecompiler для вывода его режимов decompile, annotated+debug, disassemble и SSA. Не используйте существующий рабочий каталог от другого архива: используйте новый пустой путь.
Вход имеет little-endian Lua 5.1 с 32-битным size_t. Собранный локально LuaDec использует 64-битный size_t; поэтому tools/lua51_chunk.py пересериализует только длины строк и соответствующий байт заголовка для LuaDec. Инструкции, константы и отладочная информация сохраняются; дерево до и после преобразования проверяется на равенство. Unluac читает оригиналы напрямую. Принудительная замена только байта заголовка без пересериализации была бы ошибкой.
Генератор сохраняет input/, portable/, diagnostics/, recovered/, при необходимости needs-repair/ и manifest.json. Диагностика содержит все кандидаты, stderr, дизассемблирование, дерево функций и вывод сравнения LuaDec. Игровые скрипты не исполняются: luac только проверяет и компилирует их.
Скрипты являются восстановленными игровыми материалами, предоставленными пользователем. Новая лицензия на них не назначается. Правила использования сторонних декомпиляторов определяются их лицензиями; их бинарники и исходники в эту папку не включены.