如何防止记忆修改作弊?


10

如今有许多更改内存的程序(Cheat Engine&co)。有没有办法保持恒定的可变的有效方式实际上不变?

我有两个想法:

  1. 制作一个单独的线程,将常数变量更新为常数值,例如每分钟200。问题:一个值也可以更改第二个值。
  2. 将值存储在服务器上。问题:我想保持网络流量尽可能低。

对于只允许包含一定范围值的常量和变量,我都需要这种机制。

有更好的方法可以做到这一点吗?


1
这些都不起作用。在第一种情况下,作弊者只需要覆盖要复制的值“ 200”即可,而覆盖原始对象并不难。在情况2中,作弊者现在只需更改网络上接收到的字节(例如,使用本地代理),就可以在不更改程序的情况下更改该值
Jimmy

6
我还没有看到黑客无法禁用的作弊保护。只要确保您不会让游戏成为合法用户的噩梦,请与骗子们一

1
相关 ; 更具体,但其他方面相同。
Anko

1
大多数游戏都有“培训师”。我的意思是,地狱,甚至是Mass Effect:仙女座(Andromeda)都有一名教练,而且只出去了一个多星期。我说甚至不用担心。如果大型游戏公司无法避免这种情况,那么什么使您认为自己有机会呢?
Krythic

Answers:


21

如果您的游戏是单人游戏:不可能,但您不必在意

如果您的游戏是多人游戏:那么您应该将所有重要状态存储在服务器上,这比本地计算机更难破解。


4
通过制作权威服务器并仅在客户端预测状态,很容易防止多人作弊。基本上,仅将玩家输入从客户端发送到服务器,而不是“我确实x损坏了y”。
jmegaffin

确实@BorealGames,这就是我“将所有重要状态存储在服务器上”的意思。
jcora

只是想澄清一下:)
jmegaffin

11

无法做到这一点https://security.stackexchange.com/a/4639与DRM有关,但同样适用于用户在计算机上不需要的任何内容,包括反作弊机制。(有比DRM更难做的趋势。)

但是,为什么要您,真的为什么要您?这是您的客户计算机,而不是您的计算机,客户愿意用它来处理计算机。您对此没有任何权利。如果客户不喜欢您的程序,则将其删除。

对于多人游戏,不是设计运行二进制文件,而是设计通信。让用户仅发送“我赢了20000点”是行不通的,也不是“我有2000金币”。您需要自己模拟游戏,只是让玩家发送他们正在做的事情,例如“我命令士兵移动到X / Y点”“我已经购买了商品编号43”,而不是结果行动是。服务器决定结果是什么,以及最终谁赢。

如果是单人游戏,在线得分较高,则可以选择让玩家向您发送重播内容,对其进行模拟并从中确定结果。


11
小修正建议:客户不应发送“我购买了商品编号43”,而是发送了“我想购买商品编号43”。然后,服务器应回答“确定,您损失了200 GP,您获得了一个Item43”,“否,您没有足够的黄金”或“否,您当前正在浏览的商店没有项目编号43”。服务器的行为应类似于笔和纸RPG的游戏大师。玩家说出他们想做什么,然后服务器告诉他们是否成功。
菲利普

另外我不知道对改变个人计算机的使用内存,但改变游戏本身的二进制文件(即使它在您的计算机上)通常是针对最终用户许可协议,并可能在copyrighting法律等需要进一步明确
lozzajp

但这并不是违反EULA,即相当于乱穿马路的数字,因此没有阻止任何人。
jkmartindale

3

首先是无效的,并且不会阻止任何有决心的人攻击您的游戏-而且它也容易出错。但是,如果您愿意,可以使其更加困难,而不是充分的证明。网上有一些通用的策略,但正如其他人提到的那样-您必须问自己是否值得。

出于争论的考虑,以下是防止在单个播放器环境中被黑客入侵的几种方法:

  1. 打开用户计算机上所有其他进程(侵入性的和非便携式的)的句柄,并用伪函数或警告覆盖其WriteProcessMemory。这是你的选择。这是可以克服的,因为... 应用程序可以自由地执行相同操作,并再次覆盖句柄或执行某些操作来防止这种情况。
  2. 对您的应用程序进行校验和检查,并使其通过黑客盾进行验证-这对您的应用程序进行许多永久性编辑很有用,但不会阻止常见的内存攻击。这可以被击败,因为... ADA,OllyDbg之类的工具甚至简单的十六进制编辑都可以对您的应用程序进行永久性补丁和更改,以删除有问题的代码-这包括您的线程计时器概念!
  3. 扫描已知的黑客工具。这也可以通过重新编译工具或直接攻击客户端来克服。这可以被击败,因为... 重新编译,重命名应用程序或更改扫描仪作为试探法的用途将使此方法无用。如果选择这样做,请考虑使用内存的特殊部分,该应用程序已知会使用。

