如何在重新定义后恢复/调用原始函数?
2019-5-20 6:13:25
收藏:0
阅读:215
评论:1
我正在使用LuaJIT 2.1,当需要隐藏源代码时,我首先对其进行混淆以防止脚本被反编译,然后编译。
我们知道可以通过重新定义函数来钩取LUA中的任何函数:
local __load = load
load = function(data, ...)
-- 一些代码,例如,您可以将data变量解包到一个文件中
return __load(data, ...)
end
如果有人使用他们的脚本加入我的脚本(例如以上示例),他们可以钩取我的脚本中的任何内置和全局函数,以及访问我自己定义的全局变量和函数(这就是为什么我总是定义所有函数和变量为本地变量的原因)。
因此,问题是我如何调用他们的原始函数,或者至少将它们恢复为原始块。如果这个可能的话。
以下是无法帮助您的可能答案:
_ G ['function_name']包含新函数的地址。- 使用pall(string.dump,function_name)检查函数是一件好事,但也可以钩取。
如果您无法理解我所说的某些内容:
- 通过“加入脚本”,我指的是使用“load”或“loadstring”将它们彼此组合,之后这些脚本可以相互访问。
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

Lua 的沙盒机制是基于一个假设的:一个编译过的块是_你的_编译过的块。如果有人能够钩入 Lua 脚本的加载过程并在编译器看到它们之前附加任意内容,那么你就无法将它们隔离起来。这是安全过程中的失败点,所以你必须防范它。这需要超出 Lua 本身范围之外的工具。
然而,需要注意的是,如果你加载的是一个已经编译过的块,一个用户(只限于常规的 Lua 脚本)无法在该块的末尾添加内容。至少,在常规的 Lua 5.1 中是如此;LuaJIT 的加载器可能会有所不同。不过,如果他们交换了
load函数,那么他们也可以编辑字节码本身,所以如果他们做到了这一点,你仍然没办法。关于 Lua 沙盒机制的事情是,它无法在脚本内部完成。无论脚本所处的环境(全局变量等)如何,它都受到该加载和执行脚本的代码所管理。如果它没有明确地隔离一个脚本所做的全局更改和另一个脚本,那么你的脚本就无法做到这一点。