问题标签 [anti-cheat]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - 在在线游戏中跟踪计算机
因此,我遇到了一个问题,即人们制作多个帐户以使帐户更好,并在游戏中拥有更多资源。
所以我的困境是,许多用户通过代理或 NATd 信息,所以如果我每个 ip 只有 1 个用户,一些合法用户将被禁止。
有没有办法(使用 Javascript 和 PHP)获取特定于计算机的 uniq 标识符(没有硬件更改,计算机硬件更改可能会更改标识符)。
任何想法或评论都会很受欢迎
(以下内容来自保罗的回应,但因不合适而被另一人删除。)
我不能对客户端进行太多更改,因为它是基于浏览器的游戏,因此可以获取 hwid。但是如何使用 JS 或 PHP。
添加计时器和限制以防止传输已经到位,但不会完全阻止它们,可以选择通过电子邮件发送 IP 异常。但这是缓慢而乏味的。我想知道是否有一个明确的方法可以为特定计算机(不基于 ip)生成特定的 id 或标识符,这将使多个帐户无法从同一台计算机登录,但可以从同一个 ip 登录
iphone - iOS环境下的可靠时差
我正在开发一款随着时间的推移而有所改进的休闲游戏,就像 TinyTower 一样。
但 TinyTower 的最大缺陷(恕我直言,它是一款可爱的游戏)是作弊太容易了。游戏依赖于设备时间,所以当它说“这是在八小时内完成”时,你只需将时钟提前八小时,拿到东西,然后把它调回来。
现在,我需要确保这不是人们可以在我的游戏中获胜的方式。我有一个想法,我可以将系统时间与服务器时间交叉引用,但我不能依赖打开的连接,因为可以选择离线播放。
我还可以设置一个传感器,指示操作系统时间是否突然早于上次播放时间,您将获得一个隐形的作弊怀疑计数器。其中三个,游戏将重置,并将您标记为作弊者。
最后的选择是根本不在乎,让骗子成为骗子。但是,如果我要具有竞争元素,例如 hoghscores 等,我真的需要它来工作。
所以......问题是这样的:有没有人知道一种安全可靠的方法来检测自用户上次打开应用程序以来已经过去了多少时间?
iphone - 如何在应用程序运行之间本地检测用户的 iPhone 时钟提前?
休闲游戏中的一个常见漏洞是人为地提高系统时钟以在游戏中跳跃。iOS 设备上的应用程序如何检测到这样的用户时钟提前?
- 不得涉及网络通信
- 不得在时钟提前时假设应用程序处于打开状态(运行或暂停)
- 必须检测时钟提前,检测时钟回滚是不够的
理想情况下,该解决方案对重新启动具有鲁棒性,但这不是必需的。
actionscript-3 - 在 Flash/AIR 游戏中确定计算机 ID
我正在创建一个在线多人游戏,我想阻止玩家在一台计算机上使用多个客户端/帐户加入游戏。我不能简单地在服务器端检查 IP 地址,因为我仍然希望同一办公室的人能够一起玩。
因此,我想在客户端上生成某种计算机 ID/哈希,然后将其发送到服务器。我知道这很容易破解,但它至少会阻止那些不能或不会更改其客户端软件的“骗子”。
有没有办法在我的游戏客户端中生成这样的 ID/哈希?它是用 Flash 和 AIR 制作的(有两个版本,浏览器和桌面)。该值不需要是全局唯一的,因为我会检查IP-address + ID
anti-cheat - 这个在线高分计划可以被滥用吗?
背景
使用在线高分列表的游戏的一个问题是它们经常被滥用。游戏将当前分数发送到服务器,狡猾的用户可以分析协议/方案并发送虚假分数。这就是为什么一些高分榜以 999999 分高居榜首的原因。
这个问题的一个常见解决方案是以某种方式对分数进行加密,并在此之上放置其他机制来识别错误分数。但即使你这样做了,发送分数的还是客户端,并且客户端存在于用户的计算机中,并且可以进行逆向工程。
我的想法
我正在设计/考虑一个游戏(我将完成,是的,对:)),您可以在其中配置您的播放器/机器人,说明如何执行任务(以及何时执行这些指令)。当按下“开始”按钮时,游戏会运行指令。最后获得一个结果,如果成功,则获得一个分数。
那么,怎么样:不是提交分数,而是使用相同的实现将实际指令发送到运行它们的服务器。然后服务器计算分数并将用户放在高分列表中。
问题
有没有办法滥用这个想法来获得假分数?
我知道这可能不是一个新想法。但如果它有效,它也不是不可能扩展到其他游戏,在那里可以记录所有用户操作。
objective-c - iPhone 硬件和用户计时器随着时间的推移变得不同步
我试图检测用户是否在应用程序运行时提前了他们的时钟。我目前正在通过比较两个计时器如何变化来做到这一点:[NSDate timeIntervalSinceReferenceDate]
和 mach_absolute_time。
基本算法是这样的:
- 在应用程序启动时,保存 startUserClock (timeIntervalSinceReferenceDate) 和 startSystemClock (mach_absolute_time 转换为秒)
- 定期将计时器的当前值与它们各自的起始值进行比较。
- 如果差异不同(在一定的误差范围内),我们应该知道计时器不同步,这表明时钟发生了变化——理论上唯一可能的情况是用户修改了他们的时钟。
但是,似乎 mach_absolute_time 的增长速度比 timeIntervalSinceReferenceDate 稍快。在短期内,这不是一个大问题,但随着时间的推移,差异会增加,我们开始看到很多误报。
此问题似乎与硬件有关。我在我拥有的 iPad 1 上根本看不到它,但一位同事在他的 iPad 2 上看到了它,而我在模拟器中看到了它。
我已经确认我将 mach_absolute_time 转换为秒没有问题,方法是用 CACurrentMediaTime 替换它(它在引擎盖下使用 mach_absolute_time)。我尝试将 timeIntervalSinceReferenceDate 更改为其他计时方法(即:CFAbsoluteTimeGetCurrent)。
我的基本假设是否有问题,即计时器应该以相同的速度增长?我的想法是,除非出现根本性错误,否则它们不应该如此不同步——它们都在确定时间,只是从不同的点开始。
有一个更好的方法吗?我需要一个完全离线的解决方案——我们不能假设有互联网连接。
flash - 权威的Flash多人游戏服务器:工作量翻倍?
我正在用 Flash 开发一款益智游戏。这是一款包含一些实时元素的两人对战游戏。它不像俄罗斯方块,但玩家互动的水平和移动速度与 Facebook 上的俄罗斯方块之战相似,但稍微复杂一些。
当然,我想通过互联网匹配玩家。我也想尽可能地防止作弊。正因为如此,我正在研究一个权威的服务器解决方案,就像 Colin Moock 在这个类似问题的答案中描述的那样。也就是说,服务器运行权威游戏逻辑,而客户端运行并行模拟,将玩家动作发送到服务器进行验证。
我的问题是:这是否意味着在客户端和服务器端都实现游戏逻辑?更糟糕的是,服务器可能不会在 Flash/ActionScript 中运行其模拟,这意味着您无法共享代码,并且您将使用两种不同的语言两次实现相同的逻辑。这听起来像是一场逻辑混乱、漏洞百出的噩梦。我误解了这个问题吗?
actionscript-3 - 如何防止我的单人 Flash 游戏作弊引擎?
我在 facebook 上有一些小型 Flash 游戏。如何防止作弊引擎作弊?我的 swf 文件通过 php 将分数发送到我的数据库。我只是不希望人们通过使用作弊引擎来破解我的 Flash 游戏中的高分。避免这些问题的最佳方法是什么?
提前致谢..
ios - 防止游戏中的“时间变化”作弊
可能重复:
iOS 中是否存在用户无法更改的可以使用的时钟
我知道在许多 iOS 游戏的任务需要时间(即“动物完成繁殖前 10 小时”)中,可以进入“设置”并更改时间以加快完成任务的速度。在我正在开发的游戏中,我不希望用户这样做,所以我正在尝试实现一个系统来防止这种类型的作弊。我对此进行了很多思考,但无法提出解决方案。基本上,我的问题是如何在不依赖系统时钟(很容易被操纵)的情况下跟踪时间以防止用户作弊?
java - 如何防止 Gamecih 作弊?
背景
玩家在我的安卓游戏中作弊已经有很长一段时间了。对于一个严格的单人游戏来说,这不是什么大问题,但由于我的游戏包含多人战斗和全球高分榜,这导致合法玩家因为作弊者而停止玩游戏。
他们如何作弊
作弊者使用名为Gamecih的 root 用户应用程序。Gamecih 允许用户暂停应用程序,更改变量值,然后恢复应用程序。所以在我的情况下,他们只是暂停游戏,将“健康”更改为 74 万亿,然后在多人游戏中将每个人都踢出去。这是一段视频,展示了如何使用 Gamecih 在 Fruit Ninja(不是我的游戏)中作弊。
考虑的方法
- 代码混淆。这是行不通的,因为混淆不会改变变量值,只会改变变量名。这意味着作弊者仍然可以找到与其当前健康值相同的变量,然后更改该变量。
- 代码混淆 + getter & setter 值改变。这样,健康实际上不会代表真正的健康价值。在 getter 方法中,我会做类似 return health*10; 在二传手我会做 health=input/10; 这当然可能更复杂。
我想要的是
可以说,我应该使用考虑的方法 nr 2,但话又说回来,它并不能防止黑客攻击,它只会让它变得更难。理想情况下,我想检测人们何时使用 Gamecih 作弊,显示一个弹出窗口说“该死的你,你这个讨厌的黑客”,然后关闭应用程序。我不想要依赖服务器的解决方案,因为我希望我的玩家也能够离线玩游戏。如果可能的话,我还想避免代码混淆。