最近被人推荐去入这个坑,趁着今天开放注册去抢了一个号,然后被人问到立绘能不能提取,于是就解包来看看,解压一看是用cocos2dx做的,这是我接触的第二个用cocos2dx做的游戏,立绘毫无意外的用了TexturePacker打包,于是去下了个TexturePacker的破解版,然后毫无意外的看到了这张图

对于这种加密过的TexturePacker资源,网上可以百度到3种办法,其中两种都是使用hook,hook画图函数或者解压函数,不过有个缺点,必须要把所有场景都过一遍才能拿到全部资源。第三种方法就是用IDA这个大杀器了,直接打开游戏的SO库查看密钥
TexturePacker加密密钥为32位,使用时需要分成4部分每部分8位,有两种方式调用
比如密钥是aaaaaaaabbbbbbbbccccccccdddddddd则为

ZipUtils::ccSetPvrEncryptionKey(0xaaaaaaaa, 0xbbbbbbbb, 0xcccccccc, 0xdddddddd);

或者

ZipUtils::ccSetPvrEncryptionKeyPart(0, 0xaaaaaaaa);
ZipUtils::ccSetPvrEncryptionKeyPart(1, 0xbbbbbbbb);
ZipUtils::ccSetPvrEncryptionKeyPart(2, 0xcccccccc);
ZipUtils::ccSetPvrEncryptionKeyPart(3, 0xdddddddd);

直接在IDA中搜索这两个函数,然后F5后就能看到代码,大概是下面这种样子

图里是4个有符号整型,把它们转成16进制后拼起来就是密钥了
然后我们继续说“大家的幻想乡”
直接把APK解压,在lib下只有libcocos2dcpp.so这个文件,用IDA打开,直接搜索ccSetPvrEncryptionKey然后F5,如下图

咋一看有点不一样,实际跟踪进去后就会发现密钥就是那4个16进制
所以密钥就是

D587BE8D6DDE2D596BFD8960B123A40E

用TexturePacker打开

至于切图,网上可以搜到一个Python脚本,切完以后就是这样了

14 条评论

  1. 想问问png后缀加密文件,费劲找到so里的密码后,用什么怎么解出哎。小白求dalao指点

    1. 单单一个后缀名没法判断是什么情况,如果是苍蓝境界那种直接看我最上面一篇文章就好了

  2. 請問對於有加密的pvr.ccz在知道key後有辦法做批量解密轉png嗎?
    不然在texturepacker-GUI中一張一張轉很費時

  3. 大大帮帮忙啊,我按照你的步骤破解,出现的跟你有一点点不一样
    v1 = cocos2d::ZipUtils::setPvrEncryptionKey(
    (cocos2d::ZipUtils *)&loc_8A10BC,
    0x253EC10Bu,
    0xD21B5FAB,
    0x941ABBF9,
    v31);
    )
    这个&loc_8A10BC 是什么啊?

    1. 我也跟你 一样的情况 cocos2d::ZipUtils::setPvrEncryptionKey( (cocos2d::ZipUtils *)&loc_8A10BC,
      ,大兄弟 你怎么解决的?

欢迎留言

4 + 4 =