冒险解谜游戏中文网 ChinaAVG

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

作者: shane007    时间: 2008-10-30 19:43
标题: 【汉化资料】游戏包文件结构分析(2)
5.第二个例子——一个小游戏的包文件格式
7 s+ c' R& Z) ]4 E) k7 v. u
, ^/ v& P7 J- z$ F下载地址:http://www.lanqie.net.cn/html/benzhanzuopin/20070604/43.html AAAKK版. [- @2 T$ F& s" ~

, {  Y2 H4 Y* s4 _, p, v% [包文件是安装文件夹中最大的文件Game.dat。  v! S/ Y9 {1 B5 n0 n, \% G: [6 J3 Z

' t9 }) E0 T: R4 k% `- A/ x这个格式用到了简单的异或加密,但是文件索引表非常简单,因为没有文件夹格式。6 \# T6 v  U0 l& o- R
* |8 Y, J8 t( G. U' u) P- o, N
打开文件,发现有一些文件名(1.BMP,1.WAV),而且每两个文件名的开头间隔一样,说明文件索引长度固定,为28。可以看到文件名占20字节,文件名的空白用空格(0x20)来填充。每两个文件名之间还有8个字节,即两个Int32。可以估计其中一个是文件位置,另一个是文件长度。. I" e% s! g4 b& w0 J) B* W. d

9 L1 j* T- s  `% j/ B图2 Game.dat文件头
. m* d2 o! N! C- o00000000h: 52 45 53 59 00 C2 09 00 00 88 47 03 00 4E 55 4D ; RESY.?..圙..NUM
1 Z3 j" b3 t3 _$ T- d00000010h: 2E 42 4D 50 20 20 20 20 20 20 20 20 20 20 20 20 ; .BMP            
7 d' |: A: e( l0 B00000020h: 20 4B 51 03 00 C2 58 01 00 31 2E 42 4D 50 20 20 ;  KQ..耎..1.BMP  
3 H; _, I  ^) W3 d' G& |! @$ ?00000030h: 20 20 20 20 20 20 20 20 20 20 20 20 20 0E AA 04 ;              .?
; B+ m) N' D! _: o* j+ H% T00000040h: 00 2A 20 00 00 31 2E 57 41 56 20 20 20 20 20 20 ; .* ..1.WAV      
& b. o/ }- X$ t; e# v00000050h: 20 20 20 20 20 20 20 20 20 39 CA 04 00 C0 58 01 ;          9?.繶.
+ g9 E3 Z5 {' \( [7 [( T5 [8 o00000060h: 00 32 2E 42 4D 50 20 20 20 20 20 20 20 20 20 20 ; .2.BMP         
5 a0 U$ P5 K$ [7 j00000070h: 20 20 20 20 20 FA 22 06 00 D8 AF 02 00 32 2E 57 ;      ?..丿..2.W
* T2 ]+ b2 I& M1 U00000080h: 41 56 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ; AV              ' |' U5 a/ N% C1 p, A- ]" E% p
00000090h: 20 D3 D2 08 00 C0 58 01 00 33 2E 42 4D 50 20 20 ;  右..繶..3.BMP  
7 Y( x. g- }, r% m& _000000a0h: 20 20 20 20 20 20 20 20 20 20 20 20 20 94 2B 0A ;              ?.
3 k. u' u4 ?; K- M- U000000b0h: 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发表的 :
( w/ j  P, u  G/ B* V6 t4 y4 Z本人菜鸟,即两个Int32是什么意思?
) X; V5 }6 ^5 v) O; h8 a
0 s9 y( H( P1 I- {* L
2个32位整形的,每个4bytes,共8bytes
作者: shane007    时间: 2010-6-5 23:55
引用第4楼shane007于2010-06-05 23:54发表的 :
2 g' U  r. \: `- w
% y9 x* l6 ^$ L' `0 E' c, d
  O7 d# w8 M" f7 G4 R2个32位整型,每个4bytes,共8bytes 5 k, @0 P. `8 h7 H0 w7 I' ?0 X: I

作者: keithlong    时间: 2010-6-6 12:44
这个东西看的莫名其妙的啊
作者: canmover    时间: 2010-6-6 21:48
标题: 回 楼主(shane007) 的帖子
有个小问题。 [attach]16358[/attach]
# V0 U, {: p, D% B6 b* E 选中部分为bmp文件的偏移地址,但我转到此处后,发现要比目标地址错后一个 [attach]16359[/attach]。为什么这样呢?程序又是怎么作出减一位的决定的呢?
! A5 h& n4 }. L6 c8 h我下载的是雪豹老虎机,传一张提取出的图片 [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) 的帖子 : " O6 i+ E/ J0 ]. W! W0 w
解包器该怎么做呢?
6 i8 |2 o3 o0 p

, H# m3 T3 s- m8 N7 g* |
, N% N' P2 s7 @$ s0 u+ Y0 y( ~可以用quickbms制作,在论坛检索一下即可。
作者: canmover    时间: 2010-6-6 22:36
再往上还有个问题,麻烦看一下。
9 ~3 d5 y2 b/ O% c/ Rquickbms用的是专有语言?还是其他通用语言?
作者: naptid    时间: 2010-6-6 22:55
利用quickbms解包,大概就是将文件包分析后,将其结构写成quickbms可识别的格式文件,程序会自动根据格式文件读取偏移还原文件名并解包文件,自定义格式文件的编写有点类似python,我没学过编程,不知这么解释对不对。
作者: shane007    时间: 2010-6-6 22:58
引用第10楼canmover于2010-06-06 22:36发表的 : 9 C- e. }& }& J1 M3 _  f$ u) |
再往上还有个问题,麻烦看一下。 , n- W% D: A% G0 }
quickbms用的是专有语言?还是其他通用语言?
8 C1 K- e6 B( i' H0 l+ F+ {4 q
1 n' P# d$ Z9 m$ g) ^  m8 B% g0 y
嗯,好的。上面那个问题我看一下明天告诉你。" ?( ~# a, f# ]
要是我忘了请提醒我。
- c4 e- r( ?$ \  d# v! J0 v; }/ [  m' Z# D2 x( X7 [/ ~
quickbms是老外开发的一个制作解包器的工具,他们自己定义了一种bms脚本语言。5 h# s( S  ?7 v
工具本身是c开发的. 用它做解包器很方便的。! ^/ g% K. Y% f% D: F

4 u; d, W+ X6 |& }- R. [) t; s你可以看看这里,官网,有好多例子的。! j# N  Q. B# Q' q, T9 l" l1 \# M* ]
http://aluigi.altervista.org/papers.htm
作者: canmover    时间: 2010-6-7 14:39
标题: 回 12楼(shane007) 的帖子
我分析了下这个小游戏,试着写了个BMS文件。文件是解出来了,但无法打开。后来想到了偏移不对应问题,bms是按理论偏移解包的,所以会出问题。原来文件ID是RES,三个字节,我在后面加了个空格,并修改BMS文件。这样理论偏移与实际偏移就对应上了。然后问题解决。
0 S3 i6 z; d, e: q我就不明白,打包时时为什么要偏移不匹配呢?这是不是个常见问题?
作者: shane007    时间: 2010-6-7 17:13
引用第11楼naptid于2010-06-06 22:55发表的 : 1 _9 v8 h  h/ W/ g! |
利用quickbms解包,大概就是将文件包分析后,将其结构写成quickbms可识别的格式文件,程序会自动根据格式文件读取偏移还原文件名并解包文件,自定义格式文件的编写有点类似python,我没学过编程,不知这么解释对不对。

" s7 C- `: u4 i9 D. v2 z
' ]3 P0 ]3 Z: n+ E0 ]& F" Z可以这样理解,把bms是当成一种新的语言,quickbms就是运行这种语言的环境。
: g9 ~+ P0 e) B2 M; L7 Z. c, v" i" f/ @这种语言针对文件的解包定义了一些函数。我们分析完包文件的格式以后,针对特定格式来编写.bms脚本,( C- ?& I3 e  K. J3 V) G
然后放在quickbms环境下运行,quickbms充当了1个命令解释器。
作者: shane007    时间: 2010-6-9 07:53
昨天有点事,今天晚上看一下。
作者: shane007    时间: 2010-6-9 23:30
我看了1下,的确偏移量是差了1个字节。
/ F- T5 A7 @9 K( `) u4 d既然每个文件的偏移量都多算了1字节,游戏在读取文件的时候自然都会减去1个字节。
+ z1 c: h$ F* l/ H也许作者就是故意这么安排的。




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