当然,另一种选择是将所有内容存储在服务器上,并使游戏服务器成为主机。这不仅很昂贵,需要维护,而且增加了开发时间...粉丝对像《暗黑破坏神III》这样的流行游戏的印象并没有那么深刻。还是这里 我应该注意,对于像Adventure Quest这样的在线Flash RPG,该模型实际上对他们来说运作良好。

由于这种方法非常广泛,需要大量计划,因此我无法为如何实施这种方法提供太多指导。要知道的基础是服务器决定一切,而客户端只不过是一个输入和显示控制台。


3

许多人使用这些程序来搜索存储在变量中的分数,例如

int score = 10;

为此,他们通常需要从游戏中显示的分数中了解分数。

我当时在想,这会帮助他们推迟...

public static float randomVal; // at start of level generate random float

private float 1a3sf5vhh4; //represents score

void hjgkkj4(int val) //add score method
{
   var 5vhh4 =  1a3sf5vhh4/randomVal+val;
   1a3sf5vhh4 =  5vhh4*randomVal;
}

然后当您需要显示分数时...

string displayScore = ""+ 1a3sf5vhh4/randomVal;

这将使作弊者搜索他们认为的分数(正在显示的分数),因此他们只会找到显示的值。

实际分数将为Score * randomVal,存储在其他位置。他们无法通过更改显示的值来更改分数。

这会有所帮助吗?

ps我不是专家,所以请对我轻松一点。


刚刚找到这个vid,提出了一些有趣的观点... youtube.com/watch?v=G25YhoE04Xc
Raimi 2014年

欺诈工具也可以配置为检测这些东西。这只会花费更多时间进行跟踪。
2014年

但是对于小型,离线,单人游戏,这样的解决方案是否可以解决?看起来它至少可以停止一些应用程序
Raimi 2014年

是的,这只是EffortSpent vs ProtectionAchieved的案例,其中第二部分永远无法达到100%。
Kromster 2014年

1
至少在大多数情况下,源代码中的随机名称也无济于事。该程序通常被编译成IL /字节码或直到二进制等等
lozzajp

2

对于单人游戏,您无法避免作弊,也不应这样做


为什么我不能在自己的游戏中作弊?

正如其他答案所指出的那样,即使是最大的努力也可能会被单个黑客绕开,并提供给您的其他玩家群体。你仍然可以努力反对这个,但是看其他的答案了建议如何。如果您的游戏仅旨在提供单人游戏,则此答案意味着可以节省您的麻烦。

为什么要让玩家在单人游戏中作弊?

引用山姆

花更多的时间来创建一个出色的游戏,而花更少的时间来防止白痴破坏自己的乐趣-简单。

完全错了重点。游戏是一种娱乐方式。通常,您的玩家群是在玩游戏以获得乐趣。如果玩家在您的游戏中使用作弊功能,则有理由说他们在使用作弊功能。可以肯定地说,我们不能保证每个玩家对娱乐的定义;如果他们使用作弊,也许这就是他们使您的游戏更有趣的方式。

作弊如何使游戏更有趣?

尽管每个人都是独一无二的,但在一些情况下,作弊可以使游戏变得更有趣,这超出了我的脑海:

  • 游戏有点慢,玩家希望在作弊之前完全利用作弊技巧来完成动作。
  • 玩家无法克服特定挑战;他们通常不会作弊,但是他们几乎沮丧地放弃了。他们可以停止玩您的游戏,或者可以使用作弊技巧绕过障碍,然后继续玩游戏的下半场。
  • 玩家无法将游戏所需的时间用于预期的体验。通过作弊,用户可以获得“跑步开始”,并能够享受游戏的预期内容。如果您认为这听起来不合理,请考虑这就是我个人很少玩《辐射4(Fallout 4)》的原因。相比之下,这是我在过去5年中预定的唯一一款游戏,也是我曾经预定的唯一一款游戏,购买了多个平台。我喜欢游戏;我没有时间。
  • 您的游戏存在bug,这会阻止玩家继续前进。作弊会绕过漏洞,因此玩家可以继续玩。最近的《上古卷轴》游戏因这种情况而臭名昭著

为什么这仅适用于单人游戏?

需要强调的是,这仅适用于单人游戏。如果玩家告诉您他们想使用作弊游戏来获得更多乐趣,则不会造成任何伤害。一旦游戏中有多个玩家,该第一玩家的漏洞利用就可能成为其他玩家的不公平劣势。这是唯一真实的情况下,你不应该允许欺骗。


0

内存破解工具有什么作用?

有两种操作黑客工具的方法。

  1. 它要么接受存储玩家变量的已知地址。
  2. 您在变量中输入更改,它会扫描内存以查找更改。

