如今有许多更改内存的程序(Cheat Engine&co)。有没有办法保持恒定的可变的有效方式实际上不变?
我有两个想法:
- 制作一个单独的线程,将常数变量更新为常数值,例如每分钟200。问题:一个值也可以更改第二个值。
- 将值存储在服务器上。问题:我想保持网络流量尽可能低。
对于只允许包含一定范围值的常量和变量,我都需要这种机制。
有更好的方法可以做到这一点吗?
如今有许多更改内存的程序(Cheat Engine&co)。有没有办法保持恒定的可变的有效方式实际上不变?
我有两个想法:
对于只允许包含一定范围值的常量和变量,我都需要这种机制。
有更好的方法可以做到这一点吗?
Answers:
无法做到这一点,https://security.stackexchange.com/a/4639与DRM有关,但同样适用于用户在计算机上不需要的任何内容,包括反作弊机制。(有比DRM更难做的趋势。)
但是,为什么要您,真的为什么要您?这是您的客户计算机,而不是您的计算机,客户愿意用它来处理计算机。您对此没有任何权利。如果客户不喜欢您的程序,则将其删除。
对于多人游戏,不是设计运行二进制文件,而是设计通信。让用户仅发送“我赢了20000点”是行不通的,也不是“我有2000金币”。您需要自己模拟游戏,只是让玩家发送他们正在做的事情,例如“我命令士兵移动到X / Y点”或“我已经购买了商品编号43”,而不是结果行动是。服务器决定结果是什么,以及最终谁赢。
如果是单人游戏,在线得分较高,则可以选择让玩家向您发送重播内容,对其进行模拟并从中确定结果。
首先是无效的,并且不会阻止任何有决心的人攻击您的游戏-而且它也容易出错。但是,如果您愿意,可以使其更加困难,而不是充分的证明。网上有一些通用的策略,但正如其他人提到的那样-您必须问自己是否值得。
出于争论的考虑,以下是防止在单个播放器环境中被黑客入侵的几种方法:
当然,另一种选择是将所有内容存储在服务器上,并使游戏服务器成为主机。这不仅很昂贵,需要维护,而且增加了开发时间...粉丝对像《暗黑破坏神III》这样的流行游戏的印象并没有那么深刻。还是这里 我应该注意,对于像Adventure Quest这样的在线Flash RPG,该模型实际上对他们来说运作良好。
由于这种方法非常广泛,需要大量计划,因此我无法为如何实施这种方法提供太多指导。要知道的基础是服务器决定一切,而客户端只不过是一个输入和显示控制台。
许多人使用这些程序来搜索存储在变量中的分数,例如
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我不是专家,所以请对我轻松一点。
对于单人游戏,您无法避免作弊,也不应这样做。
为什么我不能在自己的游戏中作弊?
正如其他答案所指出的那样,即使是最大的努力也可能会被单个黑客绕开,并提供给您的其他玩家群体。你仍然可以努力反对这个,但是看其他的答案了建议如何。如果您的游戏仅旨在提供单人游戏,则此答案意味着可以节省您的麻烦。
为什么要让玩家在单人游戏中作弊?
引用山姆,
花更多的时间来创建一个出色的游戏,而花更少的时间来防止白痴破坏自己的乐趣-简单。
这完全错了重点。游戏是一种娱乐方式。通常,您的玩家群是在玩游戏以获得乐趣。如果玩家在您的游戏中使用作弊功能,则有理由说他们在使用作弊功能。可以肯定地说,我们不能保证每个玩家对娱乐的定义;如果他们使用作弊,也许这就是他们使您的游戏更有趣的方式。
作弊如何使游戏更有趣?
尽管每个人都是独一无二的,但在一些情况下,作弊可以使游戏变得更有趣,这超出了我的脑海:
为什么这仅适用于单人游戏?
需要强调的是,这仅适用于单人游戏。如果玩家告诉您他们想使用作弊游戏来获得更多乐趣,则不会造成任何伤害。一旦游戏中有多个玩家,该第一玩家的漏洞利用就可能成为其他玩家的不公平劣势。这是唯一真实的情况下,你不应该允许欺骗。
内存破解工具有什么作用?
有两种操作黑客工具的方法。
你能为这个做什么?
您可以使用动态分配的变量来存储播放器变量,以便在启动时地址不断变化。作弊网站不会列出任何固定地址。
加密播放器变量:缩放值,添加常量等。这带来了一个新问题:铁杆黑客可以反汇编您的程序,并找到用于加密播放器变量的数字。为此,请使用随机数。您还可以按比例放大玩家变量的值,然后添加一个随机数,以使所添加的数字不会显着改变值(将按比例放大的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函数。前端程序员不必担心底层的复杂性。
保护游戏免受修改和内存编辑的唯一方法是使其仅联机并在服务器端处理重要价值。
也许您可以对这些值进行加密,以使新手记忆中的内容不会得到它们,但是所有社区,例如Cheat Engine,GameGuarian适用于Android的,ArtMoney和Game Hacker等人,都将能够破解您处理的所有内容,并向其他人展示如何做到这一点或发布培训师。
在我看来,这是徒劳的尝试,以阻止作弊方。同样不是很公平,因为这是他们的设备,并且如果他们想存储发生在他们设备上的编辑内容,您为什么要阻止他们?毕竟,客户为王。
我的意思不是那么难。您可以保留99%的内存编辑作弊者(那些Game Guardian,Cheat Engine通过简单的相乘值。即使在内存中乘以10也可以使大部分at处于等待状态。
我记得当时很多Flash游戏会乘以8或6。或者,如果您真的很认真,可以编写一些检查代码或对内存中的值进行加密。
加密地狱!将重要数字存储在多个位置,并与其他值一起存储,以便它们不断更改!使用伪数字,如果更改则告诉他们他们是骗子。
一切都可以破解,但大多数都不会花时间去破解。
我在网络游戏中的处理方式是这样的。
我不会对黑客有太大帮助,所以请耐心等待。我不会提及用于执行此操作的任何程序。您将不得不弄清楚。真正阻止他们的唯一方法就是知道一件事。他们不希望自己的黑客程序被检测到。
到目前为止,我击败的所有黑客/培训师用户。骇客的开发人员将在其上放置一个检测器,以查看是否有东西在监视。如果有的话,那么黑客/培训者程序将在其末端自动关闭,或者只能完成一半的工作。
例如,在泥土3中,培训师用户可以使您的汽车自动旋转。但是,如果您将检测器放在末端,作弊者自己的检测器将对其进行检测,并且它将关闭部分作弊者。并非全部。
我看到的培训师计划中,唯一受干预影响的部分是超级刹车(完美刹车)和衍生品(无故失去控制)。如您所见,我主要从事赛车游戏。它们都是来自代码管理员的,可悲的是那些游戏确实经常被作弊者滥用。
我相信我只能阻止他们,因为我们在玩耍时会彼此连接。他们可能会导致对安全性一无所知的普通玩家分拆,这可能是同一原因。
我最大的建议是获取一个很好的Internet安全防病毒软件(Norton,Mcafee,Avast,以及所有其他糟糕的AV都无法帮助您)。愿意花50到90美元购买一个我没有列出的非常好的AV,然后学习如何进行实验以实现在线播放。
这需要很多耐心和很多豚鼠。我在此方面取得了很多成功,但在与培训师用户打交道方面也有很多年的经验。我什么都不知道。它与它无关。代码部分已被锁定,您对此无能为力。您可能以为可以,但是根本无法停止他们正在做的事情。
您仍然可以使用VAC之类的文件来禁止它们,因为Vac可以检测到签名以及某些已知的行为和对文件的修改。它仅禁止与作弊关联的帐户。
他们实际上并没有阻止作弊。他们不能被它打扰。他们只是禁止您的帐户。我想提到的另一件事与Wolfenstein ET有关。一个非常老的游戏。但是对我来说,它是所有安全措施中最好和最严厉的。
我从来没有看到他们是如何做到的。我确实给了他们关于实际上可以阻止作弊者的想法,并建议其中一名jaymod的开发者通过guid来取缔。玩游戏时有什么容易理解的指南?图形卡。他们实施该程序的原因是,人们只需要更改IP地址,而您不需要游戏帐户,就可以更改名称,您的Mac地址,这也将更改您的IP地址。
但是,当他们这样做时,显卡禁令。如果您想再次玩游戏,则必须RMA或购买一张新卡。不过,这是没有问题的。这本应该是关于检测的,所以我切线了。遗憾的是,我现在玩游戏的程度不高。但是我爱我所有的古纳猪。特别是那些来自项目汽车的。唯一不是Codemasters的赛车游戏。但是仍然受到同样的胡说八道。