冒险解谜游戏中文网 ChinaAVG

标题: 【汉化资料】游戏包文件结构分析(1) [打印本页]

作者: shane007    时间: 2008-10-30 19:41
标题: 【汉化资料】游戏包文件结构分析(1)
游戏包文件结构分析8 W8 g  u+ D( p: u5 t8 F9 L4 E
地狱门神
0 C9 _0 Z' p% F( R& w
$ s) V8 n1 U  T2 F) y" W摘要:本文通过三个例子介绍了如何初步分析一个未知格式的游戏包文件(package file)的文件格式,并从中提取数据。
" q+ W' v1 E9 z9 S% V( w. P% H, H+ J. R1 ^  w
声明:本文档按现状提供,仅用于研究和学习,因为使用本文档造成的任何损失,本人概不负责。+ i2 F0 D$ M8 h1 F
/ [; p4 O) d" ]( e5 t
- b7 a# Q; @+ q- Z6 W" I
1.背景$ M; B, K6 C! i" g* j, s8 m& }

9 K, S; o9 H) _不久之前,一个网友问我怎样从某个游戏的包文件(package file)中提取资源文件,他想从该游戏中提取一个音乐文件作为手机铃声。由于我以前曾经实现过盟军敢死队系列的包文件管理器PCKManager(包含在盟军敢死队开发工具箱中,可以查看该系列的DIR、PCK、PAK文件),对包文件的一些共有特性有一些了解,很快就分析出来了该包文件的格式。后来觉得应该写一篇文章来说明一下,于是就有了这篇文章。文章中有三个例子,分别是盟军敢死队2的PCK文件格式、前面提到的游戏的包文件、盟军敢死队:打击力量的PAK文件格式。
9 C9 i7 m1 ^$ G1 B! W( V文档中有些地方会提到一些惯例或者背景的知识,希望大家不要觉得繁琐。
, @6 V! m9 w; Y% c4 O5 W$ V
. U) J1 d8 }% s& J- d, Q0 U$ d0 n' m+ `
& P( F" N1 I: P. @/ q2 k2.包文件的共同特征
! W. P( n- W  j8 g2 y% ~: o* O0 {
0 G- m+ n! x* z8 S( {包文件都有一些共同的东西:一个文件索引表和后面的文件数据。+ d3 L% T0 `3 f
这个文件索引表一般每条索引至少会包含文件名、文件位置、文件长度三个数据。
. Q. R# {/ L1 A其中,有了文件位置(文件在包中的偏移量)和文件长度,一般就可以确定一个文件的数据。
9 Q& d8 A4 E4 Z1 B$ P$ I有一些包文件可能会使用文件名的散列值(Hash code)来代替文件名,这种情况很复杂,如果无法通过其他途径找到文件名,可能就没有办法重建文件名,本文暂不考虑这个情况,这里的例子都不存在这个问题。7 D6 z3 w1 ~$ I* G/ q8 \. X

* |/ _) ^; R: P" c4 Z% d( ]! I/ a3 y( V0 [! o
3.本文需要用到的工具
( E; H9 m: T* V1 g7 ]* @" f& t/ e4 F" H8 n, m* M
UltraEdit8 Z, M4 ?8 ?5 a
Visual Studio/...或者其他任何可以用来编程的东西9 m' \; N* X: ~6 r7 K; Y
Windows自带的科学计算器(既支持16进制和10进制转换,又支持按位逻辑运算And、Or、Xor的好的计算器我没见过,可能以后我会自己做一个)
7 R% n7 k: |5 L* ^2 q: h# L+ ?* c. m' f# b% T4 Q1 e9 P

) z! X: {2 O* e- W1 Y2 p4.第一个例子——盟军敢死队2的PCK文件格式$ W7 K/ j" x7 g; e/ j/ B9 H: o
8 ~( g4 m8 V! \0 `
这个格式最简单,完全没有任何加密。但是文件索引表采用的一种基于文件夹的索引形式,比下一个例子略复杂,比最后一个例子效率略低(对游戏而言)。
! L& ?9 D' k4 J# J: r1 M% b这里你需要电脑上已经装好了盟军敢死队2的游戏。如果你没有这个游戏,可以等到下一节再开始动手操作,下一节的例子只要求下载一个10M左右的小游戏。
1 l: r; |( H6 ^
7 Z  z$ A0 e* S/ j) W0 c用UltraEdit打开DATA.PCK。是不是看到右边的一片“...”中夹杂了一些字符串?这些就是文件名了。6 d, J8 ^( A! x' w, q( Q' k

; |, P: J# b9 O# M0 e) X如果你从来没分析过文件的二进制结构,也不要紧张。9 |! b1 T; t8 x5 {; Z
在UltraEdit的Hex编辑模式中,最左边一栏是该行最开始的字节的偏移量,中间一栏是文件的所有的字节数据,每一字节用两位16进制数表示。最右边一栏是这些字节数据的ASCII码解释。更准确的说,在中文的系统中,是GB2312的某一种衍生编码解释。因为中文是借用了128-255的扩展ASCII码的空间来表示开始的,所以会出现一些中文字的乱码,这纯粹是巧合。00用点表示,不存在对应的符号的用问号表示。* A& ^( z9 A; P2 ^5 C

: X  x8 T) S& L往下翻几页,你应该会注意到每一个文件名的开始到下一个文件名的开始正好是3行。也就是说,在文件索引表中,一条索引的长度固定为48。, d* n' O( B4 ^' r
" O$ V3 e  ?* G
图1 盟军敢死队2 DATA.PCK文件头) p% R+ _$ G+ V# K
00000000h: 44 41 54 41 00 00 00 00 00 00 00 00 00 00 00 00 ; DATA............
. s* P$ h/ i* K$ b7 ~) H$ S$ w00000010h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
; R& l4 e6 Z$ n# L$ b) m2 U2 @: ?" q00000020h: 00 00 00 00 01 00 00 00 FF FF FF FF 30 00 00 00 ; ........
作者: shane007    时间: 2010-6-5 19:54
顶上来
作者: beegame    时间: 2010-6-5 23:41
我看过这遍文章 有好几章 好长 没看懂
作者: keithlong    时间: 2010-6-6 12:37
怎么是08年的文章?怎么没完?第一条回复竟然是2年后的昨天!``
作者: shane007    时间: 2010-6-6 13:18
引用第3楼keithlong于2010-06-06 12:37发表的  :
9 q* j! I/ g% f, o7 k. B7 Z怎么是08年的文章?怎么没完?第一条回复竟然是2年后的昨天!``
, j3 d5 q; }4 W! C3 _4 o
怎么了?08年的文章?
作者: canmover    时间: 2010-6-6 14:14
标题: 回 3楼(keithlong) 的帖子
技术文章永远都是有价值的。
作者: wwcbjs    时间: 2011-6-17 06:52
这是门神写的~
作者: 已有帐号    时间: 2013-3-13 13:35
本帖最后由 已有帐号 于 2013-3-13 13:36 编辑
# o2 P; |) ^$ C( A
1 R9 Q# j' U1 @$ ^, ~我想解压2个REZ和1个EPK,提出里面的3D 图片和音乐,我把UE图片传过来楼蛛能帮我看看写个俩BMS么300MB大小一个




欢迎光临 冒险解谜游戏中文网 ChinaAVG (https://chinaavg.com/) Powered by Discuz! X3.2