冒险解谜游戏中文网 ChinaAVG
标题:
CSI:NY包文件格式初步分析
[打印本页]
作者:
深绿
时间:
2010-2-27 17:55
标题:
CSI:NY包文件格式初步分析
要制作打包器,先得分析包文件格式,对CSI:NY的包文件格式初步分析如下:
& b }& d" P% T9 E- D% U( W# f
) R5 J7 h. K/ n8 _" V
包文件,可以分成三部分:
$ k5 i9 ~& S$ @& O) C& o2 \
1、文件头,0x00~0x0B,12个字节
# R- D1 }& Z% ?: I1 {8 P1 f
0x00~0x08 头部标识,8字节,为475246050146524700719CAA ,“GRF FRG”
* j& }9 Z1 B1 }' U/ [5 v
0x08~0x0B 文件名表偏移量 4字节
" V% t+ n$ [7 @1 z- ]
/ ~( O( _. J& j: a7 l
2、数据块
' w8 R2 ] \0 Q& I) }( J
N个zlib压缩的数据块,依次存放
4 C+ J, v1 c6 e: i
( P6 D) D+ n& ?& z
3、zlib压缩过的文件名表
* X$ U5 b2 @4 ?) c) `6 u H
& q! B8 d. c0 q, ]/ P2 I
——————————————————
. |2 Z5 F1 y9 A: o
对于解压后的文件名表,可以分成两部分:
* i. T) N8 a" v$ L/ `" |/ t `6 i0 R
1、文件头,0x00~0x0A 10个字节
6 M# X5 J& s t0 r, p4 _" m
0x01~0x06 头部标识,6字节,为05000174734C,“ tsL”
2 F# x& h- ~+ U" f/ f2 d3 U8 E
0x06~0x0A 文件数量,4字节
. i- s/ K/ n: s/ f; B! r3 l% q
; k ~0 O) o: a; o
2、文件数据
x8 a L7 o m( I
每一个文件的数据又如下
0 R! ^' m: l0 H) |) x' h% [
0x01~0x05 未知,估计可能是序号之类 5字节
8 X, U5 Z7 o4 ~% q
0x06~0x0E 标识符,8字节,为0145495201727453,“ EIR rts”
% _( y1 w' y4 k/ C5 J/ c
0x0F~0x13 文件名长度N 4字节
3 n! {+ o3 _9 U# w7 E9 N$ D R
N字节 文件名
4 q1 W; @# N. `7 {9 N A8 |
4字节 偏移量,即该文件压缩后的zlib块在包文件中的位置
* {/ g) v) i) z" m* P# g6 w% ]
4字节 文件大小(压缩前,即原始大小)
( r, Y; g' \9 F4 p! L( L1 {7 B
1字节,结束符 0x01
1 k, @# S( r; ?, G0 R8 H
: X# a, e4 p* A3 t. g
——————————————————
6 I8 A" x3 g" Z" o5 m
那么,如果替换包文件中的文件,已知需要修改的地方有:
; ?! L) L2 x: r* O' A
包文件头的文件名表偏移量;文件名表中偏移量、文件大小。
/ H' g8 H- j# M
0 c( @% e! }0 V4 g; B5 ~0 D; X9 ~
基于以上分析,我手工制作了一个新的包文件,用一个中文字体ttf文件替换掉包里的一个ttf文件,同时修改以上部分。修改后的包文件用老外的解包工具解包后就可以得到原来的资源文件和那一个替换后的ttf,所以上述几个部分的修改应该没有问题。
; g+ M8 a4 E3 i% A ]- o# u
4 j7 j4 k' K% a
但是将这个包文件替换到游戏里,游戏无法运行。所以猜测包文件中还有地方需要修改,根据以上分析,最有可能就是文件名表每一个文件的头5个未知字节。
& Z9 |& {. g3 O6 L3 d _
' n) H8 Q2 r; G' v
按顺序提取一些文件的这5个字节,同时计算其数值差,如下:
5 I8 c7 y4 u/ Q4 L
003AD140.temp —390— 003AD4D0.png —20—
* k' `' L4 R( T! O% Q0 ? Q
003AD4F0.png —50— 003AD540.emi —50—
* J, }, M& r1 _8 @
003AD590.png —80— 003AD610.png —68—
S: k9 i) \- V5 W- e
003AD678.ttf —68— 003AD6E0.ttf —68—
) n# k( f6 d* y" P
003AD748.png —50— 003AD798.anim
6 k7 c4 }. B% q( l% j% ~) k
6 ]9 ~/ y5 v; ^. @" N% U
00547718.png —68— 00547780.jpg —68—
0 ?+ r9 G+ ^: S) {7 M* I
005477E8.png —68— 00547850.jpg —68—
" ~4 R- `' q! X9 Y. h
005478B8.png —80— 00547938.theme
% v; V, J D. t; W# g
. Y7 G" M% ?% D/ n+ ^
可以观察到,这些数值之差几乎都是几个恒定的值,0x80、0x68等
% X1 x2 d% f. D
本来猜测是根据文件格式不同而产生不同值,但注上格式后查看似乎和文件格式没什么关系
; W( ?3 y' i+ X$ o% F' u$ {
——————————————————————————————————————————
9 _: c6 V$ z5 r( r
目前的分析就到这儿,先写出来,各位高手如有相关心得,万望不吝赐教
( g" f/ L& ~: {6 G
/ a; m& h; u4 O* h5 s T3 E
另外写了个根据修改后的文件改写文件名表中各数据的小程序,不过手工都还没成功,暂时先搁着吧....
) @# G# \; N; }+ X& d- D
5 _) G' N: W% @
——————————————————————————————————————————
6 m1 u; `5 N2 D) N: E( R0 y$ ]: n' H
10.02.28更新:
# I- W. x5 h3 a
今天用filemon(现在叫ProcessMonitor了)监视了一下,发现是自己粗心,在修改文件名表的时候漏了一个,改完后可以显示中文。那么上述那5个字节就可以暂时不考虑了。
! n* W2 Z" A0 Q; Q8 A
汉化抓图见帖:
https://www.chinaavg.com/read.php?tid=20946
作者:
shane007
时间:
2010-2-27 20:26
收到,我觉得你这篇分析写得非常地好,结构十分清晰,可以说是一个可以给以后来的新人学习的样板。
5 q4 e+ a" J l2 {: @% [. S/ |" N) S
* c5 B2 E) ]) u" f$ O; `
回到主题,我也觉得那5个字节十分可疑。
( o9 Y, p9 w+ v$ c1 ^$ i6 ?$ _
估计老外的那个解包器没有用到那5个字节,所以解包完全没问题。
5 ?" ? j* b; C' l; p$ c
但是游戏可能用了,所以导致游戏无法运行。
5 G. ~0 u* p# ?1 N% I
如果是这样的话,请你做一个试验,用原版的包文件,挑选文件名表里的一个文件,在那5个字节里,每次修改1个字节,把值增大或减小一点点。测试游戏是否能运行,换不同的位置测试多次。
& S* V3 S+ E( o
如果每次都出错的话说明游戏的确是要用到那5个字节。
% G* m: L! T0 O7 s- x
) V9 B# z3 D: _/ h: A3 D
对了,也许还可以用filemon看看,看看游戏出错的时候,游戏最后读取的偏移量是哪里。
# K/ y |4 T% F/ @; W' V
+ H" O' P9 W6 s
你的差值测试法我没看明白。
; p7 _6 V( o) F% a2 f5 O( l2 f/ n) N
是前后2个文件的这5个字节的数字差还是什么?
+ J: ~& ~, h6 ^# h+ B9 X
比如下面的390和20各代表什么意思?
6 H' x- b% D; g" ~* |
003AD140.temp —390— 003AD4D0.png —20—
作者:
shane007
时间:
2010-2-27 20:28
TO 枫叶
7 a1 V9 v' v6 G( U% \
+ r$ y/ J( O+ ?/ f
我觉得写得这么好这么详细的汉化分析文章以后也应该要加威望。
作者:
深绿
时间:
2010-2-28 14:21
2010.02.28更新
作者:
shane007
时间:
2010-2-28 14:49
恭喜了!
作者:
shane007
时间:
2010-5-5 12:16
顶上来
作者:
shane007
时间:
2010-9-28 07:52
再顶上来
作者:
shane007
时间:
2010-11-29 22:30
再顶上来 1
作者:
shane007
时间:
2011-4-6 08:45
再顶上来 2
欢迎光临 冒险解谜游戏中文网 ChinaAVG (https://chinaavg.com/)
Powered by Discuz! X3.2