Lua 5.0 to Lua 5.1
|
|
Сообщений: 5
|
Опубликовано: 30.12.2012, 13:21:29
Здравствуйте!
Уже несколько дней бьюсь над проблемой декодирования компилированного кода на 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) --------------------------------------------- Кто-то вроде ответил в личку, но я не могу прочитать... Пишет: "Вы входите в группу пользователей, которым запрещено совершать данное действие. По всем вопросам обращайтесь к администратору сайта.". Блин, это же ЛС=) Почему я не могу прочитать?) В ЛС к админам и модерам тоже не могу писать, та же ошибка.
|
|
|
|
Сообщений: 3813
|
Опубликовано: 30.12.2012, 13:47:38
synmais, перенес тебя в проверенные.
Я думаю лучше всего тебе обратиться в ЛС к самому Алексбонду. Правда он не очень часто заходит на данный сайт, так что пару дней может придется подождать.. . Ответ напишешь в этой теме.
Лично я не сталкивался с надобностью такой декомплияции, хоть на луа и кодил.. Твой вопрос я так понимаю связан с Worms 3d.. ?
Смысл жизни в том, чтобы жизнь имела смысл... (firsacho 2005) Рай придуман, чтобы не страшно было умирать. Ад придуман, чтобы не страшно было жить. (firsacho 2007) Мир делиться на два типа людей: Бездарные трудоголики и Талантливые лентяи. (firsacho 2008)
mod.worms.pro - мод Worms Renewation для Worms4
|
|
|
|
Сообщений: 5
|
Опубликовано: 30.12.2012, 14:04:40
Спасибо, напишу ему тогда)
Не совсем с Worms 3D. У меня просто есть откомпилированные файлы *.luac (это то же, что в Червяках *.luab (установленные Черви есть, сверил заголовки: и там и там в начале файла LuaP, а значит одна версия компилятора 5.0.х)) А декомпилировать мне надо, чтобы, возможно, изменить какие то функции и дописать свои. Если был бы исходник - никакаих проблем... Но на руках только компилированный файл, а автор куда-то пропал несколько лет назад...
Вот такие вот пироги=(
|
|
|
|
Сообщений: 1042
|
Опубликовано: 05.01.2013, 03:04:50
Заметив твой призыв, ответил в личку, но еще раз повторюсь сюда. Итак, все отличие версий декомпиляторов в представлении чисел, все числа в 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)
Так что ничего сложного нет, но вручную это сложновато.
Вот тебе прога, надеюсь учитывая мое видео по декомпилированию, ты сможешь это сделать сам.
|
|
|
|
Сообщений: 5
|
Опубликовано: 05.01.2013, 13:08:41
Спасибо большое! Буду разбираться. Правда пока что глухо... ChunkSpy изначально пробегает все без ошибок. А менять прогой все числа подряд не вариант, наверное =)
|
|
|
|
Сообщений: 1042
|
Опубликовано: 05.01.2013, 14:43:46
Дай код посмотрю, мне проще увидеть проблему, я на HEX смотрю как на экран матрицы
|
|
|
|
Сообщений: 5
|
Опубликовано: 05.01.2013, 20:39:01
=)
Ну, например, вот этот:
|
|
|
|
Сообщений: 1042
|
Опубликовано: 06.01.2013, 00:02:43
Посмотрел твой код, так тебе не нужна моя прога
Вот пример Код 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 Видимо он не был рассчитан на такие размеры таблиц....
|
|
|
|
Сообщений: 1042
|
Опубликовано: 06.01.2013, 01:11:12
И еще Цитата в АО используется 5.0.3 луа. http://alloder.pro/topic....try8450
|
|
|
|
Сообщений: 5
|
Опубликовано: 06.01.2013, 01:36:51
Ясно)) Что ж спасибо) Я просто думал, что можно как-то переделать байткод в 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
|
Опубликовано: 14.01.2013, 16:51:50
Просто идея: взять, загрузить из lua твой откомпилированный скрипт чем-то вроде loadfile() а потом сериализовать загруженную функцию:
Код local f = loadfile("your compiled file.luc")
print(serialise(f))
В качестве serialise можно перебрать вот те, которые умеют корректно работать с функциями, например Pluto: http://lua-users.org/wiki/TableSerialization
Ничего из приведённого сам не пробовал
________________________ __|____|____|____|____|__ |____|____|____|____|____| __|___бицца головой___|__ |____|____|сюда|____|____| __|____|____|____|____|__ |____|____|____|____|____|
|
|
|
|