运行内存数据加密加密

匆匆过客 提交于 2020-01-14 13:11:50

前言

对于单机游戏,或者客户端跑游戏逻辑且服务器不验证的网游,需要一些反作弊手段。 
内存数据加密, 游戏数据合理性检测, 服务器重跑验证等都是有效的方案。 
本文主介绍内存数据加密。

正文

内存修改器原理:

修改器修改的数值都是在内存中常驻的,也就是说,数值在内存中的地址是不变的。

我们通过一个例子来看修改器的基本流程。 
比如游戏内金币为100, 修改器先搜100,会得到值为100的变量内存地址。 
等金币变200后,再搜200。 
一般重复3到4步操作,修改器就能定位到金币这个变量所在的内存地址。 
接着就是修改。

在基本搜索之外,一些强大的修改器还提供了模糊搜索和反加密搜索。

模糊搜索: 
一些类似于血条等看不到具体数字的数值,模糊搜索提供了搜索“变大”、“变小”、“变化了”、“没变化”等操作,进行内存筛选。 
模糊搜索的步骤比直接搜数值要多,一般要重复7到10步操作才能找到变量对应的内存地址。

反加密搜索: 
顾名思义,当数值经过加密后存放到内存中时,需要反加密才能找到内存地址。一般都是简单的异或加密或者倍值加密公式。

如何进行内存加密

内存加密一般分为可逆加密和不可逆加密

可逆加密

显示的数据 ~= 内存的数据。

将内存中常驻的数据加密起来,在显示的时候解密即可。 
例如简单的异或加密或者y = nx + m。 
有兴趣的可以搜索一些复杂的加密算法。

不可逆加密:

显示的数据 == 内存的数据。将存储变量加密,保存在验证变量中。

在每次使用变量之前,将变量加密与验证变量对比,这样就能发现是否内存被修改。 
例如计算变量的md5值,并保存起来,下次取值时,先进行md5验证。

除了加密:

除了加密外,还有些很有用的小技巧

不断变化敏感数值的内存存储地址:将读写变量的方法封装成set和get两方法, 调用set方式时自动切换变量存储地址、变化加密密钥等。
取敏感数值时进行范围判断。比如商店商品价格不可能为负数,单局战斗奖励数量不可能突破天际。
 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!