C++ 保护游戏免受内存扫描(如作弊引擎)

C++ 保护游戏免受内存扫描(如作弊引擎),c++,security,memory,C++,Security,Memory,我正在制作一个C++11游戏,将分数发送到服务器。我将分数存储为一个简单的浮点数,因此使用类似这样的软件的人可以在将分数发送到服务器之前轻松更改分数的值 如何保护我的游戏免受此类攻击?您可以做很多选择,但最好不要接受客户的任何重要价值观。让服务器完成所有计算,然后将值发送给客户端。如果必须首先在客户端执行任何操作,请加密您关心的任何数据(或所有数据,如果可能) 有可能让服务器计算任何重要的内容会更好。例如,在《使命召唤》中,您希望服务器决定谁被枪杀,这样就不会涉及到单个玩家的计算机/延迟等 如果

我正在制作一个C++11游戏,将分数发送到服务器。我将分数存储为一个简单的浮点数,因此使用类似这样的软件的人可以在将分数发送到服务器之前轻松更改分数的值


如何保护我的游戏免受此类攻击?

您可以做很多选择,但最好不要接受客户的任何重要价值观。让服务器完成所有计算,然后将值发送给客户端。

如果必须首先在客户端执行任何操作,请加密您关心的任何数据(或所有数据,如果可能)

有可能让服务器计算任何重要的内容会更好。例如,在《使命召唤》中,您希望服务器决定谁被枪杀,这样就不会涉及到单个玩家的计算机/延迟等


如果你正在做一个本地PC版游戏,并且只想在游戏结束时上传分数,那么服务器计算就不是一个选项。在这种情况下,您首先必须坚持加密和混淆重要值。你能做的只有这么多;如果它是100%客户端计算的,那么它可能永远不会是防弹的。

您真的无法确保该值不被篡改。您可以向服务器发送足够的信息,以确定“这可能吗”-例如,如果您的游戏是“吃豆人”风格的游戏,您还可以提供吃豆人吃的所有“斑点”,或每个关卡的数量以及完成每个关卡所需的时间,等等。作弊者可以复制所需的所有额外数据并非不可能,但如果你在网络上发送更多数据,这会使复制变得更加困难


但是,软件中任何时候可用的任何数据都可能被“调试器”类型的应用程序修改。你对此无能为力

如果是大型多人游戏,那么从理论上讲,你可以使用一些算法,让服务器向随机的用户群请求特定问题的答案。作弊者在没有重大串通的情况下会得到不同的答案


如果在像《使命召唤》这样的游戏中,你可能有30名玩家,如果发生杀戮,你需要获得超级多数的同意。这样,没有一个团队可以通过共谋的方式作弊。你仍然需要注意备用帐户被用来攀登领导层。

总会有办法绕过你的保护。不管它有多好。但是,您可以使其更难。有一个例子:

基本上,关键是创建两个具有相同值的变量,并将其中一个变量移动到RAM中的不同位置(简单地说),以使查找更困难。然后,比较不同值

这是该想法的简化代码

int VariableToProtect = 0;
int pVar[ 1000 ] = { 0 };
int Pos = 0; // 'pseudo-position' of the element (with same value as VariableToProtect) in pVar

while( !GetAsyncKeyState( VK_SPACE ) )
{
    if( pVar[ Pos ] != VariableToProtect )
        printf( "detected!" );

    ++VariableToProtect;

    Pos = rand( ) % 1000;
    pVar[ Pos ] = VariableToProtect;

    Sleep( 10 );
}

你不能。您需要验证发送到服务器端的数据。同时发送一个salted hash…我希望您可以在客户端没有加密密钥的情况下执行此操作?;)一个老练的用户可以提取加密密钥并使用它加密他们希望发送到服务器的任何分数。这并不总是一个选项。@supertonsky怎么会这样?我想不出有哪款游戏不这么做。有些游戏是在客户端进行计算的,但无论我使用作弊引擎对游戏做什么,我都不能简单地破解游戏。由于某种原因,我无法访问内存。这就是问题所在。不管那是什么,它是辉煌的。有些游戏可以访问内存,但一旦获得地址,“变量”似乎会不断更改内存地址,这实际上会使作弊引擎等应用程序变得无用。问题不是读取/编辑内存,而是将错误信息发送到服务器。没有什么能阻止我向服务器发送消息,说我刚刚赚了一百万硬币。如果这些信息没有在服务器端处理,那么它就别无选择,只能信任我并编辑数据库。你有一个观点,但是对于为手机开发的动作游戏来说,如果所有计算都在服务器上完成,互联网连接的轻微不稳定肯定会破坏游戏体验。为了改进你的答案,如果您可以直接在答案正文中添加一些最小的附加信息,那就太好了,因为链接可能会过时。例如,只需用几句话解释什么是
反wpm
,以及它是如何工作的,非常棒@uzivanky!现在这实际上是一个更好的答案!我相信每个人都会感激你的努力。