你能为这个做什么?

  1. 您可以使用动态分配的变量来存储播放器变量,以便在启动时地址不断变化。作弊网站不会列出任何固定地址。

  2. 加密播放器变量:缩放值,添加常量等。这带来了一个新问题:铁杆黑客可以反汇编您的程序,并找到用于加密播放器变量的数字。为此,请使用随机数。您还可以按比例放大玩家变量的值,然后添加一个随机数,以使所添加的数字不会显着改变值(将按比例放大的2000值加10或20不会有太大的区别)。

当然,一些认真的黑客仍然可以找到克服这些障碍的方法,但这并不容易。

  std::default_random_engine myRNG;
  std::uniform_int_distribution<int> myDist_padding(10,100);
  class Player
  {
      public:
          Player()
          {
              Health = new float;
              Armor = new float;

              std::uniform_int_distribution<int> myDist_scale(1000,10000);
              scale = myDist_scale(myRNG);
          }
          float GetPlayerHealth() const;
          void SetPlayerHealth(float health);
      private:
          float *Health;
          float *Armor;
          int scale, constant;
  }

  //wrappers for Set/GetPlayerHealth
  void Player::SetPlayerHealth(float health)
  { 
      this->Health = health * scale + constant + myDist_padding(myRNG);     //random padding; adding 10 or 100 to a number that is scaled up by 1000 will cause an increase in 1%
      //1% of error is ok I guess?
  }
  int Player::GetPlayerHealth() const
  {
      return (this->Health - constant)/scale;
  }

尽管上面的代码解决了一些严重的问题,但它仍然是可破解的。黑客唯一需要的信息是:玩家变量是通过指针访问的(他也可以通过拆解游戏来查找变量,但这会很烦人且很困难)。一旦黑客拥有了您的玩家变量以及其他秘密随机变量的地址,对他来说,作弊就将是一件容易的事。

我认为,如果不进行分解,就无法真正为这种系统编写黑客工具。结果是不可预测的,因为您每次修改播放器变量时都会向其添加一个随机数。每次启动时,播放器变量的存储范围也不相同。

你还能做什么?

保持偶尔更改播放器变量的地址。它会妨碍代码的可读性吗?好的,它在某种程度上确实可以做到,但是您可以将整个过程抽象为一个具有明确解释的注释的类。该类提供的接口将具有简单的Set / Get函数。前端程序员不必担心底层的复杂性。


0

经济学:

如果您想与作弊者打交道,最好的方法是购买可以为您做的软件解决方案。有几个提供商,您可以通过搜索“反作弊打破我的游戏”来找到很多提供商。

专业人士比您在防止作弊方面的能力要强得多,在不破坏游戏方面也比您要好得多(在这两种情况下,成功率都不是100%)。因此,如果您认为将这样的解决方案应用于您的游戏中是有价值的,请购买它。自己做会贵很多。

一个相关的问题是“使用反作弊软件是否有价值?”。答案是:除非您的游戏中相当一部分依赖在线竞争模式,否则不会。


0

保护游戏免受修改和内存编辑的唯一方法是使其仅联机并在服务器端处理重要价值

也许您可以对这些值进行加密,以使新手记忆中的内容不会得到它们,但是所有社区,例如Cheat EngineGameGuarian适用于Android的,ArtMoney和Game Hacker等人,都将能够破解您处理的所有内容,并向其他人展示如何做到这一点或发布培训师。

在我看来,这是徒劳的尝试,以阻止作弊方。同样不是很公平,因为这是他们的设备,并且如果他们想存储发生在他们设备上的编辑内容,您为什么要阻止他们?毕竟,客户为王。


0

