Исходник Софт Супер-пупер-мега-декомпилятор-лужи9001 (модификация LJD)

Maxim25012

Известный
Автор темы
518
239
Оригинал (самый крутой форк LJD на данный момент):
Декомпилятор не мой. Автор – Andrian Nord, а форк принадлежит ZNix'у. Лицензия и копирайты остались на своих местах. Я лишь внёс изменения, которые перечислены ниже.

Изменения (исправления сделаны не до конца и коряво, зато работает!.. Наверное):
  • Отключён грязный фикс "repeat ... until true" циклов, вызывавший ошибки.
  • Исправлен баг с циклами "for", когда декомпилятор считал переменную в теле цикла, объявленную до цикла, за новую.
  • Отключён код, отвечавший за складывание таблиц, который делал это не до конца, чем вызывал генерацию поломанного кода.
  • Исправлен случай, когда декомпилятор не учитывал отсылки на локальные переменные из дочерних прототипов (функций).
  • Разрешено упрощение функций, которые используются только единожды: объявляются и сразу вызываются; как в https://github.com/marsinator358/luajit-decompiler-v2.
  • Добавлено игнорирование большинства мусорных инструкций (в консоль пишется, что они удаляются, но это только для декомпилятора, содержимое файлов остаётся прежним).
  • Исправлен случай, когда узлы могли посещать самих себя, что приводило к бесконечной рекурсии (только для логических, унарных и математических операций).
  • Увеличен лимит рекурсии до 1 миллиона (рекомендуется держать диспетчер задач наготове при работе с большими скриптами)
  • Исправлено добавление повторяющихся ссылок на объекты, что могло приводить к переполнению памяти во время декомпиляции.
  • Убрано множество проверок, которые препятствовали декомпиляции (и так сойдёт).
  • Добавлена возможность направить вывод дизассемблера в файл. Для этого нужно, чтобы название файла на выходе оканчивалось на ".asm".
  • Исправлен один из случаев, когда дизассемблер мог впадать в бесконечный цикл из-за некорректной инструкции при генерации комментария.
  • Исправлен недочёт, когда дизассемблер прекращал работу, если он не мог сгенерировать комментарий к инструкции из-за ошибки. Вместо этого, комментарий просто не будет добавлен.
  • Добавлен параметр "--no-asm-comments", отключающий генерацию комментариев к инструкциям, что существенно ускоряет процесс дизассемблирования больших скриптов и уменьшает размер файла на выходе, особенно для скриптов с намеренно испорченным байт-кодом.
  • Добавлен параметр "--asm-comment-length-limit", ограничивающий длину комментариев к инструкциям до указанной, но комментарии также генерируются, поэтому на скорость почти не влияет.
  • Исправлен случай, когда дизассемблер крашился из-за того, что не мог дизассемблировать прототип, загружаемый инструкцией "FNEW" (если загружаемый прототип на деле оказывался строкой, числом, или его не было вовсе).
  • Прочие мелкие, корявые фиксы, разбросанные по всему коду.
Теперь он должен разбирать даже самый запущенный байт-код для лужи, но я этого гарантировать не могу.

Чтобы декомпилировать, нужно также, как и до этого, установить Питон и перетащить скрипт на "decompile.py".

Для того чтобы дизассемблировать, нужно перетащить скрипт на "disassemble.py". Он применяет новоиспечённый параметр "--no-asm-comments" для того, чтобы процесс дизассемблирования был максимально быстрым. Если комментарии нужны, то придётся запускать декомпилятор со своими параметрами через командную строку, либо редактируя "disassemble.py" на 16-ой строке.
Пример использования с ограничением длины комментариев:
python main.py --enable_logging --catch_asserts --asm --asm-comment-length-limit=100 --file="input.lua" --output="output.asm"

