Skip to content

Latest commit

 

History

History
65 lines (44 loc) · 8.16 KB

README.md

File metadata and controls

65 lines (44 loc) · 8.16 KB

Скрипты из пользовательского извлечения boot.dspack

Вход: приложенный пользователем 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;
  • числа, порядка и исполняемых данных вложенных функций.

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

Запрошенный cLuaDecompiler

Ссылка пользователя: 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 только проверяет и компилирует их.

Права

Скрипты являются восстановленными игровыми материалами, предоставленными пользователем. Новая лицензия на них не назначается. Правила использования сторонних декомпиляторов определяются их лицензиями; их бинарники и исходники в эту папку не включены.