安卓游戏资源解密

安卓游戏资源解密

一个同学在群里发了个游戏,要解密游戏的资源。反编译看了下源码,没看出什么,用Android Killer看了下资源,发现在res/raw目录下有个文件比较大,t0.zip解压后有t0.pak;文件有点大,3M多,并且是以PAK格式的文 件,通过搜索得知这个格式为PAK格式——是一种文件打包的格式。

在网上搜了下 打开PAK文件的软件,发现都不能打开。 搞不定就不搞了。

这几天看了 <<揭秘数据解密的关键技术>>,下面图片框框内的像文件名,我们可以知道这个文件是一种文件打包的格式。具体是什么结构不知道。

解析文件推荐使用010 editor,写文件解析模板方便分析。

我们可以看出第一个文件名从0xA开始, 对比每个文件名,发现名字前面的一字节数据表示这个文件名字符串的长度,前面8个字符未知,每两个字符串之间差8个数据,我们可以利用010 editor的模板功能写一个模板文件。

前8字节的数据暂时定义成结构

 typedef struct unkown
{
    char  unk[8];
}

包含文件名的数据定义成

typedef struct
{
     BYTE  FilenameLen;
     char  Filename[nameLen];
     char  unkonw[8];   //未知数据
}FILE_LIST;

找到最后一个文件名的字符串

然后不断的改变模板文件中i的值计算总共有多少个文件名,最后算出有总共有292个文件名。发现开头的四字节数据刚好为292,因此可以判断该数据为文件的个数。模板文件改写代码

typedef struct
{
int FileNum;
int unk;
}PAK;
typedef struct
{
     BYTE  nameLen;
     char  name[nameLen];
     CHAR  unk[8];
}FILE_LIST;
/////////////////////////////
LittleEndian();
PAK pak;
FSeek(0x8);
local int i;
for(i=0;i<pak.FileNum;i++)
{
    FILE_LIST fileList;  
};

继续分析最后一个文件名后面的数据。后面的数据的起止地址0x2D80h.

而第一个FileList结构(模板文件定义的那个结构)的unk字段的第一个4字节为0x2d80;可以判断Unk的前四个字节为偏移地址,比较 多个FileLidy结构,可以发现相邻两个FIleList结构的 unk字段的前4字节刚好就是相邻两个FileList结构unk字段指向的数据之差。

模板文件现在修改为


typedef struct
{
      int fileNum;
      int unknow2;    
}PAK;
typedef struct
{
     BYTE  nameLen;
     char  name[nameLen];
     int   fileoff<format=hex>;
     int   filesize<format=hex>;
}FILE_LIST;
/////////////////////////////
LittleEndian();
PAK pak;
FSeek(0x8);
local int i;
for(i=0;i<pak.fileNum;i++)
{
    FILE_LIST fileList;
};

随便找一个文件名查看

后缀spritr文件名的文件头SPRX,可以知道该数据为这个文件的数据,并且没有加密。

资源中最重要的是图片,这里面最多的就是PNG图片,查看数据时文件头并不是PNG,而是RIFF文件头。用图片浏览器也打不开,通过搜索得知这是一种比较新的文件格式,查阅资料知道XnView支持这个文件格式。

用XnView打开的图像就是

解密到此就差不多,接下来就是写个小程序把资源都提取出来了。

×

纯属好玩

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

文章目录
  1. 1. 安卓游戏资源解密
,