我知道这是一个非常具体的问题,但在游戏中作弊是一个热门话题,我想知道混淆重要指针的基址和模糊成员变量偏移是否是一种有效的防作弊措施?
当游戏重新启动时,成员变量的地址通常会发生变化,而指针的基址总是相同的,所以作弊者会查找保存重要数据的游戏对象的基址,然后添加偏移量来获取成员变量中存储的信息(比如游戏->player->health)。
如果游戏开发人员在游戏类指针声明之前添加了一些随机变量(或者仅仅是一些数据),并且在重要成员变量(例如,在游戏->玩家和玩家->健康之前)之前添加了一些随机长度数据,难道不是给作弊者增加了额外的负担吗?每次游戏被重新编译时,他们都要重新找到基本地址,或者找到一些更耗时的方法来在内存中找到重要的成员变量。
我不是C++程序员,C++允许在编译时或者甚至在游戏发布期间这样做吗?是否有这样的工具,或者您需要为此编写一个自定义解析器?或者因为某种原因这种方法根本行不通?
编辑:我主要讨论的是在线游戏,在那里你必须连接到游戏服务器,所以我确信有一种方法可以确保作弊者不能避免更新exe文件,如果它是由游戏开发人员强制的(例如,通过改变服务器和客户端的游戏数据包结构)。
发布于 2022-09-06 17:07:54
制作一个网络游戏的廉价证据的方法是不信任客户。
其他的一切都不会奏效;你只是在掩饰那些骗子,而不是阻止他们。
第二个最好的方法是验证您正在运行的系统没有损坏--检测欺骗程序及其活动。
像你所描述的那样简单的事情不会在你第一次攻击你的游戏的时候减缓人们攻击你游戏的速度,然后是几秒钟以后的发布。同时,这将浪费资源,并可能使开发人员进行合法的调试成为一件痛苦的事。
安全性是指合法用户所需的努力与非合法用户所需努力之间的比例。一个好的安全系统,就像公钥密码系统一样,在万亿兆的密码系统中具有这个比例。根据我的猜测,你所描述的系统比合法用户(软件开发人员)的比例高出3倍--比合法用户(软件开发人员)更烦人(黑客可执行文件)。还有3点很烂。
应从两个方面来看待反欺骗措施。首先,如果你是一个主要游戏的既定生产者,那么你将有一个严重的反作弊系统已经建立,你将把它纳入你的游戏。如果你不是一个主要游戏的生产者,那么你的目标是成为一个重要的游戏,作弊基本上不是一个大问题,直到你。(在游戏中作弊所需的努力不会随着游戏用户数的增加而扩大;因此,用户基数较大的游戏会得到更多的作弊。)
https://stackoverflow.com/questions/73624454
复制相似问题