[ Обновленные темы · Новые сообщения · Участники · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Lua 5.0 to Lua 5.1
synmais
Проверенные
Сообщений: 5
Реп: 0
Здравствуйте!

Уже несколько дней бьюсь над проблемой декодирования компилированного кода на Lua 5.0.x.
Но пока ничто не дало положительного результата.
Уже и руки почти опустились, но увидел на ютубе видео Luadec preview by AlexBond (http://www.youtube.com/watch?v=I1oRSumM9Lw), там автор смог конвертировать код в версию 5.1, а затем успешно декомпилировать.
Но все мои потуги найти программу lua5.0>5.1 или какое-то описание процесса оказались тщетными...
Собственно, хочется узнать, как именно преобразовать 5.0 в 5.1. Даже если без программы (кода не так много, можно вручную). Просто хочу понять принцип.

Спасибо.

Добавлено (30.12.2012, 13:21)
---------------------------------------------
Кто-то вроде ответил в личку, но я не могу прочитать... Пишет: "Вы входите в группу пользователей, которым запрещено совершать данное действие. По всем вопросам обращайтесь к администратору сайта.". Блин, это же ЛС=) Почему я не могу прочитать?) В ЛС к админам и модерам тоже не могу писать, та же ошибка.

 
firsacho
Админы
Сообщений: 3813
Реп: 84 / Инв: 15
synmais, перенес тебя в проверенные.

Я думаю лучше всего тебе обратиться в ЛС к самому Алексбонду. Правда он не очень часто заходит на данный сайт, так что пару дней может придется подождать..
.
Ответ напишешь в этой теме.

Лично я не сталкивался с надобностью такой декомплияции, хоть на луа и кодил.. Твой вопрос я так понимаю связан с Worms 3d.. ?




Смысл жизни в том, чтобы жизнь имела смысл... (firsacho 2005)
Рай придуман, чтобы не страшно было умирать. Ад придуман, чтобы не страшно было жить. (firsacho 2007)
Мир делиться на два типа людей: Бездарные трудоголики и Талантливые лентяи. (firsacho 2008)

mod.worms.pro - мод Worms Renewation для Worms4
 
synmais
Проверенные
Сообщений: 5
Реп: 0
Спасибо, напишу ему тогда)

Не совсем с Worms 3D. У меня просто есть откомпилированные файлы *.luac (это то же, что в Червяках *.luab (установленные Черви есть, сверил заголовки: и там и там в начале файла LuaP, а значит одна версия компилятора 5.0.х))
А декомпилировать мне надо, чтобы, возможно, изменить какие то функции и дописать свои.
Если был бы исходник - никакаих проблем... Но на руках только компилированный файл, а автор куда-то пропал несколько лет назад...

Вот такие вот пироги=(
 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Заметив твой призыв, ответил в личку, но еще раз повторюсь сюда.
Итак, все отличие версий декомпиляторов в представлении чисел, все числа в Lua являются числами с плавающими запятыми, там нет целых, так вот версии отличаются точностью этих чисел, в одной версии она 8 байтная, в другой 4 байтная.
Сама программа Lua50to51 делает замену порядков чисел.

Код

...
  NewVal:real;
...
NewVal:=single(Pointer(Longword(Buf) + i+1)^);
                            p:=Pointer(Longword(Buf2) + j+1);
                            move(NewVal,p^,8);
                            inc(i,4);inc(j,8)


Так что ничего сложного нет, но вручную это сложновато.

Вот тебе прога, надеюсь учитывая мое видео по декомпилированию, ты сможешь это сделать сам.

Прикрепления: Lua50to51.rar (160.0 Kb)


 
synmais
Проверенные
Сообщений: 5
Реп: 0
Спасибо большое! Буду разбираться.
Правда пока что глухо... ChunkSpy изначально пробегает все без ошибок.
А менять прогой все числа подряд не вариант, наверное =)
 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Дай код посмотрю, мне проще увидеть проблему, я на HEX смотрю как на экран матрицы B)


 
synmais
Проверенные
Сообщений: 5
Реп: 0
=)

