C++ 通过代码生成防止欺骗
这种反作弊技术是否适用于使用私有服务器(公开未知的可执行文件)的多人游戏: 当客户端启动游戏时,它将每天自动更新自己(使用启动器)。服务器也会自我更新。 除非有真正的补丁,否则更新只包括对gameobjects内存布局、网络代码和着色器的更改。 这是使用自动生成和随机(C++)类的自动化系统完成的。 也许它还可以在层次结构中添加假对象,以使识别对象更困难 通过这种方式,我希望更新游戏的速度比黑客更快,并将反向工程,更新和发布/更新一个新的作弊 这会起作用吗?或者黑客可以绕过这一机制吗? 他们会每天做这项工作,还是会在某个时候实现自动化? 我能做些什么来改进这个系统 从长远来看,随机化内存布局似乎没有帮助,因为通过在可执行文件中执行函数调用并从代码中提取指针偏移量,可以或多或少轻松地提取布局。 因此,为了有效地防止这种情况,调用的结构和代码本身也需要随机化C++ 通过代码生成防止欺骗,c++,multiplayer,anti-cheat,cheat-engine,C++,Multiplayer,Anti Cheat,Cheat Engine,这种反作弊技术是否适用于使用私有服务器(公开未知的可执行文件)的多人游戏: 当客户端启动游戏时,它将每天自动更新自己(使用启动器)。服务器也会自我更新。 除非有真正的补丁,否则更新只包括对gameobjects内存布局、网络代码和着色器的更改。 这是使用自动生成和随机(C++)类的自动化系统完成的。 也许它还可以在层次结构中添加假对象,以使识别对象更困难 通过这种方式,我希望更新游戏的速度比黑客更快,并将反向工程,更新和发布/更新一个新的作弊 这会起作用吗?或者黑客可以绕过这一机制吗? 他们会每
有什么好方法可以做到这一点吗?这对自动破解有效吗?客户端技术军备竞赛是完全错误的做法。你永远不会比一群有太多空闲时间的孩子做得更好或更快。你无法与一大群没有成本的攻击者竞争(除了不做作业),而你的行动却耗费了你的时间和金钱。这是一场你将输掉的比赛,无论是在经济上还是在最终结果上 人们可以通过两种方式作弊:
还记得那句老话吗:“客户掌握在敌人手中。”我不知道这样一个系统能否成功避免作弊,但我会担心如何创建和维护这样的系统。比如你说 这是通过使用自动生成和 随机化(C++)类。也许它还可以在地图上添加假对象 层次结构使标识对象更困难
- 你把一个班级随机化是什么意思?这绝非小事
- 假对象最终会被发现(死代码)
无论如何,我怀疑您是否能够在没有严重缺陷的情况下对代码的关键部分执行某种有效的模糊处理,例如性能下降或完全错误的计算(例如浮点演算)。如果您有两种不同的机制来计算相同的值,那么对于同一组输入,您最终将得到不同的结果。一切:只需完全确认@埃克雷夫:没错。我不觉得nvoigt不理解在线游戏中作弊的本质。您可以删除服务器上所有枯燥的部分,并将其保留在服务器上的所有内容旁边,但作弊仍然有其能力/目的。@ecreif我真的很想知道您如何相信您能够以一种不会导致自动攻击的方式将更改自动化。@ecreif我完全理解射击游戏中作弊的本质。但是,好的欺骗将附加到图形卡驱动程序并分析输出多边形,因此无论您在代码中做什么都是无用的。就我个人而言,我玩过的最好的在线射击游戏都受到了部族的严格监控。如果您的服务器可以安装,这样组就可以有自己的策略,那么一切都很好。因为随着时间的推移,如果您不手工操作,“随机”将变得“明显”。如果他破解了他的游戏,没有得到任何进一步的更新怎么办。游戏是否仍然有效,或者您是否正在检查它是否已更新?你在查什么?如果他伪造了,所以你认为已经更新了怎么办?如果你在玩一个游戏,然后你推出了一个更新-有一半的玩家被踢出局,必须进行更新,还是有一个特赦期,允许两组更改?想想这对一个玩家来说有多糟糕,如果没有任何原因(没有补丁)您强制更新并延迟玩家体验您的game@BeyelerStudios如果延迟几秒钟,你永远不会注意到;我玩过没有这种保护的游戏(据我所知),加载资产、为精确的驱动程序集编译着色器、操作系统等已经有大量延迟。任何更改都可能导致问题(性能问题和bug)。每个补丁都需要一个完整的QA周期。你有每天验证整个游戏的资源吗?@ecreif:如果更新很小,那么破解者会很快发现变化。如果它很大,那么连接速度慢的人(比如我的)或每月下载量有限的人(比如我的)会很快放弃玩。@ecreif:你可能希望如此,但事实并非如此。可执行文件是结构化的,“纯机器代码”很容易转换为可读形式。使用反汇编程序和diff工具几分钟后,您将清楚地看到发生了什么变化。如果更改很小,则不需要花太多时间来找出如何修改作弊以适应它们。如果它们很大,那么下载量也很大。给你一个提示。我使用谷歌协议缓冲区来描述通过网络发送的特定游戏对象和消息。我可以使用反射api