Is it possible to change a value inside a Lua bytecode? How? Any idea?

use*_*670 4 lua bytecode recompile decompiler

I got a script that is no longer supported and I'm looking for a way to change the value of a variable in it... The script is encrypted (loadstring/bytecode/something like that) e.g.: loadstring('\27\76\117\97\81\0\1\4\4\4\8\0\')

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

有任何想法吗?我用一个程序做了类似的事情,使用ollydbg,但我不能用lua脚本...我有点迷失在这里,做一些谷歌搜索相当一段时间找不到方法......任何想法?

lhf*_*lhf 7

在Lua字节码中更改字符串很容易.您只需在更改后调整字符串的长度即可.长度在字符串之前.它可能需要在字符串之前的四个或八个字节,具体取决于您是否具有32位或64位平台.长度存储在生成字节码的机器的字节序中.请注意,字符串包含一个尾部'\ 0',这将计入长度.

也许直接复制一些字节更容易.写这个文件

return "this is the new string you want" 
Run Code Online (Sandbox Code Playgroud)

从中生成字节码luac并查看转储luac.out并找到字符串及其长度.将这些字节复制到原始文件.

我不知道记事本是否处理二进制数据.如果没有,你需要一个十六进制编辑器来做到这一点.

另一个解决方案是编写一个Lua程序,它将字节码作为字符串读取,生成字节码return "this is the new string you want",使用字符串操作执行原始字节码的更改并将其写回文件.

您还可以尝试我的字节码检查器库lbci,它允许您更改函数中的常量.您将加载字节码(但不执行它),并setconstant在找到包含您想要更改的字符串的常量后使用.

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