前言
对于单机游戏,或者客户端跑游戏逻辑且服务器不验证的网游,需要一些反作弊手段。
内存数据加密, 游戏数据合理性检测, 服务器重跑验证等都是有效的方案。
本文主介绍内存数据加密。
正文
内存修改器原理:
修改器修改的数值都是在内存中常驻的,也就是说,数值在内存中的地址是不变的。
我们通过一个例子来看修改器的基本流程。
比如游戏内金币为100, 修改器先搜100,会得到值为100的变量内存地址。
等金币变200后,再搜200。
一般重复3到4步操作,修改器就能定位到金币这个变量所在的内存地址。
接着就是修改。
在基本搜索之外,一些强大的修改器还提供了模糊搜索和反加密搜索。
模糊搜索:
一些类似于血条等看不到具体数字的数值,模糊搜索提供了搜索“变大”、“变小”、“变化了”、“没变化”等操作,进行内存筛选。
模糊搜索的步骤比直接搜数值要多,一般要重复7到10步操作才能找到变量对应的内存地址。
反加密搜索:
顾名思义,当数值经过加密后存放到内存中时,需要反加密才能找到内存地址。一般都是简单的异或加密或者倍值加密公式。
如何进行内存加密
内存加密一般分为可逆加密和不可逆加密
可逆加密:
显示的数据 ~= 内存的数据。
将内存中常驻的数据加密起来,在显示的时候解密即可。
例如简单的异或加密或者y = nx + m。
有兴趣的可以搜索一些复杂的加密算法。
不可逆加密:
显示的数据 == 内存的数据。将存储变量加密,保存在验证变量中。
在每次使用变量之前,将变量加密与验证变量对比,这样就能发现是否内存被修改。
例如计算变量的md5值,并保存起来,下次取值时,先进行md5验证。
除了加密:
除了加密外,还有些很有用的小技巧。
不断变化敏感数值的内存存储地址:将读写变量的方法封装成set和get两方法, 调用set方式时自动切换变量存储地址、变化加密密钥等。
取敏感数值时进行范围判断。比如商店商品价格不可能为负数,单局战斗奖励数量不可能突破天际。
来源:CSDN
作者:jelly_lzy
链接:https://blog.csdn.net/u013896064/article/details/103968890