DreamOfStars 发表于 2023-2-13 11:51

cocos2d 的 XXTEA 解密求助

本帖最后由 DreamOfStars 于 2023-2-13 19:13 编辑

解包某游戏,打开所有资源文件,发现都有固定前缀

基本能确定使用了 XXTEA 加密

用 Frida 无脑 hook 之后发现,获取到的 key 居然是乱码


然后经历了 IDA 一通乱找之后,找到了其解密方法,长这样


看到了 sign 值,其 Hex View 为 0x40676C736C7A40
它下面紧跟着的 16 字节变量看起来很有意思,点开一看,正是 hook 得到的 key

xmmword_FAA41C DCB 0x90, 0x50, 0x4E, 0x40, 0xD, 0xA, 0x1A, 0xA, 0, 0, 0, 0xD, 0x40, 0x48, 0x44, 0x50

之后我就无从下手了,这个 key 不是字符串的话,不能直接用原算法解密吧。函数中的循环我也没能搞懂什么意思,很奇怪

更新:补一下 ApplicationDidFinishLaunching 的函数
讨论的函数位于第 78 行。随后的 第 82 行 loadChunksFromZIP 中调用了 同一个 xxtea_decrypt,并且没能找到 sign 和 key 的相关信息


最后附一张个人理解优化过的函数

cyhcuichao 发表于 2023-2-13 15:59

这个不像XXTEA的呢? 你这串代码扔进去解密试了吗?

waqqt 发表于 2023-2-13 18:05

hook的key前几个字节像PNG的文件头,第一个字节不一样而已。有可能故意混淆视听

DreamOfStars 发表于 2023-2-13 18:31

本帖最后由 DreamOfStars 于 2023-2-13 18:36 编辑

waqqt 发表于 2023-2-13 18:05
hook的key前几个字节像PNG的文件头,第一个字节不一样而已。有可能故意混淆视听

这是与png文件头的对比,看起来有点像,但是这混淆的也太奇怪了。
而且从最后一张图片的代码第20行和第40行来看,这个参数的确是传进去 xxtea_decrypt 里面了,我一直 hook 也只得到这个 key

DreamOfStars 发表于 2023-2-13 19:05

这是我 hook 的 Frida 代码
Interceptor.attach(cal_ptr,{onEnter:function(args){console.log("xxtea_decrypt called. First Arg
Hexdump: \n",hexdump(args),'\n Third Arg Hexdump: \n',hexdump(args),'\n Fifth Arg Hexdump: \n',hexdump(args));
}})

HexDump 出来基本上结果都类似,这里截图其中的一次函数调用


仔细观察发现 arg 是 arg 去除SIGN 之后的值,arg 依旧乱码。迷茫 ing
页: [1]
查看完整版本: cocos2d 的 XXTEA 解密求助