我的意思不是那么难。您可以保留99%的内存编辑作弊者(那些Game GuardianCheat Engine通过简单的相乘值。即使在内存中乘以10也可以使大部分at处于等待状态。

我记得当时很多Flash游戏会乘以8或6。或者,如果您真的很认真,可以编写一些检查代码或对内存中的值进行加密。


-2

你不能-我重复你不能。对于这个问题,没有任何答案是好的黑客无法解决的。

但是-那又如何呢?如果有人想在您的游戏中作弊(假设不涉及金钱损失或成就),谁在乎?他们只会欺骗自己。

花更多的时间来创建一个出色的游戏,而花更少的时间来防止白痴破坏自己的乐趣-简单。


我认为乐趣在这个答案中起着重要的作用,因此投下了反对票,但被完全错过。除了提供进一步的解释,我将提交替代答案。
Gnemlock

-3

加密地狱!将重要数字存储在多个位置,并与其他值一起存储,以便它们不断更改!使用伪数字,如果更改则告诉他们他们是骗子。

一切都可以破解,但大多数都不会花时间去破解。


4
...然后您的源代码将变得不可读,无法维护。祝您好运,找到一个错误或做出一个平衡的改变而不用炸毁整个事物。
菲利普

如果我必须实施这种形式的防欺诈措施,那么如果黑客追上我的邪恶计划并放弃,我将感到非常失望。那将意味着我只浪费了我自己的时间。
Marcks Thomas

@MarcksThomas好吧,如果黑客放弃了,那么您就不会浪费时间。毕竟那是目标,不是吗?
Dan

我对@Philipp并不完全同意-有多种方法可以使源代码保持清晰,但是在离开时对生产代码进行加扰。在实践中涉及加密以及一些数字,尤其是定时和线程处理。我们使用未经修改的源代码进行测试,如果生产代码中有错误,我们将其残酷地崩溃(稍有延迟,就是邪恶:-)。某个地方的小变化也会导致这种情况。
暴风城

我认为这是该链中最好的答案,但我似乎已经做到了。有许多数学规则要使用,仅由于复杂性以及最重要的时机,就不可能进行反向工程。例如,可以将应用程序标记为延迟崩溃,或者让应用程序的敏感性变为无用(不可播放)状态。当然,您一定是一个很好的理由。
暴风城

-4

我在网络游戏中的处理方式是这样的。

我不会对黑客有太大帮助,所以请耐心等待。我不会提及用于执行此操作的任何程序。您将不得不弄清楚。真正阻止他们的唯一方法就是知道一件事。他们不希望自己的黑客程序被检测到。

到目前为止,我击败的所有黑客/培训师用户。骇客的开发人员将在其上放置一个检测器,以查看是否有东西在监视。如果有的话,那么黑客/培训者程序将在其末端自动关闭,或者只能完成一半的工作。

例如,在泥土3中,培训师用户可以使您的汽车自动旋转。但是,如果您将检测器放在末端,作弊者自己的检测器将对其进行检测,并且它将关闭部分作弊者。并非全部。

我看到的培训师计划中,唯一受干预影响的部分是超级刹车(完美刹车)和衍生品(无故失去控制)。如您所见,我主要从事赛车游戏。它们都是来自代码管理员的,可悲的是那些游戏确实经常被作弊者滥用。

我相信我只能阻止他们,因为我们在玩耍时会彼此连接。他们可能会导致对安全性一无所知的普通玩家分拆,这可能是同一原因。

我最大的建议是获取一个很好的Internet安全防病毒软件(Norton,Mcafee,Avast,以及所有其他糟糕的AV都无法帮助您)。愿意花50到90美元购买一个我没有列出的非常好的AV,然后学习如何进行实验以实现在线播放。

这需要很多耐心和很多豚鼠。我在此方面取得了很多成功,但在与培训师用户打交道方面也有很多年的经验。我什么都不知道。它与它无关。代码部分已被锁定,您对此无能为力。您可能以为可以,但是根本无法停止他们正在做的事情。

您仍然可以使用VAC之类的文件来禁止它们,因为Vac可以检测到签名以及某些已知的行为和对文件的修改。它仅禁止与作弊关联的帐户。

他们实际上并没有阻止作弊。他们不能被它打扰。他们只是禁止您的帐户。我想提到的另一件事与Wolfenstein ET有关。一个非常老的游戏。但是对我来说,它是所有安全措施中最好和最严厉的。

我从来没有看到他们是如何做到的。我确实给了他们关于实际上可以阻止作弊者的想法,并建议其中一名jaymod的开发者通过guid来取缔。玩游戏时有什么容易理解的指南?图形卡。他们实施该程序的原因是,人们只需要更改IP地址,而您不需要游戏帐户,就可以更改名称,您的Mac地址,这也将更改您的IP地址。

但是,当他们这样做时,显卡禁令。如果您想再次玩游戏,则必须RMA或购买一张新卡。不过,这是没有问题的。这本应该是关于检测的,所以我切线了。遗憾的是,我现在玩游戏的程度不高。但是我爱我所有的古纳猪。特别是那些来自项目汽车的。唯一不是Codemasters的赛车游戏。但是仍然受到同样的胡说八道。


我看到这个答案有几个问题。1.格式。由于结构而难以阅读,并且由于语法上的不一致,有些地方我无法理解您的意思。2.当您与其他作弊者对抗时,您似乎在谈论这个话题。这在Arqade很重要,但是我们更关心游戏开发。3.关于反病毒,您说“不要使用我提到的那些”。您提到“ Norton,mcafe,avast 和所有卑鄙的人。这并没有告诉我们使用什么,尤其是当您列出一些排名最高的时候
。– Gnemlock

整个后半部分似乎都是关于您如何看待视频游戏公司的建议的轶事(我相信您会尽力说不确定如何做到,因此我认为您必须进一步说明如何做到这一点基于推测,而非事实)。
Gnemlock
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.