注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

群青学院·群X会

CROSS+CHANNEL 汉化信息的发布站!(crosschannel.cn)

 
 
 

日志

 
 

CROSS?CHANNEL复刻版汉化全教程 3/10 数据包结构分析、解包、封包  

2012-12-17 00:15:27|  分类: 本作汉化教程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
 

通过调试手段解包一直都是很让人觉得性价比不高的方法,因为封包中的一些数据在游戏的局部运行中并不需要,这可能会让你纠结许久;而且,大多数情况下,解包出来的文件有的仍然是密文。所以,我们拿到一个封包,一般首先通过找规律归纳出封包结构。

不过,在中国,嘿嘿,你可以先试试用Crass提取,它能提取几百种游戏封包。不过,本游戏的它不能提取。

先看看目录里有多少.arc的文件,11个,相当给力!~于是我们用WinHex载入这些文件。先说明一下,WinHex是十六进制编辑器,他所能编辑的是文件的本质,也即二进制状态,甚至快捷方式也能编辑。放图了:


CROSS?CHANNEL复刻版汉化全教程 3/10 数据包结构分析、解包、封包 - crosschannel - CROSS?CHANNEL爱好者汉化联盟

一般来说,一个封包包括如下部分:文件头标记、包内文件索引列表(文件头或尾)、包内文件实体。

于是,我就是受这个“一般经验”的影响,将文件头0x07000000当成文件头标记了,绕了很大的弯路,菜菜我在此不再献丑。

我们拿个简单的封包来讲解一下归纳的结果:

CROSS?CHANNEL复刻版汉化全教程 3/10 数据包结构分析、解包、封包 - crosschannel - CROSS?CHANNEL爱好者汉化联盟

1. 包内文件格式类型数目(4字节)

2. 包内文件格式类型详细列表(12字节 = 4字节格式名 + 4字节该格式文件数 + 4字节文件索引起始地址)

3. 文件名详细列表(21字节 = 13字节纯文件名 + 4字节文件大小 + 4字节文件偏移地址)

4. 文件实体部分

对应此图中的实现:

1. 0x020000 = 2 个文件

2. 0x4D534B00 = “MSK” 文件类型名, 0x01000000 = 1 个文件, 0x1C000000 = 0x1C 为偏移地址;

0x504E4700 = “PNG” 文件类型名, 0x01000000 = 1 个文件, 0x31000000 = 0x31 为偏移地址。

3. 0x49303033340000000000000000 = “I0034” 文件名, 0x8BEE0000 = 35822 字节文件大小, 0x46000000 = 0x46 文件偏移地址;(属于MSK文件类型的)

0x49303033340000000000000000 = “I0034” 文件名, 0x97FB0600 = 457623 字节文件大小, 0xD1EE0000 = 0xEED1 文件偏移地址;(属于PNG文件类型的)

4. 从0x46开始,是第一个文件I0034.MSK,以此类推……

现在我要解释一下为什么0xD1EE0000 = 0xEED1,这个是Little-Endian的编码方式。与之对应的是Big-Endian的编码方式0xD1EE0000 = 0xD1EE0000。在此处,完全可以通过合理性判断得出是Little-Endian,因为0xEED1(61137)比0xD1EE0000(3522035712)更有可能是文件偏移地址。

所谓Little-Endian就是对于十六进制文本,左边是低位,右边是高位;Big-Endian则是左边是高位,右边是低位。比如说,对于十进制数123456789,最高位是1,最低位是9。

接下来,我来教你们怎么验证以上猜想是正确的。对于I0034.PNG文件,我们先定位到文件起始地址:

CROSS?CHANNEL复刻版汉化全教程 3/10 数据包结构分析、解包、封包 - crosschannel - CROSS?CHANNEL爱好者汉化联盟

看到这个文件的文件头有”PNG”标识,基本上确定一半了,接着按照之前找到的规律,选取相应文件大小457623字节的块,一直到 0x7EA68 – 1 = 0x7EA67,复制到新的空文件中,保存为I0034.PNG文件:

CROSS?CHANNEL复刻版汉化全教程 3/10 数据包结构分析、解包、封包 - crosschannel - CROSS?CHANNEL爱好者汉化联盟

OK,打开文件看看。。。。。。额。。。。。。

CROSS?CHANNEL复刻版汉化全教程 3/10 数据包结构分析、解包、封包 - crosschannel - CROSS?CHANNEL爱好者汉化联盟

出乎意料啊。。。。。。不过,总之是成功的。之后就是写出个解包的程序了。

解包程序源码就不放了,因为封装在类里面,不太好贴出来,而且写的确实挺烂。这里放出个截图(英语用错太多,懒得修改了,勿笑):

CROSS?CHANNEL复刻版汉化全教程 3/10 数据包结构分析、解包、封包 - crosschannel - CROSS?CHANNEL爱好者汉化联盟

提取结束后像这样:

CROSS?CHANNEL复刻版汉化全教程 3/10 数据包结构分析、解包、封包 - crosschannel - CROSS?CHANNEL爱好者汉化联盟

封包就是解包的逆向过程,这里不赘述了(节约时间。。。),不过要注意,要将相同扩展名的聚集在一起封包。


(所有程序的源代码将在汉化补丁发布后放出,其实也没什么好期待的啦~ 汉化就是一个互相学习的过程嘛)

·MewX

  评论这张
 
阅读(1289)| 评论(10)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018