- 430
- 190
Оригинал (самый крутой форк LJD на данный момент):
Декомпилятор не мой. Автор – Andrian Nord, а форк принадлежит ZNix'у. Лицензия и копирайты остались на своих местах. Я лишь внёс изменения, которые перечислены ниже.
Изменения (исправления сделаны не до конца и коряво, зато работает!... Наверное):
Чтобы декомпилировать, нужно также, как и до этого, установить Питон и перетащить скрипт на "decompile.py".
Files · devel · Campbell Suter (ZNix) / luajit-decompiler · GitLab
LuaJIT decompiler - forked from https://github.com/Aussiemon/ljd/
gitlab.com
Изменения (исправления сделаны не до конца и коряво, зато работает!... Наверное):
- Отключен грязный фикс repeat until true циклов, вызывавший ошибки.
- Исправлен баг с циклами for, когда декомпилятор считал переменную, объявленную до цикла, в теле цикла за новую.
- Отключен код, отвечавший за складывание таблиц, который вызывал генерацию невалидного кода.
- Исправлена ситуация, когда декомпилятор не учитывал отсылки на локальные переменные из дочерних прототипов (функций).
- Разрешено упрощение временных функций (используются только единожды: объявляются и сразу вызываются), как в https://github.com/marsinator358/luajit-decompiler-v2.
- Добавлено игнорирование большинства мусорных инструкций (в консоль пишется, что они удаляются, но это только для декомпилятора, содержимое файлов остаётся прежним).
- Исправлен случай, когда узлы могли посещать самих себя, что приводило к бесконечной рекурсии (только для логических, унарных и математических операций).
- Увеличен лимит рекурсии до 1 миллиона (рекомендуется держать диспетчер задач наготове)
- Исправлено добавление повторяющихся ссылок на объекты, что могло приводить к переполнению памяти во время декомпиляции.
- Убрано множество проверок, которые препятствовали декомпиляции (и так сойдёт).
- Прочие мелкие, корявые фиксы, разбросанные по всему коду.
Чтобы декомпилировать, нужно также, как и до этого, установить Питон и перетащить скрипт на "decompile.py".
Я не стал лазить своими грязными руками в новом декомпиляторе лужи от Марсинатора по причине того, что он написан на C++, а это страшно!!! На самом деле дело не совсем в этом, а в том, что у него уже из коробки есть пара дыр: как минимум его можно заставить читать невыделенную область памяти намеренно испорченным байт-кодом. А учитывая мои руки-крюки, я бы сделал только хуже: сначала он просто не такой байт из памяти считает, а потом уже какой-нибудь Лолендор через твою вебку смотрит на то, как ты душишь своего питона на исходники ЛуаЖит . Да и такой подход не самый верный, лучше будет сделать какую-нибудь отдельную программку, которая будет избавлять байт-код от нечисти, чтобы его можно было потом уже любым декомпилятором открыть, и сделать основой этого технику для оптимизации DCE (Dead Code Elimination), ведь большая часть мусорного кода тупо лежит мёртвым грузом, а иначе бы она заставила лужу конкретно так просраться.
Вложения
Последнее редактирование: