有没有可能在 Lua 字节码中更改值?如何进行?有什么想法?

我有一个不再支持的脚本,我正在寻找一种方法来更改其中变量的值...该脚本已加密(例如 loadstring/bytecode/),如下所示: loadstring('\27\76\117\97\81\0\1\4\4\4\8\0\')

我可以在编译脚本后通过记事本找到要更改的内容,但如果我试图更改值,则脚本将无法工作;如果我更改并尝试重新编译它,仍将无法工作:“luac:Testing09.lua:预编译块中的意外结尾”...

有任何想法吗?我以前使用 ollydbg 对一个程序进行了类似的操作,但我无法在 lua 脚本中使用它...我有点迷失了,在进行了相当长时间的谷歌搜索后无法找到方法...有任何想法吗?

点赞
用户107090
用户107090

在 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-08 11:46:05