在休闲游戏中,一个常见的漏洞是人为地提前系统时钟,使其在游戏中领先。iOS设备上的应用程序如何检测到这样的用户时钟进程?
communication
。
理想情况下,解决方案在重新启动时是健壮的,但这不是一个要求。
发布于 2011-08-19 13:56:04
CACurrentMediaTime & mach_absolute_time
看一看这些问题:
iOS: How to measure passed time, independent of clock and time zone changes?
CACurrentMediaTime使用mach_absolute_time:http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/CoreAnimation_functions/Reference/reference.html
这里有一个关于如何使用CACurrentMediaTime:http://www.informit.com/blogs/blog.aspx?b=02b4e309-308c-468a-bab1-cebb1404be6a的示例
这里有关于mach_absolute_time的更多信息:http://developer.apple.com/library/mac/#qa/qa1398/_index.html http://shiftedbits.org/2008/10/01/mach_absolute_time-on-the-iphone/
发布于 2011-08-19 13:48:06
我在想,如果全球定位系统数据的那一部分暴露在你面前,CoreLocation的东西就能做到这一点。不过,这让我想到。
我唯一的(牵强的)建议是把一些东西放到背景处理中--这必须是出于一小部分特定的原因之一,例如跟踪背景中的位置。作为副作用,试着在一个常规计时器上检测时钟的变化。苹果可能会拒绝它,因为很明显,它不使用位置信息,它只是一个利用背景处理的理由。
任何不涉及网络的解决方案都很难实现,我想知道你为什么不使用它。
发布于 2011-08-19 14:22:51
虽然我认为无法可靠地确定用户是否在没有网络访问的情况下手动将时钟向前转,但您当然可以可靠地确定他们是否返回了时间。由于我们知道这在物理上是不可能的,因此可以假定他们操纵了他们的时钟来作弊。
我的意思是,这不是通常的过程,触发一些动作在应用程序中,需要等待一段时间,退出应用程序,并把时钟向前,重新启动应用程序,以获得他们所等待的东西,然后重新调整时钟回到实际时间?
如果确实如此,那么根据@smgambel的建议,您可以在每次发射时存储物理时间和当前时区,并与以前存储的时间和时区进行比较。如果时间是后面的之前存储的时间,并且设备的时区没有改变,那么您可以安全地假设用户已经操纵了时钟。
https://stackoverflow.com/questions/7122216
复制相似问题