Lua 5.0 to Lua 5.1 - Форум
W4Tweaks
Форум

Меню сайта
Последние темы
Последние файлы



Вход



Поиск


Поиск Google
Loading

Переводчик Google


Мини-чат
 
500

Статистика
Rambler's Top100 Locations of visitors to this page
Друзья сайта

Если вы хотите увидеть в этом спиcке свой клан загляните сюда



Наш баннер:


· RSS · 22.08.2014, 23:37
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Форум » [W4M] Worms 4 Mayhem » 5.2. Вопросы по скриптингу » Lua 5.0 to Lua 5.1
Lua 5.0 to Lua 5.1
synmais
Дата: Воскресенье, 30.12.2012, 13:21 | Сообщение # 1
synmais
Только что регнулся
Группа: Проверенные
Сообщений: 5
Репутация: 0
Статус: Offline
Здравствуйте!

Уже несколько дней бьюсь над проблемой декодирования компилированного кода на 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
Дата: Воскресенье, 30.12.2012, 13:47 | Сообщение # 2
firsacho
ICQ = 453-163-541
Группа: Админы
Сообщений: 3306
Репутация: 63
Статус: Offline
synmais, перенес тебя в проверенные.

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

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





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

www.w4mod.tk - моя модификация для worms4

www.fir-st.narod.ru - моя домашняя творческая страничка

www.botarena.by.ru - мой сайт об игре robot arena 2 (битвы роботов)
 
synmais
Дата: Воскресенье, 30.12.2012, 14:04 | Сообщение # 3
synmais
Только что регнулся
Группа: Проверенные
Сообщений: 5
Репутация: 0
Статус: Offline
Спасибо, напишу ему тогда)

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

Вот такие вот пироги=(
 
AlexBond
Дата: Суббота, 05.01.2013, 03:04 | Сообщение # 4
AlexBond
Легендарный червь
Группа: Админы
Сообщений: 1023
Репутация: 103
Статус: Offline
Заметив твой призыв, ответил в личку, но еще раз повторюсь сюда.
Итак, все отличие версий декомпиляторов в представлении чисел, все числа в 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(160Kb)


 
synmais
Дата: Суббота, 05.01.2013, 13:08 | Сообщение # 5
synmais
Только что регнулся
Группа: Проверенные
Сообщений: 5
Репутация: 0
Статус: Offline
Спасибо большое! Буду разбираться.
Правда пока что глухо... ChunkSpy изначально пробегает все без ошибок.
А менять прогой все числа подряд не вариант, наверное =)
 
AlexBond
Дата: Суббота, 05.01.2013, 14:43 | Сообщение # 6
AlexBond
Легендарный червь
Группа: Админы
Сообщений: 1023
Репутация: 103
Статус: Offline
Дай код посмотрю, мне проще увидеть проблему, я на HEX смотрю как на экран матрицы B)


 
synmais
Дата: Суббота, 05.01.2013, 20:39 | Сообщение # 7
synmais
Только что регнулся
Группа: Проверенные
Сообщений: 5
Репутация: 0
Статус: Offline
=)

Ну, например, вот этот:
Прикрепления: AutoDeleteMail.luac(13Kb)
 
AlexBond
Дата: Воскресенье, 06.01.2013, 00:02 | Сообщение # 8
AlexBond
Легендарный червь
Группа: Админы
Сообщений: 1023
Репутация: 103
Статус: Offline
Посмотрел твой код, так тебе не нужна моя прога

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

                          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(30Kb)


 
AlexBond
Дата: Воскресенье, 06.01.2013, 01:11 | Сообщение # 9
AlexBond
Легендарный червь
Группа: Админы
Сообщений: 1023
Репутация: 103
Статус: Offline
И еще
Цитата
в АО используется 5.0.3 луа.

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


 
synmais
Дата: Воскресенье, 06.01.2013, 01:36 | Сообщение # 10
synmais
Только что регнулся
Группа: Проверенные
Сообщений: 5
Репутация: 0
Статус: Offline
Ясно)) Что ж спасибо)
Я просто думал, что можно как-то переделать байткод в 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+ версии, то заработает...
 
Герыч
Дата: Понедельник, 14.01.2013, 16:51 | Сообщение # 11
Герыч
Админ
Группа: Админы
Сообщений: 1240
Репутация: 60
Статус: Offline
Просто идея: взять, загрузить из lua твой откомпилированный скрипт чем-то вроде loadfile() а потом сериализовать загруженную функцию:

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

print(serialise(f))


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

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


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Форум » [W4M] Worms 4 Mayhem » 5.2. Вопросы по скриптингу » Lua 5.0 to Lua 5.1
Страница 1 из 11
Поиск:

Copyright W4Tweaks™ 2008-2014 Хостинг от uCoz