安卓游戏资源解密
一个同学在群里发了个游戏,要解密游戏的资源。反编译看了下源码,没看出什么,用Android Killer看了下资源,发现在res/raw目录下有个文件比较大,t0.zip解压后有t0.pak;文件有点大,3M多,并且是以PAK格式的文 件,通过搜索得知这个格式为PAK格式——是一种文件打包的格式。
在网上搜了下 打开PAK文件的软件,发现都不能打开。 搞不定就不搞了。这几天看了 <<揭秘数据解密的关键技术>>,下面图片框框内的像文件名,我们可以知道这个文件是一种文件打包的格式。具体是什么结构不知道。
解析文件推荐使用010 editor,写文件解析模板方便分析。
我们可以看出第一个文件名从0xA开始, 对比每个文件名,发现名字前面的一字节数据表示这个文件名字符串的长度,前面8个字符未知,每两个字符串之间差8个数据,我们可以利用010 editor的模板功能写一个模板文件。
前8字节的数据暂时定义成结构
1 | typedef struct unkown |
包含文件名的数据定义成
1 | typedef struct |
找到最后一个文件名的字符串
然后不断的改变模板文件中i的值计算总共有多少个文件名,最后算出有总共有292个文件名。发现开头的四字节数据刚好为292,因此可以判断该数据为文件的个数。模板文件改写代码
1 | typedef struct |
继续分析最后一个文件名后面的数据。后面的数据的起止地址0x2D80h.
而第一个FileList结构(模板文件定义的那个结构)的unk字段的第一个4字节为0x2d80;可以判断Unk的前四个字节为偏移地址,比较 多个FileLidy结构,可以发现相邻两个FIleList结构的 unk字段的前4字节刚好就是相邻两个FileList结构unk字段指向的数据之差。
模板文件现在修改为
1 |
|
随便找一个文件名查看
后缀spritr文件名的文件头SPRX,可以知道该数据为这个文件的数据,并且没有加密。
资源中最重要的是图片,这里面最多的就是PNG图片,查看数据时文件头并不是PNG,而是RIFF文件头。用图片浏览器也打不开,通过搜索得知这是一种比较新的文件格式,查阅资料知道XnView支持这个文件格式。
用XnView打开的图像就是
解密到此就差不多,接下来就是写个小程序把资源都提取出来了。
最后更新: 2024年03月29日 13:28:53
本文链接: http://shxi.cc/post/9e24c54e.html
版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可,转载请注明出处!