小谈手游加密-新闻详情

小谈手游加密


发布时间:2016-11-30责任编辑:朱明 浏览:1735


手游加密基本上,分为三个部分:包体加密,内存防修改加密,数据存储加密。

1包体加密(专指安卓)

现在包体加密产品都很成熟常见了,市场上用的最多的是“360加固保”和“爱加密”,这两套产品基本是同时推出面向市场的,爱加密稍稍略早一点。宣布的加固内容没有太多区别,有so加壳,添加签名验证,防内存修改,反逆向工程,反调试。

其实用多了后,就发现,也就添加签名验证这个有用,其他的都挺呵呵的。So加壳真的挺浮云,还是能提取。防内存修改那是空谈,修改器一样可以肆虐。

 

但是不得不说,这个签名验证已经足够了,经测试,拆包后,想重新换签名生成apk,确实是不行。当然个人水平有限,据说有高手可以从内存里提取dex,从而得到smali,最终还原java,我个人是觉得有点玄幻,但也不敢说一定不可能。

就基于这个签名验证,就必须得用包体加密,可以直接过滤掉一大片拆包的团伙。这部分操作直接搜索相关产品按照其流程操作即可。无论“360加固宝”还是“爱加密”都是傻瓜式操作,用起来很简单。

 

2内存防修改加密

内存修改直接用三个字解释:修改器。

茫茫多的修改器都是修改运行内存,简直是单机杀手。(网游基于其设计和体制,只修改前端基本没用,现在开发商都很注意数据保护)。现在主流的代码处理方式,都是内存偏移,也就是异或处理:格式如下

void setValue(T value)              

         {

                   m_Value=value;

                   m_EncryptKey=rand();

                   m_Value^=m_EncryptKey;

 

         }

m_Value指原值,m_EncryptKey生成的一个随机值,最后异或处理一下。

看似很厉害,确实也有效防止了普通内存搜索,但是躲不过有些修改器的“模糊搜索”“高级搜索”,反正就是针对式的算法处理,呜呼哀哉。

同事们今天讨论出了一个方案,就是用md5对比式处理。举例说明:

一进入游戏场景,根据“钱”的变量,生成一个md5字符串变量A,然后在任何花钱或者加钱的操作之前,都根据当前的钱数生成一个md5字符串,和A对比,如果一致,ok,钱正常,那么开始花钱或者加钱,完事根据新的钱数生成一个MD5字符串赋值给A变量。

如果不一致,那么呵呵,说明有人在内存里改“钱”了,那么对于这种非法操作,你就看心情处理吧。

仔细想想,确实这种方式是可以的,甚至可以把数个属性穿在一起生成MD5(如攻防血),但是对比的地方太多,难免损失性能。只要性能在接受范围内,那么是个靠谱的方案。

 

3 数据存储加密

公司这边项目前端用的是sqlite数据库,之前用wxsqlite做过自定义加密处理,配合格式伪装,效果一直不错,暂未发现数据库被破的迹象。所以决定沿用下去,有兴趣的朋友可自行搜索相关资料。

游戏加密这件事,一直都是想办法提高别人的破解成本,技术方面,人外有人,山外有山,是无法做到完全防止的。但是我们最起码得做到绝大多数小白无法破解,能过滤掉普通的破解方案,尽可能保护自己的劳动成果。

 

 

春秋工作室   供稿