我正在制作一个C++11游戏,分数会被发送到服务器。我将分数存储为一个简单的浮点数,这样使用Cheat Engine等软件的人就可以在将分数发送到服务器之前轻松地更改分数的值。
我如何保护我的游戏免受这种攻击?
发布于 2013-03-14 23:08:36
您可以选择许多选项,但最好不要接受来自客户端的任何重要值。让服务器执行所有计算,然后将值发送到客户端。
发布于 2013-03-14 23:10:51
如果您必须首先在客户端执行任何操作,请加密您关心的任何数据(如果可能,则加密所有数据)。
让服务器计算任何重要的东西可能会更好。例如,在Call of Duty中,你希望服务器决定谁被射杀,这样单个玩家的计算机/延迟等就不会涉及到。
如果您正在进行本地PC游戏,并且只想在游戏结束时上传分数,则服务器计算不是一个选项。在这种情况下,您必须首先坚持加密和混淆重要的值。你能做的只有这么多;如果它是100%客户端计算的,那么它可能永远不会是万无一失的。
发布于 2013-03-14 23:11:54
实际上,您无法确保该值不会被篡改。你可以做的就是向服务器发送足够的信息,让它可以确定“这是可能的”--例如,如果你的游戏是“吃豆人”风格的游戏,你也可以提供Pac-Man吃的所有“斑点”,或者每一关的数量和完成每一关所需的时间,等等。作弊的人可以复制所有需要的额外数据并不是不可能的,但是如果你发送更多的数据,这就会变得更加困难。
但是您的软件中随时可用的任何数据都可能被“调试器”类型的应用程序修改。你对此无能为力。
https://stackoverflow.com/questions/15412796
复制相似问题