首页
社区
课程
招聘
[原创]武侠Q传资源破解思路
发表于: 2014-5-4 13:52 13300

[原创]武侠Q传资源破解思路

2014-5-4 13:52
13300
几个月前闲着无聊解开了"武侠Q传"这款手机游戏的apk看了下,竟然是用pvr.ccz格式的图片,后来用TexturePacker附带的一个pvr.ccz的图片浏览工具打开发现被加密了.因为这款游戏是用的开源引擎cocos2dx做的,而自己对cocos2dx也还算比较熟悉,所以打算试下破解它的密码. - - 在这里我只说下自己的想法,虽然说是想法,但是绝对是没有问题的,因为在几个月前我已经实现过,只不过现在很久了找不到当时的源码.
    pvr.ccz的加密方式可以看这里:https://www.codeandweb.com/texturepacker/contentprotection,其实是自己写的一种加密方式,它不会改变数据长度.里面涉及到一个128位的密码.该密码是全局的,也就是所有pvr.ccz都是用的同一个密码,所以我们只要获取到其中一张pvr.ccz的正常图片数据,然后再根据正常图片数据与加密图片数据反推即可,反推很简单,大家可以下看到上面链接里面有两个源码可以下载 ZipUtils.h ZipUtils.m它这个是用于oc,网上已经可以下到很多的C++版本.(最新版本的cocos2dx 已经将该算法集成至ZipUtils.h和ZipUtils.cpp中,所以最简单就是下个最新的cocos2dx),下面是加密算法的核心部分:
    // encrypt first part completely
    for(; i < len && i < securelen; i++)
    {
        data[i] ^= s_uEncryptionKey[b++];
        
        if(b >= enclen)
        {
            b = 0;
        }
    }
   
    // encrypt second section partially
    for(; i < len; i += distance)
    {
        data[i] ^= s_uEncryptionKey[b++];
        
        if(b >= enclen)
        {
            b = 0;
        }
    }
    其实就是一个^操作,直接用&即可还原.

    那如何获取正常的没加密的pvr.ccz 图片数据呢,同样非常简单,通过查看cocos2dx的pvr.ccz图片加载流程,发现它最终会调用ccInflateCCZFile来解压ccz.pvr图片(其实pvr.ccz就是一种压缩图片格式),在该函数里面如果检测到是加密版本的pvr.ccz 图片就会调用ccDecodeEncodedPvr解密,然后再调用 libz.so 中的uncompress函数解压.so 看到这里大家应该也明白了,直接hook uncompress即可得到完整的解密后的数据.

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 2947
活跃值: (3994)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
懒人一个,要是找到当时的源码就好了
2014-5-4 16:27
0
游客
登录 | 注册 方可回帖
返回
//