Ну, например, вот этот:
Прикрепления: AutoDeleteMail.luac (13.2 Kb)
 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Посмотрел твой код, так тебе не нужна моя прога

Вот пример
Код

                          const [10]: "ADM_MAILQUERY_ITEMS_EXTRACTED"
02C6  03                 const type 3
02C7  0000000000001040   const [11]: (4)


у тебя там числа все в нужном формате, так что моя прога Lua50to51 не нужна.
Ну, а декомпилятор не совершенен, и твой код он не осиливает, тут я помочь не могу, увы.
Это нужен более совершенный декомпилятор.

Если же запустить листинг с помощью luac502.exe -l то можно получить твой код.
Код
    37    [18]    GETGLOBAL    0 0    ; Global
  38    [18]    LOADK     1 16    ; "ADM_MAILQUERY_EXTRACT_FAILED"
  39    [18]    LOADK     2 17    ; 32
  40    [18]    CALL      0 3 1
  41    [20]    GETGLOBAL    0 0    ; Global
  42    [20]    LOADK     1 18    ; "ADM_MAILQUERY_NO_MITEMS"
  43    [20]    LOADK     2 5    ; 0
  44    [20]    CALL      0 3 1
  45    [23]    GETGLOBAL    0 0    ; Global
  46    [23]    LOADK     1 19    ; "localization"
  47    [23]    LOADK     2 20    ; "eng"
  48    [23]    CALL      0 3 1
  49    [26]    NEWTABLE  0 0 0
  50    [28]    NEWTABLE  1 0 0
  51    [30]    SETTABLE  1 255 272    ; 0 "Тренер по гоблиноболу"
  52    [31]    SETTABLE  1 257 273    ; 1 "Саранг Панзария"
  53    [32]    SETTABLE  1 259 274    ; 2 "Аукцион"
  54    [33]    SETTABLE  1 275 276    ; 3 "Стратеги Противостояния"
  55    [34]    SETTABLE  1 261 277    ; 4 "Культисты Осколка Язеса"
  56    [35]    SETTABLE  0 271 1    ; "rus"

Декомпилятор luadec.exe ругается в месте SETTABLE 1 255 272
Видимо он не был рассчитан на такие размеры таблиц....
Прикрепления: auto.lua (29.5 Kb)


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
И еще
Цитата
в АО используется 5.0.3 луа.

http://alloder.pro/topic....try8450


 
synmais
Проверенные
Сообщений: 5
Реп: 0
Ясно)) Что ж спасибо)
Я просто думал, что можно как-то переделать байткод в 5.1.4 (или какая там последняя), чтобы luadec последней версии воспринял его нормально. Ведь если кодировать в 5.1.4, то потом декодируется нормально, а если в 5.0.3, то обратно никак. Но там видимо дело не в числах, а в общей структуре байткода)) Пытался сравнивать HEX Workshop-ом байткоды 5.0.3 и 5.1.4, что бы найти закономерность и вручную поправить, но почти все сравнивалки выдавали практически полное несоответствие, хотя я своими глазами видел одинаковые блоки, которые просто переезжали с места на места и между ними образовывался новый код непонятный... Простая замена заголовка (с LuaP)на тот что из 5.1+ (с LuaQ) не приближала к результату и пришлось немного забить.
Автор объявился и поправил аддон, но спортивный интерес у меня остался))
Так то конечно можно тем же ChunkSpy-ем просто отдизасемблить (получается примерно то же, что и luac502.exe -l) и потом ручками превращать это дело в рабочие функции, но... спортивный интерес говорит, что способ должен быть))
Исходники luadec есть в c++ на linux, может там гляну потом... Может быть если прикрутить версии 5.0.2 декомпилятора распознавание таблиц от 5.1+ версии, то заработает...
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
Просто идея: взять, загрузить из lua твой откомпилированный скрипт чем-то вроде loadfile() а потом сериализовать загруженную функцию:

Код
local f = loadfile("your compiled file.luc")

print(serialise(f))


В качестве serialise можно перебрать вот те, которые умеют корректно работать с функциями, например Pluto: http://lua-users.org/wiki/TableSerialization

Ничего из приведённого сам не пробовал :)


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
  • Страница 1 из 1
  • 1
Поиск: