有爱,有技术,有你^_^)y
╱人◕‿‿◕人╲订下契约(注册新用户)

合作站点账号登陆

QQ登录

只需一步,快速开始

快捷导航
查看: 4086|回复: 10
收起左侧

游戏解包

 关闭 [复制链接]

签到天数: 1 天

连续签到: 1 天

[LV.1]初来乍到

248

主题

365

好友

3万

积分

傲娇娘

User your imagination Bitch!

积分
33328
发表于 2012-3-9 14:16:47 | 显示全部楼层 |阅读模式

╱人◕‿‿◕人╲定下契约

您需要 登录 才可以下载或查看,没有账号?╱人◕‿‿◕人╲订下契约(注册新用户)

x
本帖最后由 kesaan 于 2012-3-10 13:50 编辑

   嘛,闲话不说,下面我就首先分析一下ykc文件,也即是游戏的打包文件。游戏目录下有三个文件,其中data01.ykc打包的是游戏脚本文件、data02.ykc打包的是游戏CG和立绘,而data03.ykc则是打包了所有的语音。
        ykc打包文件的格式如下:
  

                               
登录/注册后可看大图

        其中Header是一个类似如下的结构体:

struct  ykcHeader
{
char MagicNum[16];
intFETOffset;
intFETSize;
};
        其中前面16字节是固定的幻数,它的内容必须是(至少对于这两个游戏是这样)如下的数据:


charMAGIC_NUM[] = {'Y', 'K', 'C', '0', '0', '1', 0, 0, 0x18, 0, 0, 0, 0, 0, 0, 0};
        然后后面两个数据项是File Entry Table在文件内的偏移位置和大小。这个File Entry Table就是记录每一个文件项的结构,它是由FET_Item构成的数组。每个FET_Item记录了一个文件的信息,FET_Item的结构如下所示:

struct  FET_Item
{
intname_offset;
intname_length; //包括字串的NULL
intfile_offset;
intfile_size;   
intzero = 0; //必须为0
};
        首相两个成员name_offset和name_length是定义了该文件文件名字符串在ykc文件中的储存位置和大小,注意这个大小是包括NULL的。也就是说,文件名是连同NULL一起被储存的。从我们的表中可以知道,实际上这些个文件名位于File Name Table区域中。
        然后两个成员file_offset跟file_size则定义了文件实际数据在ykc打包文件中的储存位置和大小,注意文件统一位于上面图中的Data区域。当然,最后一项4字节总是应该为全零


        通过以上的方式我可以拿到所有的游戏资源了,但是我却在data01.ykc中还发现了yks和ykg两种类型文件:

                               
登录/注册后可看大图
        由经分析可知这就是游戏的脚本文件。其中yks对应包括了游戏的对话,如果你在做汉化的话这个文件就十分重要了。但是打开这个文件你可以发现,满屏幕的乱码

                               
登录/注册后可看大图
。我当然不是想说其实你只要把编码换成日文编码Shift-JIS就行了,实际上我是想说,可以看出来feng这个游戏引擎和NS或者Krkr不同,他的脚本不是文本脚本而是二进制脚本,那么如果你要看到文本的话,还的对这个脚本分析一番。当然,我提取CG的目的这时已经达到了,但是既然走到这里了,我就不妨一遍把这个东西分析了吧。
       我这里只分析yks脚本文件。yks结构比较简单,除了30h字节的header之外,后面全部是数据。Header的结构如下:

                               
