2024年5月5日发(作者:)

单机手游防破解的有效防护措施

这里主要总结一下单机手机游戏里一些保护措施。虽然看似简单,但效果也还可以,

能让试图破解你游戏的人稍微费点功夫。当然完全防止破解是不太现实的,这本身就是个

成本问题,破解者全力以赴于破解,开发者还是要全力以赴于游戏逻辑的。

内存加密

我记得我十几年前玩一些PC单机游戏的时候,使用过一个叫金山游侠的工具修改内

存,把游戏里的钱或者其他属性改成我想要的。基本原理是,游戏运行的时候里面的一些

数值比如金钱、生命值之类的都是存储在内存中的,修改器就通过搜索游戏进程中中所有

特定数值的内存并返回,让你可以修改。比如你在一个游戏里有22222金币,然后你用

修改器搜索内存,找到了一个地方存着这么个值,那你就基本可以肯定这个地址就是游戏

程序用来存放金币的内存地址,然后只要修改这个地址上的值,你游戏里的钱就也被改

了;如果第一次搜索搜到多个结果,可以玩一会儿游戏等数值变了再搜,多试几次,几次

的数值变动情况都对应到同一个地址也就能确认位置了。

应对这种作弊方式很简单,一种是加密存储一些关键性数值,每次代码中要读取/赋

值也都要走一遍加密/解密的步骤,内存中永远存放的是密文。当然这样别人也很容易发

现,游戏中明明有的某个数值搜内存竟然搜不到,那他也许就会采取措施来定位你的密文

然后试图解密了。所以最好还是在内存中放一份明文的数值,让玩家可以搜到,当然等他

们改了你就能知道,因为和密文对比不一致,然后就能知道这个家伙是个作弊玩家了。

至于检测到作弊玩家后如何处理,这就取决于开发者的脑洞了。可以对设备封号,可

以偷偷的把这个玩家游戏里需要花钱地方的数值调高,或者让他的游戏变成另一个完全不

同的样子,甚至我们的策划表示可以直接告诉作弊玩家“我们发现你是个作弊玩家,现在

给你一个机会,只要充值10块钱,立马转正成正版玩家”。

存档加密

由于是单机游戏,所以存档都存储在本地的文件系统上。在Android和越狱的iOS

上,是可以很容易得到这个存档文件的。如果直接使用某种文本格式来存储游戏进度,比

如把存档序列化成xml或者json之类,那简直就是不设防,随便用一个文本编辑器打开

稍微看一下就能知道怎么改;稍微好一点的用二进制来存放,但这也是可以很容易找到规

律,或者干脆用像修改内存那样的方式来修改存档。

基于以上的情况,游戏存档最好加密进行存储,而且最好使用密钥加密的算法来做而

不要把加密解密算法写死。这样以后哪天发现被破解了可以再更换密钥。

存档绑定

虽然存档加密了,破解起来稍微费点劲,但是还是可以拷贝存档啊!谁谁谁玩出一个

很不错的存档,分享出存档文件给大家。其实这是很破坏游戏乐趣的一件事,正常点的玩

家都不太会去做。但如果你的单机游戏还是有点玩家间交互的,比如有排行榜,看着那些

作弊玩家占据着高名次,肯定觉得挺没意思的,然后就删游戏了吧。

其实处理这种情况很容易,让存档跟设备绑定就好了,而且存档肯定要加密,不然什

么都白搭。具体做法分两种,一种是在玩家第一次玩游戏存档被创建的时候把这台设备的

device id也写到存档里,之后每次要读存档的时候都比较存档里的device id和本机的

device id是否一致,不一致则不让进游戏或者开启新的存档;另一种方式是把本机的