4

我得到了一个不再受支持的脚本,我正在寻找一种方法来更改其中变量的值......脚本是加密的(loadstring/bytecode/类似的东西),例如:loadstring('\27\76\117\97\81\0\1\4\4\4\8\0\')

我可以找到我想要更改的内容(编译脚本后通过记事本),但是如果我尝试更改值,脚本将无法工作,如果我更改并尝试重新编译它仍然无法工作:"luac: Testing09.lua: unexpected end in precompiled chunk" ...

有任何想法吗?我在一个使用ollydbg的程序中做了类似的事情,但我不能将它与lua脚本一起使用......我有点迷路了,做了一些谷歌搜索很长一段时间找不到方法......任何想法?

4

1 回答 1

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在找到具有要更改的字符串的常量后使用。

总而言之,这里有一些乐趣......

于 2013-10-08T11:46:05.850 回答