设为首页收藏本站官方微博

【汉化资料】游戏包文件结构分析(1)

[复制链接]
查看: 3921|回复: 7
打印 上一主题 下一主题

【汉化资料】游戏包文件结构分析(1)

跳转到指定楼层
楼主
发表于 2008-10-30 19:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

【汉化资料】游戏包文件结构分析(1)

游戏包文件结构分析
& b( D9 ?, {( P7 V5 H$ g! n/ W  I地狱门神! N! ]; C+ J$ o0 [* G7 k, u! w

& c+ x  m. S- b' N4 d0 `摘要:本文通过三个例子介绍了如何初步分析一个未知格式的游戏包文件(package file)的文件格式,并从中提取数据。5 M& q9 S& o: U5 {

, H; _; x9 N  Y; `. @' f$ Q声明:本文档按现状提供,仅用于研究和学习,因为使用本文档造成的任何损失,本人概不负责。
3 a! i% ]5 T5 t2 _/ I0 L; r% l4 N5 Q+ }; u. G8 h; ~& w4 o

) {4 F3 b" `* C# @1 b+ z8 K1.背景
4 ^8 `! D6 Q/ l' |1 O% x3 C: Q
3 `0 k1 @) C2 r* o, s( ]8 v不久之前,一个网友问我怎样从某个游戏的包文件(package file)中提取资源文件,他想从该游戏中提取一个音乐文件作为手机铃声。由于我以前曾经实现过盟军敢死队系列的包文件管理器PCKManager(包含在盟军敢死队开发工具箱中,可以查看该系列的DIR、PCK、PAK文件),对包文件的一些共有特性有一些了解,很快就分析出来了该包文件的格式。后来觉得应该写一篇文章来说明一下,于是就有了这篇文章。文章中有三个例子,分别是盟军敢死队2的PCK文件格式、前面提到的游戏的包文件、盟军敢死队:打击力量的PAK文件格式。+ H9 x) s+ P' E7 C* f. Y! m* c
文档中有些地方会提到一些惯例或者背景的知识,希望大家不要觉得繁琐。# O4 f0 N" k2 {! j7 t9 y
7 ?; l2 K! ^  }7 I  V9 O" ]
1 h7 x. w. U7 a0 H
2.包文件的共同特征
- e0 ?4 Y7 f  g$ G5 S, B( d1 ?! V. g) ]4 f3 j4 E. |8 `
包文件都有一些共同的东西:一个文件索引表和后面的文件数据。
' w! I/ G" P- E$ D这个文件索引表一般每条索引至少会包含文件名、文件位置、文件长度三个数据。
. y, `4 o  B. K! u其中,有了文件位置(文件在包中的偏移量)和文件长度,一般就可以确定一个文件的数据。
( i; P/ H$ r. U/ B* C有一些包文件可能会使用文件名的散列值(Hash code)来代替文件名,这种情况很复杂,如果无法通过其他途径找到文件名,可能就没有办法重建文件名,本文暂不考虑这个情况,这里的例子都不存在这个问题。
# t+ f, z) M/ L2 n$ U+ D# }' Q' W; S1 x; w2 Q6 B. w  {& u

6 S& @% w5 T- u9 ^' P. ]3.本文需要用到的工具
" D/ {8 R3 |+ t; o- x
( [  u1 J- @; |4 W- l, mUltraEdit' A& u# W+ V& C; Z
Visual Studio/...或者其他任何可以用来编程的东西8 X7 c! e+ {* F  H, \$ M# D
Windows自带的科学计算器(既支持16进制和10进制转换,又支持按位逻辑运算And、Or、Xor的好的计算器我没见过,可能以后我会自己做一个)
" @8 M& d4 S( {$ a
# Q* q9 o/ z) O) G% {2 X% U( A+ x: a2 |/ R5 J! m; ^5 v
4.第一个例子——盟军敢死队2的PCK文件格式
; N" i8 l, c! W* y; s" Z
& b% E3 p- s8 d0 N这个格式最简单,完全没有任何加密。但是文件索引表采用的一种基于文件夹的索引形式,比下一个例子略复杂,比最后一个例子效率略低(对游戏而言)。; X; v+ v6 p/ j! s: |0 ], w
这里你需要电脑上已经装好了盟军敢死队2的游戏。如果你没有这个游戏,可以等到下一节再开始动手操作,下一节的例子只要求下载一个10M左右的小游戏。5 T5 x, W% j2 _+ k% A

9 @9 T6 `) L0 P# A用UltraEdit打开DATA.PCK。是不是看到右边的一片“...”中夹杂了一些字符串?这些就是文件名了。
# b1 w+ u. Q; e% S7 z1 y7 W! t; q  X* V4 B0 G. I' n; L
如果你从来没分析过文件的二进制结构,也不要紧张。2 _; }+ U$ ?, w( g
在UltraEdit的Hex编辑模式中,最左边一栏是该行最开始的字节的偏移量,中间一栏是文件的所有的字节数据,每一字节用两位16进制数表示。最右边一栏是这些字节数据的ASCII码解释。更准确的说,在中文的系统中,是GB2312的某一种衍生编码解释。因为中文是借用了128-255的扩展ASCII码的空间来表示开始的,所以会出现一些中文字的乱码,这纯粹是巧合。00用点表示,不存在对应的符号的用问号表示。/ u+ ?( F4 [6 e8 `- N( d  p" Z3 h

# _) {2 Y3 D6 R5 v往下翻几页,你应该会注意到每一个文件名的开始到下一个文件名的开始正好是3行。也就是说,在文件索引表中,一条索引的长度固定为48。
+ j/ E# U1 U2 E8 c0 ?: v4 z/ M# m3 P1 q; {
图1 盟军敢死队2 DATA.PCK文件头
) t! @8 G2 u7 c. H$ I% `: N00000000h: 44 41 54 41 00 00 00 00 00 00 00 00 00 00 00 00 ; DATA............
/ E; ?: p, ?% C4 ^6 J! R0 j  U$ \00000010h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
  ~8 `  D# y& W# C00000020h: 00 00 00 00 01 00 00 00 FF FF FF FF 30 00 00 00 ; ........
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

沙发
 楼主| 发表于 2010-6-5 19:54 | 只看该作者
顶上来
回复 支持 反对

使用道具 举报

板凳
发表于 2010-6-5 23:41 | 只看该作者
我看过这遍文章 有好几章 好长 没看懂
回复 支持 反对

使用道具 举报

地板
发表于 2010-6-6 12:37 | 只看该作者
怎么是08年的文章?怎么没完?第一条回复竟然是2年后的昨天!``
回复 支持 反对

使用道具 举报

5#
 楼主| 发表于 2010-6-6 13:18 | 只看该作者
引用第3楼keithlong于2010-06-06 12:37发表的  :, `! Y' I" n& f$ e: r
怎么是08年的文章?怎么没完?第一条回复竟然是2年后的昨天!``
" Z6 e, Y/ P; {) [1 B
怎么了?08年的文章?
回复 支持 反对

使用道具 举报

6#
发表于 2010-6-6 14:14 | 只看该作者

回 3楼(keithlong) 的帖子

技术文章永远都是有价值的。
回复 支持 反对

使用道具 举报

7#
发表于 2011-6-17 06:52 | 只看该作者
这是门神写的~
回复 支持 反对

使用道具 举报

8#
发表于 2013-3-13 13:35 | 只看该作者
本帖最后由 已有帐号 于 2013-3-13 13:36 编辑 ' f( a& ?9 O# h& y0 ]; B

+ c; @8 q4 O2 {8 I4 `我想解压2个REZ和1个EPK,提出里面的3D 图片和音乐,我把UE图片传过来楼蛛能帮我看看写个俩BMS么300MB大小一个
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

冒险解谜游戏中文网 ChinaAVG

官方微博官方微信号小黑屋 微信玩家群  

(C) ChinaAVG 2004 - 2019 All Right Reserved. Powered by Discuz! X3.2
辽ICP备11008827号 | 桂公网安备 45010702000051号

冒险,与你同在。 冒险解谜游戏中文网ChinaAVG诞生于2004年9月9日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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