cocos2d手游逆向——XXTEA加密
因为最近在玩一款挂机类的手机游戏,但是玩的挺难受,网上搜了几篇文章,起了点逆向的兴趣。
遂拿起半吊子的技术尝试照猫画虎。
开始
先是将手机安装的 APK 文件导出,直接 adb pull 将/data/app 里的 APK 文件拉取。
然后解压查看 lib 目录发现
很明显这是一款基于 cocos2dlua 开发的手游,然后来到\assets\src 目录下
不过直接打开显示乱码,显然是经过加密的。
前期思考
网上搜索 cocos2d 加密,根据文件的内容结构,应该是以 cocos2dlua 默认的加密方法 XXTEA 算法进行加密的。
这种算法拥有相应的标识符和密钥,所以被加密的 lua 文件开头的一串FF98392D
应该就是相应的标识
接下来需要拿到密钥,直接拿起 IDA 对 cocos2dlua.so 进行调试。用 IDA 打开 so 等待自动分析完成,然后建立 string list,直接搜索这个标识FF98392D
可以看到一个奇怪的字符串 witu_xxWEM,然后使用网上下载的 XXTEADecrypt 软件进行解码。
然后心满意足的打开.lua 脚本,惊讶的发现还是不可读的乱码。
不过这个文件的前几个字节还是一样的有标识LJ
所以我想是不是还是经过了一层 XXTEA 的加密。
于是我将LJ
当做标识,IDA 里继续搜索LJ
获得 Key,但是这次没有一个看似正确的结果。于是只能对汇编的代码进行分析。
半吊子汇编
在查阅 cocos2dlua 的资料后,我知道程序载入资源基本是通过 luaLoadBuffer,许多直接 hook 函数解码的方法也是对该函数进行 hook。
于是我就搜索 luaLoadBuffer 这个函数,与源码比对,发现似乎有点不一样。似乎是定义了自己的函数对密钥进行操作然后再调用官方的 decrypt()
不过找了好久都没有头绪
豁然开朗
因为分析了半天还是没有得出有用的结论,开始在搜索引擎上瞎找。
然后在搜索 LJ+cocos 关键词发现,用 UltraEdit 打开前几个字节是 LJ 的话,说明这个文件是通过 LuaJIT 编译后的文件。
所以思路就不对(〃>皿<)
结局
网上对 Luajit 的相关资料都好老,下次再慢慢整。
然后完全第一次搞逆向玩,了解到 IDA 这个神奇的工具,心想大概还需要汇编方面的知识,有机会这次之后好好学习。
cocos2d手游逆向——XXTEA加密
Author
enpitsulin
Posted on
Updated on