QQ拼音输入法皮肤文件解析

作者: 分类: 教程 时间: 2016-03-12 评论: 10条评论

我一直用的是QQ输入法,纯净不弹窗,非常好用:http://qq.pinyin.cn/

然后我用的皮肤一直是这个:纯色
我挺喜欢的,简洁又好看,就是有一点点不好的地方,状态栏的按钮不太好点。
响应局域大概只有我画红框的地方,太小了,不太好按。
1.png
所以我想自己稍微修改一下下,把触发区域调整大一点。

首先想到的当然是皮肤编辑器,打开皮肤qq.qpys试试呢。
2.png
似乎看起来没问题啊,但是宽度和高度都不让修改,应该是和图片绑定的吧。难道我点不了和图片有关系?
但是这个set.png我也找不到在哪里,应该是封装在皮肤里面吧。
先把皮肤解开试试,一般而言皮肤肯定是一堆图片和一些配置文件咯,通常是直接把这一堆文件打一个包,类似zip那样,然后改个扩展名就是了。

QQ拼音是不是这样做的呢?毕竟如果直接zip,那皮肤很容易就被别人山寨了。
我还是直接看文件内容吧,祭出010 Editor。
3.png
前四个字节是SYPQ,很明显就是文件头(magic number)。如果是我设计一个文件格式,我肯定也会设计一个文件头,表明这个文件是我的程序独有的东西。
但是,注意后面的78 9C,这让我十分熟悉,尤其是78,因为zlib压缩过后的东西,前面肯定是这个玩意儿,典型的比如png的IDAT区段。
4.png
至于为什么是78,这和zlib的算法有关,看多了,你就熟悉了。

那我就假装QQ皮肤是zlib压缩的了,写一段python代码尝试解压一下:
5.png
注意,切除最前面的12个字节,因为那是皮肤文件的文件头。

非常幸运,解压成功!解压出来的test.bin(65.7 KB 67,348 字节)。
现在文件头还有8个字节还没解析出来,但是不是很影响,除非你还要重新打包回QQ皮肤。

再在010 Editor看一看。
6.png
很明显,8~12字节,代表的是zlib压缩前的文件大小。存下这个值,是方便解压的时候分配内存了。

那么4~8中间那四个字节代表什么呢?要我猜我会猜是校验码,4个字节的典型比如CRC32。
如果没有校验码,万一文件下载的时候少了半截都不知道,继续操作文件容易导致程序出故障。
010 Editor就可以计算校验和,选中78一直到最后,算一下。
7.png
刚好,证明了前面的猜想。

不要以为我很神,乱猜也能猜到,那是因为其实大家的做法都差不多,比如png文件,每个区段也是用CRC32校验的。
8.png
最好看的是结束区段IEND,因为这个段没有别的内容,所以直接CRC32,刚好就是后面的4个字节吧。

qpys文件的解析就到此为止了,我们已经分析得很透彻。现在回过头来看看之前解压出来的test.bin。
同样的010 Editor伺候。
9.png
10.png
很明显,magic number就是FSPQ。而且还在这个文件发现了xml文件和png文件。明显这个文件并没有加密压缩,而是某种数组索引格式了。

特别注意到画红线的,有2个字节DO CF,这不就是word文档的格式吗?DOC File Format ……
微软有很多都用这个格式,比如word、excel。当然,官方名字叫做复合文件,还有API来操作这种文件。比如StgOpenStorage。
当然,我不需要再写代码了,因为我记得7z可以直接打开。

用010 Editor删掉test.bin的DO CF前面的276字节。
11.png
7zip读取成功,可以直接解压。怎么还原我就不管了,有很多工具可以办到这件事情。

标签: QQ

已有 10 条评论

  1. 何弃疗
    何弃疗

    占位置 icon_eek.gif

    时间: 2016-03-12 16:30 回复
  2. ishuax
    ishuax

    亲爱的,敬爱的,伟大的 shuax 先生,直接把你改好的皮肤也 百毒盘 吧.

    时间: 2016-03-14 16:54 回复
  3. amair@qq.com
    amair@qq.com

    直接把文件放出来吧

    时间: 2016-03-15 09:53 回复
    1. 耍下
      耍下

      哦,解压完成以后,我就忘记了改皮肤这回事了,我估计是透明png的原因,改不了。

      时间: 2016-03-15 11:35 回复
      1. Sigma
        Sigma

        哈哈,享受的就是 crack 的过程~ icon_biggrin.gif

        时间: 2016-10-31 16:58 回复
  4. 园长
    园长

    好腻害~虽然完全看不懂,但是就是觉得好腻害的样子

    时间: 2016-03-15 10:07 回复
  5. Sealt
    Sealt

    很详细……以前自己想搞一搞但是不熟悉这么多高深的文件修改,学到了!

    时间: 2016-03-29 21:25 回复
  6. 少轻狂
    少轻狂

    耍大,你牛逼! icon_smile.gif

    时间: 2016-05-05 16:39 回复
  7. Jerry
    Jerry

    http://www.fishlee.net/soft/16/index.html
    我一直用这个工具解包QQ输入法皮肤文件,新版不支持QQ皮肤了,必须用旧版。

    时间: 2016-05-10 16:34 回复
  8. 跨境电商
    跨境电商

    技术贴,很不错!~~ icon_wink.gif

    时间: 2016-05-22 06:56 回复

添加新评论

icon_question.gificon_razz.gificon_sad.gificon_evil.gificon_exclaim.gificon_smile.gificon_redface.gificon_biggrin.gificon_surprised.gificon_eek.gificon_confused.gificon_cool.gificon_lol.gificon_mad.gificon_twisted.gificon_rolleyes.gificon_wink.gificon_idea.gificon_arrow.gificon_neutral.gificon_cry.gificon_mrgreen.gif