冒险解谜游戏中文网 ChinaAVG

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

作者: shane007    时间: 2008-10-30 19:43
标题: 【汉化资料】游戏包文件结构分析(2)
5.第二个例子——一个小游戏的包文件格式
  }- A+ H$ x6 B( m+ e: r' v9 `. ?1 l! I* I$ w( F
下载地址:http://www.lanqie.net.cn/html/benzhanzuopin/20070604/43.html AAAKK版
& B: I$ C3 G: C$ ]) T7 C. e; h( x  {0 r1 ?1 h# G1 ?3 ]
包文件是安装文件夹中最大的文件Game.dat。
6 G* P' v6 s# ]3 t
: `- |) l7 X( |. W1 i这个格式用到了简单的异或加密,但是文件索引表非常简单,因为没有文件夹格式。5 }9 {8 l% h8 U& \4 Y
& w* G$ ?# ~1 s- G6 b( M; @! ]
打开文件,发现有一些文件名(1.BMP,1.WAV),而且每两个文件名的开头间隔一样,说明文件索引长度固定,为28。可以看到文件名占20字节,文件名的空白用空格(0x20)来填充。每两个文件名之间还有8个字节,即两个Int32。可以估计其中一个是文件位置,另一个是文件长度。4 z2 ?9 k& q1 `

0 `! Z: _3 P) I图2 Game.dat文件头  h0 J% ~% Y3 O0 \* e* }  [! p8 V
00000000h: 52 45 53 59 00 C2 09 00 00 88 47 03 00 4E 55 4D ; RESY.?..圙..NUM
5 _/ M6 k- f, v5 ?( t00000010h: 2E 42 4D 50 20 20 20 20 20 20 20 20 20 20 20 20 ; .BMP            4 h2 A$ p5 s! ^  K  R# l* L% J9 ~
00000020h: 20 4B 51 03 00 C2 58 01 00 31 2E 42 4D 50 20 20 ;  KQ..耎..1.BMP  3 P: h0 L2 B  N* p
00000030h: 20 20 20 20 20 20 20 20 20 20 20 20 20 0E AA 04 ;              .?8 [7 w7 J& z% G. Z$ D
00000040h: 00 2A 20 00 00 31 2E 57 41 56 20 20 20 20 20 20 ; .* ..1.WAV      
# F! f( ~! f. `7 H! y00000050h: 20 20 20 20 20 20 20 20 20 39 CA 04 00 C0 58 01 ;          9?.繶.; [/ M8 t: U" x  O
00000060h: 00 32 2E 42 4D 50 20 20 20 20 20 20 20 20 20 20 ; .2.BMP          8 Z, N% o. @4 G8 H3 Z5 l7 O
00000070h: 20 20 20 20 20 FA 22 06 00 D8 AF 02 00 32 2E 57 ;      ?..丿..2.W6 z& C' z( t# O" x
00000080h: 41 56 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ; AV              
7 h0 E2 v5 h7 [" h) p' S00000090h: 20 D3 D2 08 00 C0 58 01 00 33 2E 42 4D 50 20 20 ;  右..繶..3.BMP  : v2 @+ c. L5 l* A9 d4 O
000000a0h: 20 20 20 20 20 20 20 20 20 20 20 20 20 94 2B 0A ;              ?.( m9 {' [, f7 I0 l6 t/ j
000000b0h: 00 1E 80 00 00 33 2E 57 41 56 20 20 20 20 20 20 ; ..
作者: shane007    时间: 2010-6-5 19:56
给新人看看
作者: naptid    时间: 2010-6-5 22:43
这个……就不能整理在一个帖子么,分两个帖子找起来累
作者: beegame    时间: 2010-6-5 23:29
本人菜鸟,即两个Int32是什么意思?
作者: shane007    时间: 2010-6-5 23:54
引用第3楼beegame于2010-06-05 23:29发表的 : * O: B3 _9 z9 d2 v% q+ k5 R* n
本人菜鸟,即两个Int32是什么意思?

8 r& _0 {: b9 b2 y8 v" ~  k
2 E# B8 Z  p" _1 c) J4 a* \2个32位整形的,每个4bytes,共8bytes
作者: shane007    时间: 2010-6-5 23:55
引用第4楼shane007于2010-06-05 23:54发表的 : + M# ~. a- r# L% P1 X

& `/ \. |; a, S: N8 S( G% Y4 n. c# e2 b, w: i8 |- M
2个32位整型,每个4bytes,共8bytes $ k& G. v/ \- ?" T& S8 M" T

作者: keithlong    时间: 2010-6-6 12:44
这个东西看的莫名其妙的啊
作者: canmover    时间: 2010-6-6 21:48
标题: 回 楼主(shane007) 的帖子
有个小问题。 [attach]16358[/attach]4 y# e# c; M7 S0 n  p6 M
选中部分为bmp文件的偏移地址,但我转到此处后,发现要比目标地址错后一个 [attach]16359[/attach]。为什么这样呢?程序又是怎么作出减一位的决定的呢? 1 J- r1 I' Y! f
我下载的是雪豹老虎机,传一张提取出的图片 [attach]16360[/attach]
作者: canmover    时间: 2010-6-6 21:51
标题: 回 楼主(shane007) 的帖子
解包器该怎么做呢?
作者: shane007    时间: 2010-6-6 21:55
标题: Re:回 楼主(shane007) 的帖子
引用第8楼canmover于2010-06-06 21:51发表的 回 楼主(shane007) 的帖子 : * j2 m. D: p( b, k( D! b$ x9 e
解包器该怎么做呢?

+ b. \: q3 y. ]' R% L9 G; }4 \. j. T  W4 L

3 J& C' t' c) t$ N* R可以用quickbms制作,在论坛检索一下即可。
作者: canmover    时间: 2010-6-6 22:36
再往上还有个问题,麻烦看一下。7 ^! e8 h# A; Q6 j6 b
quickbms用的是专有语言?还是其他通用语言?
作者: naptid    时间: 2010-6-6 22:55
利用quickbms解包,大概就是将文件包分析后,将其结构写成quickbms可识别的格式文件,程序会自动根据格式文件读取偏移还原文件名并解包文件,自定义格式文件的编写有点类似python,我没学过编程,不知这么解释对不对。
作者: shane007    时间: 2010-6-6 22:58
引用第10楼canmover于2010-06-06 22:36发表的 : ) Q2 v" p" Y2 j) L
再往上还有个问题,麻烦看一下。 ( M1 l1 d4 q" W
quickbms用的是专有语言?还是其他通用语言?
: P+ U* N5 z7 F& }+ h

7 E8 H8 ]/ J: j嗯,好的。上面那个问题我看一下明天告诉你。/ \5 s0 \* V, C/ d4 v9 S
要是我忘了请提醒我。5 R5 _- {0 O/ U: m2 U  X
5 u0 L7 O6 B4 }
quickbms是老外开发的一个制作解包器的工具,他们自己定义了一种bms脚本语言。9 P1 P$ n0 R$ r. f! L7 G
工具本身是c开发的. 用它做解包器很方便的。
+ C4 N" c: l# g5 G; H) o. Y/ N
$ I( Q' ]" s+ h4 T4 h  X你可以看看这里,官网,有好多例子的。; ^0 q( r; k$ s6 Y- J/ L
http://aluigi.altervista.org/papers.htm
作者: canmover    时间: 2010-6-7 14:39
标题: 回 12楼(shane007) 的帖子
我分析了下这个小游戏,试着写了个BMS文件。文件是解出来了,但无法打开。后来想到了偏移不对应问题,bms是按理论偏移解包的,所以会出问题。原来文件ID是RES,三个字节,我在后面加了个空格,并修改BMS文件。这样理论偏移与实际偏移就对应上了。然后问题解决。8 c7 l; H+ w8 w" n" j4 K* F
我就不明白,打包时时为什么要偏移不匹配呢?这是不是个常见问题?
作者: shane007    时间: 2010-6-7 17:13
引用第11楼naptid于2010-06-06 22:55发表的 : 5 e' P( d- H% ^8 p5 K; p
利用quickbms解包,大概就是将文件包分析后,将其结构写成quickbms可识别的格式文件,程序会自动根据格式文件读取偏移还原文件名并解包文件,自定义格式文件的编写有点类似python,我没学过编程,不知这么解释对不对。
* A+ J/ ]% N& z9 S. K% C2 v
2 q3 K1 G" t) ]8 _' p) d
可以这样理解,把bms是当成一种新的语言,quickbms就是运行这种语言的环境。
% V. ?3 e. \. i) e0 t. I5 z3 U3 Y5 Q这种语言针对文件的解包定义了一些函数。我们分析完包文件的格式以后,针对特定格式来编写.bms脚本,- n2 }3 M3 q, d' R6 N
然后放在quickbms环境下运行,quickbms充当了1个命令解释器。
作者: shane007    时间: 2010-6-9 07:53
昨天有点事,今天晚上看一下。
作者: shane007    时间: 2010-6-9 23:30
我看了1下,的确偏移量是差了1个字节。. q( @9 X4 n# V, K* H5 r
既然每个文件的偏移量都多算了1字节,游戏在读取文件的时候自然都会减去1个字节。! M# ?' F/ y8 P$ U
也许作者就是故意这么安排的。




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