2013-10-08 8 views
4

я получил сценарий, который больше не поддерживается, и я ищу способ изменить значение переменной в нем ... Сценарий шифруется (loadstring/bytecode/ что-то подобное), например: loadstring('\27\76\117\97\81\0\1\4\4\4\8\0\')Можно ли изменить значение в байт-коде Lua? Как? Есть идеи?

я могу найти то, что я хочу изменить (через блокнот после компиляции скрипта), но если я попытаюсь изменить значение, сценарий не будет работать, если я изменюсь и попытаюсь перекомпилировать его, все равно не сработает: "luac: Testing09.lua: unexpected end in precompiled chunk" ...

Любые идеи? Я сделал что-то вроде этого с программой, давно использующей ollydbg, но я не могу использовать ее с lua скриптами ... Я немного потерялся здесь, хотя некоторые из Google Googling довольно долго не могли найти способ ... Есть идеи?

+0

возможно дубликат [Лучший инструмент (ы) для декомпиляции Lua байткод?] (Http://stackoverflow.com/questions/743684/best -tools-for-decompiling-lua-bytecode) – hjpotter92

+0

Не совсем, но я нашел что-то в этом посте, которое могло бы мне помочь ... Но то, что я хочу, это способ изменить это значение ... Это просто строка, которая дошла до быть измененным, и я понятия не имею, как ... – user2857670

+1

Насколько я правильно понял, что у вас есть сценарий lua, и внутри него есть некоторый байт-код, загруженный с помощью 'loadstring'? И что именно вы хотите изменить, т.е. е. строковая константа для другого или что-то еще? – mpeterv

ответ

7

Легко изменить строку в байт-коде Lua. Вам просто нужно отрегулировать длину строки после ее изменения. Длина перед строкой. Вероятно, это занимает четыре или восемь байтов непосредственно перед строкой, в зависимости от того, есть ли у вас 32-разрядная или 64-разрядная платформа. Длина хранится в контенте машины, где был создан байт-код. Обратите внимание, что строки включают в себя завершающий '\ 0', и это считается длиной.

Возможно, проще просто скопировать несколько байтов напрямую. Запишите этот файл

return "this is the new string you want" 

Сформировать байткод из него с luac и посмотреть на свалку luac.out и локализовать строку и ее длину. Скопируйте эти байты в исходный файл.

Я не знаю, обрабатывает ли блокнот двоичные данные. если это не так, для этого вам понадобится шестнадцатеричный редактор.

Другое решение - написать программу Lua, которая считывает байт-код в виде строк, генерирует байт-код для return "this is the new string you want", выполняет изменение в исходном байт-коде с использованием строковых операций и записывает его обратно в файл.

Вы также можете попробовать мою библиотеку инспекторов байт-кода lbci, которая позволяет изменять константы в функциях. Вы загружаете байт-код (но не выполняете его) и используете setconstant после определения константы, которая имеет строку, которую вы хотите изменить.

В общем, есть некоторые интересно было быть здесь ...

+0

все в порядке, ха-ха, я думаю, что смогу сделать это сейчас ... собираюсь попробовать, как только я вернусь домой, из-за этого я отправлю отзыв ... спасибо, брату ... – user2857670

+0

Человек, я узнал, как сменить! Но теперь, поскольку я отсталый, я не могу изменить размер строки ... Я использую hex-редактор (я могу изменить его и WORKS! Если строка имеет тот же размер, что и оригинал! одно слово долгое время не будет работать = \ нужно иметь одинаковый размер ...) Любые идеи? Я на самом деле не компьютерный парень. = \ И извините за мой английский, никогда не было ни одного английского класса за всю мою жизнь ... надеюсь, вы понимаете ... – user2857670

+0

@ user2857670, вы попробовали мое первое предложение? Возможно, вы можете опубликовать пример того, какую новую строку вы хотите и что старая. – lhf