1

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

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

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

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

  • 修改渲染器或着色器以使墙不可见(wallhack)
  • 修改相机的位置,这只是在一个变量中
  • 注入将为我输入的代码(aimbot)

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

也许有一个专门从事这项任务的混淆器(即使这意味着失去性能)?

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

非常感谢

4

1 回答 1

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/

希望这可以帮助!

于 2020-02-22T20:27:51.087 回答