page-bg
menu_bg
我的位置: 网站首页
>
游戏周边
>
文章详情

下单机手机游戏里的一些保护措施,你知道吗?

这里主要总结一下单机手机游戏里一些保护措施。当然这样别人也很容易发现,游戏中明明有的某个数值搜内存竟然搜不到,那他也许就会采取措施来定位你的密文然后试图解密了。内购破解是一件比较通

这里主要总结一下单机手游中的一些保护措施。 虽然它看起来很简单,但它确实有效,并且让试图破解您的游戏的人更难一些。 当然,完全防止破解是不现实的。 这本身就是成本问题。 破解者全力破解,开发者还是要为游戏逻辑全力以赴。

内存加密

记得十多年前玩一些PC单机游戏的时候,用过一个叫金山游侠的工具修改内存,把游戏里的金钱或者其他属性改成自己想要的。 基本原理是游戏运行时,内存中存储一​​些金钱、生命值等数值,修改器在游戏过程中搜索所有具体数值的内存并返回,以便您修改他们。 比如你在一个游戏中有22222个金币,然后你用修饰符搜索内存,找到一个存放这样一个值的地方,那么你基本上可以确定这个地址就是游戏程序使用的内存地址存放金币,然后只要修改这个地址上的值,也会改变你游戏中的钱; 如果您是第一次搜索多个结果,可以先玩一会儿游戏,等数值发生变化再搜索。 都对应同一个地址,可以确认位置。

对付这种作弊的方法很简单。 一种是加密存储一些密钥值。 每次需要读取/分配代码时,都必须遵循加密/解密的步骤。 密文始终存储在内存中。 当然,其他人也很容易发现游戏中有某个内存中找不到的值,因此他可能会采取措施定位到你的密文并尝试解密。 所以最好在内存中放一个明文值,方便玩家搜索。 当然他们改了你就知道了,因为和密文不一致,你就知道这家伙是作弊玩家了。

至于检测后如何处理作弊玩家,就看开发者的想象力了。 你可以封印设备,可以在玩家需要花钱的地方偷偷增加游戏的价值,或者让他的游戏焕然一新传奇私服最新版本,甚至我们的方案说可以直接告诉作弊玩家“我们找到你了你是作弊玩家,现在就给你机会,只要充值10元,立马成为正版玩家。”

存档加密

由于是单机游戏,存档存放在本地文件系统中。 在 iOS 和越狱后,很容易得到这个归档文件。 如果直接用某种文本格式存储游戏进度,比如把存档序列化成xml或者json,那简直是毫无防备,用文本编辑器打开就知道怎么改了; a 使用 稍微好一些,但是也很容易找到规律,或者简单的像修改内存一样修改。

基于以上情况,最好对游戏存档进行加密存储,最好使用密钥加密算法,而不是硬编码加解密算法。 这样,以后有一天,如果发现被破解了,可以重新更换密钥。

归档绑定

虽然存档是加密的,破解还是需要一点功夫,但是你还是可以复制存档的! 谁玩的存档很好,把存档文件分享给大家。 其实这是破坏游戏乐趣的事情,一般玩家都不太会做。 但是如果你的单机游戏还有一些玩家之间的互动,比如排行榜,看到那些作弊玩家占据高位,然后删游戏肯定很无聊。

其实这种情况很容易处理,让存档绑定到设备上就行了,而且存档一定要加密,不然就没用了。 具体方法有两种。 一种是在玩家第一次玩游戏存档时将设备的id写入存档,然后每次读取存档时将存档中的ID与本地机器进行比较。 id相同,如果不一致,将无法进入游戏或打开新存档; 另一种方式是使用本机的id作为key对进行加密,这样被复制到另一台机器读取后就不能正常工作了。

应用内购买验证

如果你可以在游戏中花钱购买金币和道具,作弊者可以通过应用内购买破解而不花钱获得这些东西。 内购破解是比较常见的事情,因为玩家不会直接破解你的游戏,而是破解或者付费; 它通常在越狱的 iOS 设备和获得 root 权限的设备上完成。

由于这种东西是在游戏外被篡改的,所以无法从游戏级别判断,在你的游戏中会收到正确的购买成功回调。 幸运的是,谷歌和谷歌都提供了一个额外的协议,可以让你验证订单,这样你就可以在客户付款完成后,去苹果或谷歌的服务器验证订单的真实性。 这一步都是在你自己的服务器上完成的(我不确定手机端是否也可以验证订单,但即使在手机上也可以完成也不安全),也就是在你完成支付之后在手机上,你可以和自己的服务器沟通订单信息到自己的服务器,自己的服务器跟苹果或者谷歌的服务器验证订单,然后告诉移动端这笔交易是否有效。

