我有一款随着时间的推移分发游戏内货币的iPhone游戏,有人发现您可以更改设备上的日期以尽早获得奖励。
我发现Smurf村有一个类似的问题,他们以某种方式发现了篡改。有谁知道他们是怎么做到的?我唯一能想到的是从外部服务器获取时间,这需要设备在线,但它总比我想的要好......有谁知道我在哪里可以找到一个只告诉你时间的服务器?
答案 0 :(得分:4)
您可以使用告诉您时间的NTP服务器。
直到有人使用代理服务器来确定您要连接的NTP服务器,然后欺骗NTP响应......正如其他人所提到的那样,响应很容易解析,因此很容易伪造。
更好的解决方案是使用Google App Engine(免费)之类的东西,向您的应用发送某种加密响应,这种响应可以归结为服务器时间。如果客户端时间偏离太多,应用程序将只使用服务器时间进行计算。然后,即使他们拦截了请求,他们也不会轻易地发回正确的回复。
但基本上在任何网络游戏中,你必须始终认为客户端在撒谎。防止问题的唯一真正方法是让所有东西都通过服务器,因此客户无法确定它突然变得丰富并且让任何其他客户同意它是如此......
答案 1 :(得分:1)
您可以使用互联网上提供的其中一个时间服务器。这是非常简单的协议,你将毫无问题地解析回复。
答案 2 :(得分:1)
您可以使用任何NTP服务器(请参阅http://www.ntp.org/)。
此外,您可以通过存储应用运行的最新日期来实现一些简单的验证,并检查日期是否永远不会再发生。
答案 3 :(得分:0)
如果绝对无法检查远程ntp服务器,将提供至少一层保护的一种方法
检查时间和时区如果您发现时间的变化并未归因于时区变化大于DST的变化,请暂停分配货币
答案 4 :(得分:0)
如果在线,您应该使用加密协议检查NTP服务器,或者最好是您自己的时间戳服务器。
离线时,您可以不添加货币,或者添加货币时间戳并检查作弊(每次应用程序处于活动状态时,时间戳会非单调地变化以允许旅行和时钟漂移) 。然后你可以以某种方式减去任何不义之财:虚拟谷仓引发火灾,游戏中的所有东西突然花费更多,银行转账费用大于转账金额等等。
答案 5 :(得分:0)
iPhone: 打开你的游戏让它加载使用所有的能量,然后去: *设置 *一般 *日期和时间时间 关闭自动 设置为1小时前进(或更多取决于等待时间I.E.能量充满3小时前进3小时) 重新开放游戏,对每场比赛都不起作用
答案 6 :(得分:0)
如果仔细查看HTTP请求和响应的标题,您会发现确定从服务器到客户端的时钟偏移所需的时间信息几乎总是可用。
要跟踪断开连接操作中的绝对时间,可以使用系统MONOTONIC时钟,在iOS上它是kernel interface的一部分。您还需要保存sysctl中的引导UUID和引导时间,以便捕获系统重新引导。