Android 如何防止基于Cocos2dx的离线游戏中的时间欺骗?
最近我正在开发一款基于Cocos2dx-lua的手机离线游戏 我在Google Play上发现了一个名为GameGuardian的应用程序,可以设置时间速度。应用程序可能会在Android 如何防止基于Cocos2dx的离线游戏中的时间欺骗?,android,lua,cocos2d-x,anti-cheat,Android,Lua,Cocos2d X,Anti Cheat,最近我正在开发一款基于Cocos2dx-lua的手机离线游戏 我在Google Play上发现了一个名为GameGuardian的应用程序,可以设置时间速度。应用程序可能会在libc.so中修改方法gettimeofday()。我尝试过许多API,如os.time(),SystemClock.elapsedRealtime(),但都失败了 有人能告诉我一种避免应用程序影响的方法吗?唯一可靠的方法是让你的应用程序与游戏服务器联系以确保时间。许多安卓游戏都在这样做。“战猫”就是一个例子。比如,你可以
libc.so
中修改方法gettimeofday()。我尝试过许多API,如os.time()
,SystemClock.elapsedRealtime()
,但都失败了
有人能告诉我一种避免应用程序影响的方法吗?唯一可靠的方法是让你的应用程序与游戏服务器联系以确保时间。许多安卓游戏都在这样做。“战猫”就是一个例子。
比如,你可以在应用程序启动后立即检查时间有效性,如果没有可用的连接,你可以允许在允许的时间内生成资源。例如,自上次确认时间起不超过1小时
另一个想法可能是检查当前fps。硬件无法加速,所以启用VSync时,帧将在大致相同的时间渲染。如果您发现渲染单个帧所花费的时间明显多于它应该花费的时间,并且如果渲染多个帧,则可能表明存在欺骗的可能性。但这并不是一个稳定的解决方案,因为你们必须确保你们的fps在弱小的设备上不会下降,而且它不会告诉你们游戏不运行时所花费的时间
极端情况可能包括完全擦除应用程序的状态,如果您发现时间从上次保存的未确认时间向后跳了约1小时(以防用户调整DST等)
但一般来说,你不能完全保护离线游戏不受时间操纵。我同意你的观点。检查当前fps是解决此问题的可行但并非完美的方法。非常感谢。