登录/注册后可看大图

       首先,前5个字节是幻术,对应ACSII码值为YKS001,然后注意看红蓝绿黄四个区域。其中黄色区域作用未知,程序在处理黄色区域第一个DWORD的时候(前4个字节),我们设这个值为value,若value不为0,则会开辟一块大小为12*value+4大小的动态空间,作用未知(并没有读取任何数据到这里,后面的分析你可以清楚地知道这点)。
      另外三个区域,则是定义了三个数据段。每个区域前一个DWORD是指的offset,后一个DWORD则是指定length。注意对于这个length还有点小把戏,对于红色区域实际上每个元素是4Byte,那么红色区域定义的数据块大小为size=length*4,同样的道理蓝色区域size=length*16,而绿色区域size=length*1。整个文件大小为文件头的30h字节加上三个数据段大小。
       文件大小 = 30h + Length(红)*4 + Length(蓝)*16 + Length(绿),大家可以自行验证。(你可以看到黄色区域实际上没有对应数据,那么程序根据这里分配内存的用意实在令我费解了

                               
登录/注册后可看大图
       这三段数据段中,红色数据段的数据是直接明文存在,但是数据类型不明。
        蓝色数据段被加密了,数据解密算法如下:
buffer =>int*类型
length =>int类型
intedx = 0;
for(inti = 0; i < length; i++){
         if(buffer[edx] == 0) buffer[edx+3] = 0;  
         edx+=4;
}
       绿色区域是脚本数据,这是十分重要的了。他的加密方式是每个字节直接与0xAAh异或,所以解密我们也只需要将每个字节与0xAAh异或就行了。分析出来的文本如下所示:

                               
登录/注册后可看大图

       这里的文本里还是混入了大量二进制代码,说明这个游戏引擎的确是基于二进制脚本工作的。

       好了,我的分析就到此结束了。我把解包程序和文本提取程序都分享了。以上。
(点此下载。注意两个东西使用方法都是直接将文件拖上去就行)


度娘把图吞了,有时间在传吧
一直奋斗在起床的第一线!
回复

使用道具 举报

该用户从未签到

77

主题

83

好友

1万

积分

字幕组

积分
16288
发表于 2012-3-9 14:19:39 | 显示全部楼层
度娘吞图
回复 支持 反对

使用道具 举报

该用户从未签到

61

主题

143

好友

2万

积分

第一章

积分
22933
发表于 2012-3-10 02:23:52 | 显示全部楼层
图崩了~~
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

3

主题

6

好友

1029

积分

Continue

积分
1029
发表于 2012-8-13 12:15:04 | 显示全部楼层
-。-百度利用到连图片展示公益广告-。-

点评

好烦...原先在百度文库写的  发表于 2013-3-10 14:26
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

13

主题

29

好友

5784

积分

序章

积分
5784
发表于 2012-8-20 14:49:58 | 显示全部楼层
求问如何分析资源封包的数据结构呢,目前卡在这里。。
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

签到天数: 1 天

连续签到: 1 天

[LV.1]初来乍到

21

主题

63

好友

1万

积分

第一章

积分
18553
发表于 2012-10-15 02:23:52 | 显示全部楼层
好东西 mark一发,  这类的分析文章不好找啊。。有种入门无路的感觉
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

6

主题

10

好友

5362

积分

序章

积分
5362
发表于 2013-1-31 23:37:30 | 显示全部楼层
感谢资源~入门无路+1
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

152

主题

243

好友

5万

积分

第三章

积分
56446
发表于 2013-3-10 13:40:17 | 显示全部楼层
分享文件失效
@kesaan  
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

12

好友

1953

积分

Continue

积分
1953
发表于 2013-9-16 23:57:59 | 显示全部楼层
好厉害的感觉~~
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

3

主题

13

好友

1824

积分

Continue

积分
1824
发表于 2013-11-28 00:14:07 | 显示全部楼层
看不到图片啊- -
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

签到天数: 3 天

连续签到: 1 天

[LV.2]偶尔看看I

3

主题

17

好友

4553

积分

序章

积分
4553
发表于 2013-12-3 20:03:58 | 显示全部楼层
图片坏了
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

本版积分规则

小黑屋|手机版|技术宅(基宅) ( 粤ICP备18082987号-1 | 浙公网安备 33010902001746号 )

GMT+8, 2024-4-30 10:02 , Processed in 0.527405 second(s), 42 queries , Redis On.

Copyright © 2018 技术宅社区

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表