Я не стал лазить своими грязными руками в новом декомпиляторе лужи от Марсинатора по причине того, что он написан на C++, а это страшно!!! На самом деле дело не совсем в этом, а в том, что у него уже из коробки есть пара дыр: как минимум его можно заставить читать невыделенную область памяти намеренно испорченным байт-кодом. А учитывая мои руки-крюки, я бы сделал только хуже: сначала он просто не такой байт из памяти считает, а потом уже какой-нибудь Лолендор через твою вебку смотрит на то, как ты душишь своего питона на исходники ЛуаЖит o_O. Да и такой подход не самый верный, лучше будет сделать какую-нибудь отдельную программку, которая будет избавлять байт-код от нечисти, чтобы его можно было потом уже любым декомпилятором открыть, и сделать основой этого технику для оптимизации DCE (Dead Code Elimination), ведь большая часть мусорного кода тупо лежит мёртвым грузом, а иначе бы она заставила лужу конкретно так просраться.

P. S. Актуальная версия в архиве "LJD (2)".
 

Вложения

  • LJD.zip
    602.2 KB · Просмотры: 96
  • LJD (1).zip
    602.6 KB · Просмотры: 28
  • LJD (2).zip
    605.1 KB · Просмотры: 38
Последнее редактирование:

takiyama

Участник
29
23
я про то как им пользоваться мне лень разбираться)
Чтобы декомпилировать, нужно также, как и до этого, установить Питон и перетащить скрипт на "decompile.py".
прямым текстом написано, читай хотя бы до конца что ли
 
  • Нравится
Реакции: Vespan

arcashaded

Новичок
1
0
попробуйте вскрыть кто нибудь как то, скрипт оч полезный но с защитой и привязкой по железу
 

Вложения

  • GardenHelper.lua
    94.6 KB · Просмотры: 15

congic

Известный
328
99
и че,кидаю на декомпиле ру,пишет нажмите любую клавишу для продолжения,а никакого файла на рабочем столе или в папке с декомпилятором нету
 

Maxim25012

Известный
Автор темы
518
239
Determined LuaJIT bytecode version: 2.1
Python Для продолжения нажмите любую клавишу . . .
В идеале, так и должно быть, ничего лишнего писать не должно. Но вот что файл не создаётся – странно. Может, ты его не нашёл?

Скинь скрипт. Если что, попробую сам.
 
Последнее редактирование:

congic

Известный
328
99
В идеале, так и должно быть, ничего лишнего писать не должно. Но вот что файл не создаётся – странно. Может, ты его не нашёл?

Скинь скрипт. Если что, попробую сам.
А вообще по дефолту ,где он должен появиться ?
Просто дело явно не в скрипте ,он состоит из 11 строк и другие декомпиляторы его спокойно обрабатывают.
Возможно у меня не та версия python?
 

Maxim25012

Известный
Автор темы
518
239
А вообще по дефолту ,где он должен появиться ?
Просто дело явно не в скрипте ,он состоит из 11 строк и другие декомпиляторы его спокойно обрабатывают.
Возможно у меня не та версия python?
Он должен появляться там же, где и скомпилированный файл. Никаких кардинальных изменений, которые бы требовали новую версию Питона, не делал.
 

congic

Известный
328
99
Он должен появляться там же, где и скомпилированный файл. Никаких кардинальных изменений, которые бы требовали новую версию Питона, не делал.
Попытался не с рабочего стола днкомпилировать а закинуть luac в одну папку с декомпилятором ,результата никакого ,ничего не появляется :(
 

Maxim25012

Известный
Автор темы
518
239
Попытался не с рабочего стола днкомпилировать а закинуть luac в одну папку с декомпилятором ,результата никакого ,ничего не появляется :(
Дай мне его попробовать у себя декомпилировать.

Попробуй другие скрипты декомпилировать им.
 
Последнее редактирование:

Maxim25012

Известный
Автор темы
518
239
Вот же, работает:
Lua:
function main()
    while not isSampAvailable() do
        wait(0)
    end

    sampRegisterChatCommand("house", (function (arg0)
        var1, var2, var3 = arg0:match("(.*)%s+(.*)%s+(.*)")
        local slot1_a1015 = tonumber(var1)
        local slot2_a1018 = tonumber(var2)
        var3 = tonumber(var3)
        var2 = slot2_a1018
        var1 = slot1_a1015

        if var1 ~= nil and var2 ~= nil and var3 ~= nil then
            placeWaypoint(var1, var2, var3)
        end
    end))
    wait(-1)
end
Другие скрипты пробовал декомпилировать им? Другие версии декомпилятора на Питоне файл создают? Питон в PATH есть?