【问题标题】:How can you implement an anti-cheat in a JS game?如何在 JS 游戏中实现反作弊?
【发布时间】:2018-12-21 05:42:49
【问题描述】:

我打算制作一个基于网络的游戏(使用 three.js 和 socket.io),我主要关心的一个问题是防止作弊。

我知道制作安全游戏的基础知识,即:

  • 永远不要相信客户端,客户端仅用于渲染和输入捕获
  • 将您的游戏逻辑放在服务器端
  • 最好的反作弊是人类

知道,我不知道如何保护的漏洞正是那些与客户端有关且服务器无法检查的漏洞。例如,作为攻击者,我可以:

  • 修改渲染器或着色器以使墙壁不可见(wallhack)
  • 修改摄像头的位置,即在变量中
  • 注入将为我输入的代码 (aimbot)

在经典游戏(可执行文件)中,存在可以检测非法操作的程序。通常,反作弊程序会检查程序集并检查是否没有注入 dll。

也许有专门用于此任务的混淆器(即使这意味着性能下降)?

我还没有完成所有的研究,但我希望你们中的一些人已经遇到过这个问题,并且可以通过定位我的研究来节省我很多时间。

非常感谢

【问题讨论】:

  • 这更像是一个一般性的讨论,而不是一个可以回答的问题。 (What topics can I ask about here? 题外话第 5 项)。您可能会在 Game Dev Stack Exchange 上找到更好的答案和有价值的对话。
  • 适当的标志只给了我 5 个其他 Stack 站点,并且不包括 Game Dev。在这里留下评论,以防版主需要更多关于为什么标志没有被正确分类的信息。
  • JS 不会编译为机器码,据我所知,不能进行内联汇编,所以最好的反作弊方法是将所有内容存储在服务器上。 JS 可以很容易地“被黑”。您可以在服务器上检查玩家角度是否不像在瞄准机器人上那样“机器人”,或者构建自己的 OverWatch 系统,例如 Valve :)

标签: security web three.js game-engine anti-cheat


【解决方案1】:

如果你想做一个“反作弊”引擎,你就必须这样做。你可以在客户端添加任何你想要的东西,以促进服务器端的工作,但你绝不能信任客户端。您拥有的所有逻辑必须至少是服务器端的。如果你愿意,你可以在客户端重现它,但没有客户端唯一的解决方案可以做到这一点。

在基础之后: 如果您不介意包装 HTTP,请使用 ExpressJS 看看 express-blacklist 和 express-defend 的这段代码:

var expressDefend = require('express-defend');
var blacklist = require('express-blacklist');
app.use(blacklist.blockRequests('blacklist.txt'));

app.use(expressDefend.protect({ 
    maxAttempts: 5, 
    dropSuspiciousRequest: true, 
    logFile: 'suspicious.log', 
    onMaxAttemptsReached: function(ipAddress, url){
    blacklist.addAddress(ipAddress);
} 
}));

由于它们没有在 socket.io 中注册,它们只会受到 Express 路由的影响

看看这个:https://github.com/hrt/AnticheatJS

这是一款您可能想研究的好软件:https://www.tuxbihan.org/software/top-05-anti-cheat-software-to-make-fair-for-gamers/

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2017-01-04
    • 2019-06-29
    • 1970-01-01
    • 2012-03-16
    • 2022-10-15
    • 1970-01-01
    • 2016-08-22
    • 2014-09-17
    • 2010-10-31
    相关资源
    最近更新 更多