形同虚设的cocos默认加密

作者: 分类: 教程 时间: 2016-06-16 评论: 4条评论

申明:本文只是演示一种可能,不针对任何具体游戏。

如果开发者不想让游戏中的资源或脚本文件轻易的暴露给其他人,一般会采用对文件进行加密的方式来保护文件或资源被盗用。Quick-Cocos2d-x 为开发者提供了xxtea加密算法,用来对脚本文件及资源进行加密。

比如这么一篇文章就详细介绍了如何使用。
http://www.cocos.com/doc/tutorial/show?id=1447

可以看到,游戏开发者需要调用setXXTEAKeyAndSign来解密资源,而这是明文的key,很容易获取。
上github搜一下这个函数具体干了什么呢。
https://github.com/RayRiver/misc/blob/master/cocos2dx/CocosLuaGame/frameworks/cocos2d-x/external/xxtea/XXTEAUtil.cpp#L36
1.png
可以看见只是把参数存到了成员函数里面去,然后找找哪些地方有使用呢?
https://github.com/RayRiver/misc/blob/master/cocos2dx/CocosLuaGame/frameworks/cocos2d-x/cocos/scripting/lua-bindings/manual/CCLuaStack.cpp#L720
2.png
哦,原来文件头和sign一样,说明这个文件是加密过的,然后用xxtea解密。

找到一款软件的安装包,里面有很多luac文件,根据描述,就是用xxtea加密过后的文件。
3.png
解压两个luac出来对比一下。
4.png
果然文件头是相同的,那多简单啊,随便挑几个luac文件出来,比较一下文件不就找到sign了吗。
python很好用,写一小段代码来试试。
5.png
运行一下,果然无压力
6.png
找到了sign,现在是时候找key了。很巧的是,key和sign都是在同一个函数调用的,那说明生成so的时候,这两个字符串很有可能也在一起。把libcocos2dlua.so解压出来,研究一番,搜索上面找到的sign。
7.png
果然不出所料,直接找到,根本就用不上IDA了。模拟这个搜索过程,写一段代码。
8.png
运行。
9.png
嗯,效果不错。
剩下的就很简单了,遍历所有的luac文件,用xxtea解压。
10.png

总结:cocos自带的加密只防君子,不防小人。特别是sign可以明文直接找到,然后sign又和key一起传入,导致key一起泄漏,这使得解密尤其简单,可以直接自动化。建议,不要只依赖这一个加密方式,比如lua还可以编译成字节码,或者自定义自己的加密方式等等。

标签: 解密

已有 4 条评论

  1. JayXon
    JayXon

    某个版本的xar用的是比xxtea还弱的xtea,只是替换了算法里面的常数而已

    时间: 2016-06-17 02:43 回复
  2. 大鱼
    大鱼

    危险了 icon_evil.gif icon_mrgreen.gif

    时间: 2016-09-09 17:11 回复
  3. Sigma
    Sigma

    Python 66的!

    时间: 2016-10-31 17:07 回复
  4. 大鱼
    大鱼

    用的什么工具搜索的

    时间: 2017-02-15 14:55 回复

添加新评论

icon_question.gificon_razz.gificon_sad.gificon_evil.gificon_exclaim.gificon_smile.gificon_redface.gificon_biggrin.gificon_surprised.gificon_eek.gificon_confused.gificon_cool.gificon_lol.gificon_mad.gificon_twisted.gificon_rolleyes.gificon_wink.gificon_idea.gificon_arrow.gificon_neutral.gificon_cry.gificon_mrgreen.gif