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

汉化资料 关于静物2的分析

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

[汉化资料] 关于静物2的分析

跳转到指定楼层
楼主
发表于 2010-3-28 11:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

关于静物2的分析

00403CE0  |> /3B96 10110000    /cmp edx,dword ptr ds:[esi+1110]
2 m7 [) ~: A4 s0 n" `! w00403CE6  |. |1BC9             |sbb ecx,ecx
  A3 c3 z, }8 ^5 T7 j00403CE8  |. |23D1             |and edx,ecx
: a/ p( l0 y& {$ ?" o7 G& U00403CEA  |. |8B8E 0C110000    |mov ecx,dword ptr ds:[esi+110C]5 X/ y, {$ D& J  P; i' ^1 Z/ I4 V
00403CF0  |. |8A0C0A           |mov cl,byte ptr ds:[edx+ecx]
% B3 P6 T+ J; y; c) |, ]# u00403CF3  |. |3008             |xor byte ptr ds:[eax],cl                   ;  这个循环就是异或算法; s5 S8 f. V. U4 |
00403CF5  |. |83C2 01          |add edx,1
6 R7 J2 p! J1 j8 C" M, a00403CF8  |. |83C0 01          |add eax,1$ ]$ A, C" k6 O1 K  U
00403CFB  |. |83EF 01          |sub edi,1
& ~) \7 i  |" w; L00403CFE  |.^\75 E0            \jnz short SL2.00403CE0
0 M2 f# K" n( L  x$ R+ e  D" R& y' X6 P! v: q9 `1 \
+ w3 G6 }( ~0 o- `
00401A42  |.  8D4C24 18        lea ecx,dword ptr ss:[esp+18]# d/ z& Q+ u$ D+ ?& k+ e( r
00401A46  |.  51               push ecx
5 v+ S9 M$ f5 |6 Y00401A47  |.  8D4C24 24        lea ecx,dword ptr ss:[esp+24]
6 g7 S* q3 p2 G% _" I' G00401A4B  |.  C68424 58110000 >mov byte ptr ss:[esp+1158],1& Y; W; u2 P% E2 R  V, @  W
00401A53  |.  C687 08010000 00 mov byte ptr ds:[edi+108],0) {3 }7 }5 A) z
00401A5A  |.  E8 51240000      call SL2.00403EB0                           ;  读取字体函数的开始四个字节8 @3 C2 F: G2 F& k: w
00401A5F  |.  817C24 18 474D47>cmp dword ptr ss:[esp+18],42474D47          ;  此处可判断出开始的四个字节应该是魔幻数2 z# J0 p9 t: g; |
+0 魔幻数% |/ o& I8 G) i9 q9 \+ t) w
+4 段数,  t, c/ T: o. V$ W# |
下面开始是每段的头部
& b# }/ E4 c' `- `; @, W+46EE 正文
: H6 p: K. ]$ C0 d2 U5 S0 E% E" t, f% ]  l* j9 p: @9 d: D
0203DDE0  2F 45 58 54 44 41 54 41 53 46 4F 4E 54 2F 41 52  /EXTDATASFONT/AR6 \3 E+ Q3 i" ~; ~
0203DDF0  49 41 4C 20 31 31 2E 45 4E 00                    IAL 11.EN.4 e3 R( K, \* t7 s* T$ {
2 g1 U6 v" H, ~8 }
0203DEE0              75 16 00 00 (EE 46) 00 00 2F 45 58 54      ..頕../EXT5 t* V) p3 K. V$ ~) V- x
0203DEF0  44 41 54 41 53 46 4F 4E 54 2F 41 52 49 41 4C 20  DATASFONT/ARIAL
0 }+ H2 ~, T* h' S; Q8 G0203DF00  31 32 2E 45 4E 00                                12.EN.
9 c- j2 G5 _. ~# I
9 s0 g# {% e; Y* B/ P2 C! w  }2 t9 r上面表中的数据除了括号中的(EE 46),其余全部与解包后文件数据一致,8 x# R6 ~" I( k" X0 b  {% j% B
1675是这个段的长度,46EE是这个在文件中的偏移,每段偏移值的算法如下:
3 e1 M- `, h2 l) J1 J% x- V0 |+ p) O
00401AE0  |> /899401 08010000  /mov dword ptr ds:[ecx+eax+108],edx         ;  edx=46ee
" ^% z0 S* \( ~! ]- E00401AE7  |. |8B06             |mov eax,dword ptr ds:[esi]                 ;  [esi]存放读取字符的地址, Y- N; G: v7 U
00401AE9  |. |039401 04010000  |add edx,dword ptr ds:[ecx+eax+104]
: B7 e2 ~) u; L00401AF0  |. |83C3 01          |add ebx,1
- n( |/ k" i9 H& j2 B( M& F( Y3 K* D/ [0 B00401AF3  |. |81C1 0C010000    |add ecx,10C0 {, i/ R: S+ ~
00401AF9  |. |3B5C24 14        |cmp ebx,dword ptr ss:[esp+14]              ;  [esp+14]=1C29 p; N, [! |8 F) c: W( S
00401AFD  |.^\72 E1            \jb short SL2.00401AE0
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

沙发
发表于 2010-3-28 11:32 | 只看该作者
首先对楼主的大力支持表示非常感谢!; N& D! y' d0 R; l: h5 N4 f
想问一下,通过以上分析,能得出什么阶段性的结论吗?
回复 支持 反对

使用道具 举报

板凳
发表于 2010-3-28 11:34 | 只看该作者
或者说是否已经可以把字体文件的结构写出来了?
回复 支持 反对

使用道具 举报

地板
 楼主| 发表于 2010-3-28 12:06 | 只看该作者
Sl2fnt.dat文件格式分析如下:3 E" c( a. G5 n3 y" M/ q
+0 474D4742  这个魔幻数
; A7 L- f1 w# S7 @
5 o1 k7 {; m; ^. G+ t. I8 Z, C' K+4 C2010000  表示有01C2个文件
" d4 a9 D: |: |0 X0 O5 Y% y* A) i, c* |
+8 2F4558544441544153464F4E542F415249414C2031312E454E00
2 H% {. C0 C# ~7 D( |/EXTDATASFONT/ARIAL 11.EN.u
! v& q1 I$ {  v8 U3 e3 g& b( Q7 a这个应该是文件头部,ARIAL表示字体,EN表示英语 11表示字号  J6 |0 ~1 H5 E; y4 a5 C+ ~
0 K7 w; g" u7 A
   751600 表示这个文件的大小
4 P0 B5 I: x4 w5 _( |5 Y
" G* {# i3 x# ]; E: O每个文件的偏移由上文中的最后那个函数得出
& a6 d! W* n9 P0 L1 n! p
; Z) s, l9 N5 ^" s+ e
" U; Z) ^. L# T4 W% y- E) R% w+46EE 此处开始是每个文件的正文4 x/ d& f  j  T/ L0 C, P( l

4 G2 y9 V$ K5 o+ z: ~如上面我举的这个例子,文件正文内容起始地址+46EE,; h8 K$ u) m& E
结束地址为+(46EE+1675)
回复 支持 反对

使用道具 举报

5#
发表于 2010-3-28 12:11 | 只看该作者
这个其实不用分析,这个dat是个包文件,已经有解包器了啊。
- [5 G2 C: [$ k# \% f需要分析的是里面解出来的字体文件。字体文件的magic number是XCPK.' F# W- w) q' I( Z( ?/ O
$ v/ d  q6 [) @
我想知道XCPK文件的结构。
回复 支持 反对

使用道具 举报

6#
发表于 2010-3-28 12:16 | 只看该作者
http://aluigi.altervista.org/papers.htm
% Y* n. b& g6 [9 Y! k; @& ]% [: }) z1 E4 T) x2 w1 g
这里有stilllife2 dat文件解包器,配合quickbms使用
回复 支持 反对

使用道具 举报

7#
 楼主| 发表于 2010-4-1 10:58 | 只看该作者

回 楼主(jinxin8866) 的帖子

写屏函数:- Z/ _8 }3 _4 T2 I# f- d
02A0EA4C  |> /8B00        |/mov eax,dword ptr ds:[eax]
4 r2 h, f. O3 q- g02A0EA4E  |. |0FB70450    ||movzx eax,word ptr ds:[eax+edx*2]                    ;  [eax+edx*2]存放字符的UNICODE码3 k7 n; y! k' S6 c+ `# }
02A0EA52  |. |8B7C24 14   ||mov edi,dword ptr ss:[esp+14]! L' D! Z+ L5 B0 x5 g) F$ e* i3 a
02A0EA56  |. |8B7F 2C     ||mov edi,dword ptr ds:[edi+2C]% k/ Q$ r5 c. \3 ?. h8 z
02A0EA59  |. |8D04C0      ||lea eax,dword ptr ds:[eax+eax*8]3 ^4 c) J5 r7 j" v: u
02A0EA5C  |. |8D0487      ||lea eax,dword ptr ds:[edi+eax*4]                     ;  eax存放字符编码表" }, l8 }+ E) V2 H+ {1 S, E7 A
每个字符码表占24(16进制)个字节
" j; V) R& [- Q$ M02A0EA5F  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]2 c: t& P4 m) i: g+ `. i' K
02A0EA63  |. |8D7C39 14   ||lea edi,dword ptr ds:[ecx+edi+14]                    ;  edi就是显存地址
. y! S( b/ a$ [- h! J02A0EA67  |. |D940 04     ||fld dword ptr ds:[eax+4]
% d! o/ M3 {& R: K9 Z. D2 c1 x02A0EA6A  |. |83C2 01     ||add edx,1                                              字符个数加一; i3 D& U) l2 N, @' }& b9 U$ y
02A0EA6D  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]2 E. R# H9 ~* K/ l
02A0EA71  |. |D900        ||fld dword ptr ds:[eax]
& r+ }9 d8 Y* x* s9 x$ X" n02A0EA73  |. |D91F        ||fstp dword ptr ds:[edi]                              ;  edi就是显存地址2 U* P0 F* i2 I4 g2 d7 @- G+ _
每个字符占1C个字节,最后的四个字节都是一样的,可以认为是结束标志
: {1 d! L5 E  X5 @. H02A0EA75  |. |D94424 30   ||fld dword ptr ss:[esp+30]2 J4 ?6 [4 d" i/ U5 s. B: U6 y
02A0EA79  |. |D95F 04     ||fstp dword ptr ds:[edi+4], _5 T, w* M2 t: U( H# C
02A0EA7C  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]
5 |2 _# r2 I7 V9 r+ w02A0EA80  |. |D940 04     ||fld dword ptr ds:[eax+4]
) c/ G  j1 D0 g: y. ~) ^02A0EA83  |. |8D7C39 30   ||lea edi,dword ptr ds:[ecx+edi+30]
; o, c0 E& I$ V0 `02A0EA87  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]( S1 L1 q1 J7 P6 w, R. L
02A0EA8B  |. |D940 08     ||fld dword ptr ds:[eax+8]
5 B  C0 P2 e, f. P02A0EA8E  |. |D91F        ||fstp dword ptr ds:[edi]
/ W$ K2 o6 l9 P. P3 J5 ^02A0EA90  |. |D94424 30   ||fld dword ptr ss:[esp+30]  C, j0 L* [: [
02A0EA94  |. |D95F 04     ||fstp dword ptr ds:[edi+4]' F6 Q$ d5 M4 [! V
02A0EA97  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]$ i! W# k$ f3 Q/ L, G
02A0EA9B  |. |D940 0C     ||fld dword ptr ds:[eax+C]+ b/ I! z* T9 t7 D6 @
02A0EA9E  |. |8D7C39 4C   ||lea edi,dword ptr ds:[ecx+edi+4C]5 T# f8 r; ~  F8 `9 I, j
02A0EAA2  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]
5 y; t4 b2 d1 X) i0 r1 [$ r+ A$ F02A0EAA6  |. |D900        ||fld dword ptr ds:[eax]1 A% n0 I- p* ^) l( @% C. \
02A0EAA8  |. |D91F        ||fstp dword ptr ds:[edi]/ c: }/ P% `! A1 c* ~, q
02A0EAAA  |. |D94424 30   ||fld dword ptr ss:[esp+30]
% |! c+ l1 |  d$ P+ F2 c6 |" \02A0EAAE  |. |D95F 04     ||fstp dword ptr ds:[edi+4]
  i0 h1 x' B0 q6 c02A0EAB1  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]  C3 `1 \3 X! p. M* b
02A0EAB5  |. |D940 0C     ||fld dword ptr ds:[eax+C]
: S! q+ \6 \/ ~+ _02A0EAB8  |. |8D7C39 68   ||lea edi,dword ptr ds:[ecx+edi+68]
5 u) h' ^# m9 Y) g4 V$ i02A0EABC  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]) ~0 ~7 l8 _& Y6 O; F
02A0EAC0  |. |83C1 70     ||add ecx,70" a( ~9 e: _- H5 q8 c
02A0EAC3  |. |D940 08     ||fld dword ptr ds:[eax+8]6 g, Y1 }# Q8 b5 e1 [
02A0EAC6  |. |D91F        ||fstp dword ptr ds:[edi]
4 e3 Y" ~: y/ I& X+ ^02A0EAC8  |. |D94424 30   ||fld dword ptr ss:[esp+30]
9 n7 Q- h8 S7 d+ {/ i/ s02A0EACC  |. |D95F 04     ||fstp dword ptr ds:[edi+4]
( f! [8 P3 H6 W& _$ z02A0EACF  |. |8B46 58     ||mov eax,dword ptr ds:[esi+58]* i" D1 i% R1 O5 A. o2 c5 z
02A0EAD2  |. |03C3        ||add eax,ebx
& D: p! r/ I# P# v. F6 h02A0EAD4  |. |3B50 08     ||cmp edx,dword ptr ds:[eax+8]
0 z1 m9 R) |2 [02A0EAD7  |.^\\0F8C 6FFFFF>|\\jl xcDxShad.02A0EA4C& K# d4 _) Y6 {2 r5 h: N" T

6 U8 w$ F* s% ?& }' D- v; `本游戏字符编码采用UNICODE,
( t/ |" M1 n% X! _) Z& \3 ]& K对字符码表的操作:, x. C8 \' A& m5 v+ I
10028807  |> /0FB702      /movzx eax,word ptr ds:[edx]        读字符的UNICODE码
4 n$ R1 m& D! ~9 [5 a$ u2 L1002880A  |. |8D04C0      |lea eax,dword ptr ds:[eax+eax*8]
' q( r( B. l% {, s" H* v1002880D  |. |8D0483      |lea eax,dword ptr ds:[ebx+eax*4]   根据UNICODE码求得字符码表的地址: `8 F' `- f& }( c$ @% O
10028810  |. |33C9        |xor ecx,ecx
( v' }5 @* i# [$ C10028812  |. |DB40 20     |fild dword ptr ds:[eax+20]. f" Y3 i/ a5 ^% g8 O, j
10028815  |. |D95C24 14   |fstp dword ptr ss:[esp+14]
1 g2 d2 f; V- Z0 D# A8 ^10028819  |. |D94424 14   |fld dword ptr ss:[esp+14]
% U- D% c" n& K6 E" D1 z- a1002881D  |. |D9C0        |fld st; m: a# B2 V9 R. B) I2 @5 p
1002881F  |. |D84E 14     |fmul dword ptr ds:[esi+14]) p3 O2 N  H( e1 m5 U) T, p8 H/ |) A
10028822  |. |D94424 0C   |fld dword ptr ss:[esp+C]
# z* ^4 r+ g4 p% E9 M10028826  |. |D9C0        |fld st
: n% n( J4 f4 i10028828  |. |DEC2        |faddp st(2),st7 W) g1 U  J7 {. u( {  U  D
1002882A  |. |D9C9        |fxch st(1)( v: P9 K" L% K; O
1002882C  |. |D95C24 14   |fstp dword ptr ss:[esp+14]
3 o, A7 J7 R! X0 X10028830  |. |D8D3        |fcom st(3)
9 Q. K6 ]6 {. \3 ?& `' ?10028832  |. |DFE0        |fstsw ax0 v1 _6 @5 a' [. s3 n0 N
10028834  |. |F6C4 01     |test ah,1
/ x8 h! C& [5 i  ^3 w8 s10028837  |. |74 2B       |je short xcEngine.10028864
0 l+ K* b6 \1 r! q/ A* G8 d10028839  |. |D94424 14   |fld dword ptr ss:[esp+14]8 s( @  N$ X/ Z# B8 Z: F+ ?
1002883D  |. |D8D3        |fcom st(3)
$ \: f; i) t+ ?( U1002883F  |. |DFE0        |fstsw ax
) Y6 L. H" U5 Q! ?, Y7 V10028841  |. |F6C4 41     |test ah,41
5 o+ r: j  c+ Y: m10028844  |. |7A 04       |jpe short xcEngine.1002884A' J! L& T( w# c, x6 q* d
10028846  |. |DDD8        |fstp st
5 E7 Q+ {+ p5 q" }6 M& Q3 f# i10028848  |. |EB 1A       |jmp short xcEngine.100288649 U* G% v( O5 v, x
1002884A  |> |D9C9        |fxch st(1)
$ P$ d: Z0 f, \2 g1002884C  |. |D8D3        |fcom st(3)% K/ X- Y5 S( c- A" m* v' t
1002884E  |. |DFE0        |fstsw ax" t* w, z# A4 L. |7 ]2 i
10028850  |. |F6C4 05     |test ah,5. T" I0 w- p4 w( H5 f
10028853  |. |7A 04       |jpe short xcEngine.100288591 H+ }1 s( z: N$ N9 o
10028855  |. |DDD9        |fstp st(1)
5 }2 e* E; X+ Z, n, s8 q. c/ d5 f10028857  |. |EB 0B       |jmp short xcEngine.10028864
- f2 r* n) L" [2 |' V2 z/ P10028859  |> |D9C9        |fxch st(1)
- }/ C9 s: ~5 ~# k* q+ Q% q1002885B  |. |D8DC        |fcomp st(4)
, z0 K0 r4 T% @1 H" D1002885D  |. |DFE0        |fstsw ax
: y! W+ J; c. V1 C1002885F  |. |F6C4 41     |test ah,41
/ I! o3 a3 R- P+ w10028862  |. |75 05       |jnz short xcEngine.100288697 b& z. j' A$ h, y# v& M
10028864  |> |B9 01000000 |mov ecx,15 K# Y4 |8 \& c
10028869  |> |85C9        |test ecx,ecx
2 z) k6 K, G3 L: m# t1002886B  |. |8B4424 18   |mov eax,dword ptr ss:[esp+18], a4 [) o: z0 I. h- p1 ?$ s
1002886F  |. |D940 14     |fld dword ptr ds:[eax+14]
- a# N/ R: `: G6 o10028872  |. |DECA        |fmulp st(2),st
% J" M" J8 b* G10028874  |. |DEC1        |faddp st(1),st' |6 u  w1 ^5 `8 I- I8 T$ M
10028876  |. |D95C24 0C   |fstp dword ptr ss:[esp+C]( u$ j8 l3 \+ W7 C6 p9 @" q
1002887A  |. |75 05       |jnz short xcEngine.10028881
# s/ u4 e3 `1 q1002887C  |. |834424 10 0>|add dword ptr ss:[esp+10],1
. X9 X/ ~) h. S% Z10028881  |> |83C2 02     |add edx,2
9 u* N" q( g. U8 a( R) j& _10028884  |. |83EF 01     |sub edi,1$ M. ?7 I& O5 n0 ]! H# p
10028887  |.^\\0F85 7AFFFF>\\jnz xcEngine.10028807
* ^2 g+ [) S! P4 r由于算法采用了浮点数指令,本人不太懂,边学习边研究中。。。。。。。。。
回复 支持 反对

使用道具 举报

8#
发表于 2010-4-1 11:13 | 只看该作者
加油!UNICODE码内核的游戏?
* J/ I( o" d- o/ Z  l看来汉化有希望啊。
回复 支持 反对

使用道具 举报

9#
发表于 2010-4-1 11:17 | 只看该作者
只要知道游戏读取字符图片以后,以何种格式,放到哪个内存地址。8 A; {3 ]" e' V, g, {( U
即使我们无法解压字库,也可以通过内挂一个DLL,传入字符编码,把我们自己的字符图片写入对应的内存地址。从而达到汉化的目的。
回复 支持 反对

使用道具 举报

10#
 楼主| 发表于 2010-4-2 09:48 | 只看该作者

回 8楼(shane007) 的帖子

找到了内存中字库的地址,可在下面这个位置下断,
# ^0 p3 F$ t( d0 Q, v% n: y% E' N2 F) `. J) l- p
02A0EA5C  |. |8D0487      ||lea eax,dword ptr ds:[edi+eax*4]                     ;  eax存放的就是字库的地址
2 E" H* ]" U' [( x1 u这个字库不是点阵的,经过修改,字符的形状可发生变化,应该是矢量字库
回复 支持 反对

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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