Lua - 如何欺骗GetFenv函数而不改变它?
2018-10-11 14:24:52
收藏:0
阅读:129
评论:1
我有一些代码想要找出其中的漏洞,我已经编写了代码,如果您能帮我找到它,我将不胜感激。
我唯一的关注点是getfenv可能可以在某种程度上欺骗。
coroutine.wrap(function()
while wait() do
for i, v in func_table.pairs(func_table) do
if func_table.getfenv()[i] ~= v then
return ban_func(10, 23)
end
end
end
end)()
需要明确的是,ban_func位于func_table内部,这将自动检测数据的变化并相应地禁止它。我认为他们,即掠夺者/作弊者,改变任何内容的唯一途径就是欺骗getfenv。
如果您能向我解释一下如何欺骗这样一个函数和/或如何修补这个函数上的欺骗,而不改变它自己的任何数据,我将非常高兴!
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 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二进制本身也可以在内部更改,并且getfenv可以更改以执行除其本身以外的任何操作。在服务器和客户端逻辑之间实施强大的边界是确保应用程序安全的唯一真正方法。
在这种情况下可能发生的一种攻击是,如果客户端在设置好func_table之前在同一个lua_State中运行Lua代码。在这种情况下,他们可以像我在这里找到的那样对您进行沙箱处理。
另一种攻击是利用元方法使
func_table.getfenv() [i]!= v返回true。这可以通过使用rawequal,检查func_table.getfenv() [i]的类型,或使用原始函数作为键来检查一个包含真值的表中的键func_table.getfenv() [i]是否为真来检测。另一种攻击是编辑全局状态和您的表。通常在更改函数的地址时,会更改内存中该地址的所有引用,其中包括您的表内部的引用。
由于您正在使用
wait(),我假设您正在Roblox中运行此代码。在这种情况下,正如我在他们的开发者论坛上强调的那样,experimental mode(以前是filtering enabled)设置是保护游戏免受攻击者威胁的唯一方法。这可以大多数时候防止客户端编辑游戏。他们仍然可以完全控制自己的角色位置、一些其他实例类型(如帽子),可以通过RemoteEvent和RemoteFunction实例请求服务器进行更改,并且可以进行透视墙(设置墙透明度)(为了对抗这种情况,只向客户端发送它可以看到的部分)。