如果这样做,首先需要架设服务器进行内购验证,这是额外的开销; 另外,玩家在游戏中购买东西的时间会变长,对体验会有一定的影响。 当然,堵住了内购破解的路子,并不代表你可以赚到原来内购破解损失的钱。 许多作弊玩家可以成为免费玩家。 此外,一些情商高的人还会继续尝试其他游戏。 方法。

强制性升级

虽然是单机游戏,但普遍觉得强行更新不应该。 当然,使用热更新技术的人也可以忽略这一点。

这一步需要服务器,当然一般的CDN服务器就可以了(这个只需要钱,不用写服务器代码),把一些基本的配置信息放在上面,每次启动游戏的时候下载保存到本地(当然也不一定每次都下载,可以先下载一个带有版本号的小文本,只有配置文件的版本比本地新才下载)。 那么这种配置信息可以保存一个游戏最低版本号的字段。 如发现当前运行的游戏版本低于该版本,将锁定游戏并引导玩家更新游戏版本。 加密也很好)。

事实上,这样做在安全方面的意义在于破解单机游戏,可以杀死那些之前发布的存在严重漏洞可被利用的版本。

更改时限

本文主要针对那些时间敏感的单机游戏破解单机游戏,比如放置类游戏。 如果只取本地时间,至少每次写存档的时候都可以把当前时间写进去,然后玩家通常会通过改成未来的时间来作弊,把存档里该拿的都拿来 然后再改回去,只要你找时间往回走,就可以惩罚玩家什么的。

还有一种方式是在线获取网络时间,时不时将网络时间与本地时间进行比较,判断玩家是否作弊,或者只有在进行一些重要逻辑时才使用网络时间(比如作为每日登录奖励)。 具体方法可以是架设一个服务器来提供时间,当然你也可以直接从网上的免费授时服务器获取时间。

但是,使用授时服务器获取网络时间存在一些问题。 由于时间是使用NTP协议获取的(参见RFC 1305),而NTP是基于UDP包传输的,所以不是那么稳定。 有时实际测量后故障率相当高。 高的; 另一个是国内部分地区的运营商已经无法在网络环境下获取时间。 由于是玩家举报,不知道是该地方无法接入国家授时中心,还是运营商屏蔽了。 NTP协议。

迁移存档限制

之前做的单机游戏里面有一个功能,就是移动存档。 虽然做了防止存档复制,但是为了让玩家在换手机的时候可以在新手机上继续和她(这里用“她”是因为那款游戏的玩家大部分是女生)一起玩我们的游戏,我们提供官方存档迁移功能。

具体方法是先将存档上传到我们的服务器,并返回一个随机码给玩家,然后客户端用上传的存档锁定游戏,让玩家通过这个代码从新设备上下载存档,以及只下载一次。

这个功能给很多作弊者带来了新的机会。 他们纷纷在淘宝开店,通过迁移存档的方式远程收钱,帮助其他玩家修改存档。 当时我们还没有做内购验证。 很多卖家先把其他玩​​家的存档迁移到自己的手机上,然后通过内购破解购买大量充值币,再将存档退还给买家。 当然,一些只知道破解内购的淘宝卖家在通过内购验证后被淘汰了,但还是有一些人可以继续做这个生意,充分说明了淘宝一尺高,魔高一尺。

所以我觉得这个功能的使用应该有一定的限制,比如固定次数或者玩多少小时才有机会迁移。

代码混淆

这个大家基本都知道。 事实上,在游戏的源代码层面,在保持代码功能不变的情况下,将代码改得面目全非。 通常,这是通过大量替换原始标识符的名称来实现的,但这绝对不是手动完成的,它都是通过代码混淆器自动完成的。

当然,对于一些写代码一头雾水的人来说,这一步其实是没有意义的。 (对了大王~)

游戏打包机

其实这个大家都知道,是在编译游戏包之后做的。 iOS的ipa我不是很清楚,但是对于apk来说,这一步还是很有必要的。 如果你不打包,别人很容易反编译你的包,加一点自己的广告(或者替换掉原来的),然后重新打包发布到其他应用市场; 如果你打包,别人就得多花一点东西来破解你的包。 . .

现在国内有些渠道甚至要求你加壳再提交给他们,但不知道为什么一般都指定360加固宝。 其实还有一些比较安全的脱壳工具比如A PK 。

标签: