最近被人推荐去入这个坑,趁着今天开放注册去抢了一个号,然后被人问到立绘能不能提取,于是就解包来看看,解压一看是用cocos2dx做的,这是我接触的第二个用cocos2dx做的游戏,立绘毫无意外的用了TexturePacker打包,于是去下了个TexturePacker的破解版,然后毫无意外的看到了这张图
QQ截图20150719204001
对于这种加密过的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后就能看到代码,大概是下面这种样子
QQ截图20150719202700
图里是4个有符号整型,把它们转成16进制后拼起来就是密钥了
然后我们继续说“大家的幻想乡”
直接把APK解压,在lib下只有libcocos2dcpp.so这个文件,用IDA打开,直接搜索ccSetPvrEncryptionKey然后F5,如下图
QQ截图201507192035201
咋一看有点不一样,实际跟踪进去后就会发现密钥就是那4个16进制
所以密钥就是

D587BE8D6DDE2D596BFD8960B123A40E

用TexturePacker打开
QQ图片20150719203900
至于切图,网上可以搜到一个Python脚本,切完以后就是这样了
QQ截图20150720140123

少女前线Live2D解密

上周在CP22看到这个游戏两周年了,打算回坑玩一阵,不过上一个号是买的初始号账号密码都忘记了,所以只好开了个新号。然后新皮肤倒是抽到了,不过枪都没有怎...

阅读全文

简单绕过BanG Dream校验

2.2.0 上周去参加CP22,炸梦演出时的人比想象中的要多,给我一种国服能很火的感觉,于是我决定下回日服顺带摸鱼一篇文章 游戏不懂什么版本开始加入了一点校验...

阅读全文

浅谈某NetHTProtect

声明,本文只稍微提一下思路,不提供任何代码~ 这次是第二次写它了,上篇文章讲的也是这玩意,不过这次它加了个新东西,直接暴力dump dll的话会发现method co...

阅读全文

12 条评论

  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,
      ,大兄弟 你怎么解决的?

欢迎留言

7 + 6 =