游戏内存加密那些事

在国内做游戏,少不了做各种加密。如果客户端做战斗话,那就更少不了做内存加密了。

一般来说,作弊有三种途径:

  1. 初始态:修改配置表文件
  2. 中间态:修改内存数值(八门神器)
  3. 结果态:修改网络消息

今天我就第2条,谈一谈防作弊的思路及手段。以我对类八门神器的了解,其操作修改内存的基本操作流程如下:

操作方法:

  1. 在游戏界面上找到想要修改的数值(如金币1000),输入八门神器查找,会显示所有数值为1000的内存地址。
  2. 然后在游戏里让这个数值发生变化(如消费2,剩余998)
  3. 再次输入八门神器查找,则会在上次结果的基础上,显示所有数值变为998的内存地址。
  4. 循环1-3的操作,直至只剩下一个内存地址(也有可能是若干个,最好是一个)。

找到内存后,就可以为所欲为了。一般有两种修改,一种是直接修改为想要的值,一种是锁定内存,不让其变化。

如果是静态/全局变量,八门神器还可以直接保存内存偏移记录,以备下次使用。局部变量就只能临时有效了,下次再执行上面的操作修改。

根据这个流程,如果想让作弊者找不那么对应内存地址,那么让显示的数值与实际内存数值不一致,是不是就可以了呢?

解决方案1:隐藏明面数值

在存数值的时候,加上一个的偏移量,或者乘以一个倍数。读数值的时候减去对应的偏移量,或者除以对应的倍数。偏移量和倍数可以是固定值,也可以是任意可用的随机值。

评:

这种方案我们很容易想出来,那么开发八门神器的人也很容易想到啊。

所以八门神器还可以模糊查找,变大了,变小了,变了,没变等变化趋势来查找内存。

因此简单的加减,乘除,异或,平方,立方等都是不好用的,是骗不过八门神器的。

解决方案2:让数值变化失去规律

使用内存加密算法,比如Base64,Zip或者其它自定义等算法。

评:

经过这一步已经可以阻挡N多小白了,但还会有一个大神级黑客,可以反向编译,进而破解加密算法。从而可以通过显示值,反向计算出内存值,然后进行查找-修改-锁定等。

解决方案3:让数值完全随机性

写入时,使用random将数值随机分隔为二个数值,读取时再把两个数值合在一起。

评:

使用随机分隔后,就算反向编译知道了怎么加密的,也无法通过显示值,找到内存值,也就无法进行内存查找了。

解决方案4:不断变化数值所在内存地址

使用动态内存,每次修改数值时,重新new一块新的内存。这样八门神器就无法查找内存了。

评:

频繁new/delete,可能性能会略有下降。但如果性能下降是在可接受范围内,也不失为一个好办法。

解决方案5:使用内存检验码

使用内存校验码,比如Hash,CRC,MD5等校验算法。读取时通过校验,可以很容易判断出内存是否被非法修改过。

评:

此法可以单独使用,也可以与方案2、3、4结合使用。

------------------------------------------

如果有什么问题或想法,欢迎留言交流~

  • 6
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值