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

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

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

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

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

关于静物2的分析

00403CE0  |> /3B96 10110000    /cmp edx,dword ptr ds:[esi+1110]" ~( R+ S9 P: m+ ]2 X
00403CE6  |. |1BC9             |sbb ecx,ecx& n0 U9 }+ V6 t0 z: y8 v
00403CE8  |. |23D1             |and edx,ecx, w: ?3 P4 |& c. X/ X! L, S6 \) ~
00403CEA  |. |8B8E 0C110000    |mov ecx,dword ptr ds:[esi+110C]1 g& M$ x: F: ~, P# [' b1 X) }1 ?/ ~
00403CF0  |. |8A0C0A           |mov cl,byte ptr ds:[edx+ecx]
! B' T  s/ T4 F, u0 \00403CF3  |. |3008             |xor byte ptr ds:[eax],cl                   ;  这个循环就是异或算法
" }1 w. C5 h. S, k3 A00403CF5  |. |83C2 01          |add edx,1
! \7 C& X' Z+ E! Q. i& C  @; p00403CF8  |. |83C0 01          |add eax,1
4 A) y) C" N% B+ h! _: G8 L7 I00403CFB  |. |83EF 01          |sub edi,1
7 k+ F& W1 ?7 \; d& }4 i. F" P4 o! n00403CFE  |.^\75 E0            \jnz short SL2.00403CE0
  J. M" x+ P4 ~; }- |2 |
8 P5 A, W& c+ H* P2 j$ O/ Y1 G( {% K# A3 D" ^8 w- }
00401A42  |.  8D4C24 18        lea ecx,dword ptr ss:[esp+18]$ |/ a4 Z) w- U
00401A46  |.  51               push ecx
7 C0 h+ f; m' I- p00401A47  |.  8D4C24 24        lea ecx,dword ptr ss:[esp+24]7 _- D" W* w" X
00401A4B  |.  C68424 58110000 >mov byte ptr ss:[esp+1158],1
) e9 ~$ V( k- R- N00401A53  |.  C687 08010000 00 mov byte ptr ds:[edi+108],0+ Q" {7 [' L0 }, R6 a
00401A5A  |.  E8 51240000      call SL2.00403EB0                           ;  读取字体函数的开始四个字节; |8 x; }: Q' ?, R7 O7 a2 L# j
00401A5F  |.  817C24 18 474D47>cmp dword ptr ss:[esp+18],42474D47          ;  此处可判断出开始的四个字节应该是魔幻数
4 g' `0 ^: g( O. E+0 魔幻数1 m2 ~1 n$ K) ^3 ~0 \* q# _# N$ g( n2 Z
+4 段数,% L0 I3 E+ x+ m' u7 {. q
下面开始是每段的头部3 _' x7 c. w. v: J3 y" g
+46EE 正文4 f3 g% a. O0 F5 A# S$ X' k
% L9 P( n! T" W  \1 U! H( g
0203DDE0  2F 45 58 54 44 41 54 41 53 46 4F 4E 54 2F 41 52  /EXTDATASFONT/AR
5 |$ W& W1 l/ U& }6 e0203DDF0  49 41 4C 20 31 31 2E 45 4E 00                    IAL 11.EN.
  |! i3 Z( u/ ?+ }2 h  N; @
5 v3 M* i! h8 k6 c: g; S0203DEE0              75 16 00 00 (EE 46) 00 00 2F 45 58 54      ..頕../EXT% }0 }; Q, l/ E# ?' u/ E
0203DEF0  44 41 54 41 53 46 4F 4E 54 2F 41 52 49 41 4C 20  DATASFONT/ARIAL% ]/ k# S* q; P% T
0203DF00  31 32 2E 45 4E 00                                12.EN.
& m1 J) I, v: r; u2 P4 c  h
: I$ q$ B0 D$ X4 u9 ?. l& Z上面表中的数据除了括号中的(EE 46),其余全部与解包后文件数据一致,# i" d% t0 w% E5 `6 G& r" J7 ]
1675是这个段的长度,46EE是这个在文件中的偏移,每段偏移值的算法如下:' ?8 h: e3 L) p- {0 s! o

# Z% s+ ?+ C8 g1 T* ?6 W00401AE0  |> /899401 08010000  /mov dword ptr ds:[ecx+eax+108],edx         ;  edx=46ee
" F2 [6 p' y9 e0 m$ t00401AE7  |. |8B06             |mov eax,dword ptr ds:[esi]                 ;  [esi]存放读取字符的地址  N0 A2 }6 ?/ W+ a0 j$ y* z
00401AE9  |. |039401 04010000  |add edx,dword ptr ds:[ecx+eax+104]; s( Y& I+ f/ S" h2 U
00401AF0  |. |83C3 01          |add ebx,11 ]. \& M0 V8 N7 ^/ v2 ]
00401AF3  |. |81C1 0C010000    |add ecx,10C7 E6 w# S2 I2 o* p3 w; ]! }
00401AF9  |. |3B5C24 14        |cmp ebx,dword ptr ss:[esp+14]              ;  [esp+14]=1C29 d# {8 }8 z+ j; m" d# f
00401AFD  |.^\72 E1            \jb short SL2.00401AE0
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

沙发
发表于 2010-3-28 11:32 | 只看该作者
首先对楼主的大力支持表示非常感谢!9 Q- P, q# E5 U, T5 n/ s. R% J
想问一下,通过以上分析,能得出什么阶段性的结论吗?
回复 支持 反对

使用道具 举报

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

使用道具 举报

地板
 楼主| 发表于 2010-3-28 12:06 | 只看该作者
Sl2fnt.dat文件格式分析如下:) J. h! ?- \2 r
+0 474D4742  这个魔幻数$ {; |  X( y( T) M  `6 @

# Q, w; z8 i& n1 O* V+4 C2010000  表示有01C2个文件5 q; O* R% Q  K2 V! C

  u( s% B' r0 _1 d+8 2F4558544441544153464F4E542F415249414C2031312E454E001 @+ f$ L3 k- n1 H, t
/EXTDATASFONT/ARIAL 11.EN.u3 _* D( A$ _- I
这个应该是文件头部,ARIAL表示字体,EN表示英语 11表示字号6 U9 }4 M5 a/ v% ^
1 W0 J# |8 Q7 |; \5 e1 ~
   751600 表示这个文件的大小5 Z/ X$ Q2 t. Y$ m* Q6 W. m; s
* V! D  x. T' w( m# Z3 q
每个文件的偏移由上文中的最后那个函数得出( B( c6 O, `* t; S

- ^+ J: b: \  k( J6 x4 }
) }- \# y& H: N  g9 i, R! Z+46EE 此处开始是每个文件的正文
, A" h7 h, h% C& U7 ^: ^
. d+ M2 [0 S6 @" E  y如上面我举的这个例子,文件正文内容起始地址+46EE,& b* M/ d5 ~8 p* {
结束地址为+(46EE+1675)
回复 支持 反对

使用道具 举报

5#
发表于 2010-3-28 12:11 | 只看该作者
这个其实不用分析,这个dat是个包文件,已经有解包器了啊。
) O9 G9 z8 l+ }1 m7 F1 Y" f; m需要分析的是里面解出来的字体文件。字体文件的magic number是XCPK.. i6 a+ O0 |" U+ n+ d- s

$ i6 M5 a. |6 Y' E) n我想知道XCPK文件的结构。
回复 支持 反对

使用道具 举报

6#
发表于 2010-3-28 12:16 | 只看该作者
http://aluigi.altervista.org/papers.htm- Q# m) Y* ]! d3 c* ?( D, Z/ ]

5 i- t8 D& W; k; z% K这里有stilllife2 dat文件解包器,配合quickbms使用
回复 支持 反对

使用道具 举报

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

回 楼主(jinxin8866) 的帖子

写屏函数:: Z9 h! j9 f/ b/ u
02A0EA4C  |> /8B00        |/mov eax,dword ptr ds:[eax]
! x0 l. m+ O0 `& M$ r6 M: G5 |02A0EA4E  |. |0FB70450    ||movzx eax,word ptr ds:[eax+edx*2]                    ;  [eax+edx*2]存放字符的UNICODE码. z. O+ M9 P2 }( ~4 R" N
02A0EA52  |. |8B7C24 14   ||mov edi,dword ptr ss:[esp+14]
5 q  F1 |, E9 e; ~% _02A0EA56  |. |8B7F 2C     ||mov edi,dword ptr ds:[edi+2C]
# ~9 K- t& D8 W# g# _/ k' X$ C( g" A02A0EA59  |. |8D04C0      ||lea eax,dword ptr ds:[eax+eax*8]
( E$ t) E7 `' ?. k02A0EA5C  |. |8D0487      ||lea eax,dword ptr ds:[edi+eax*4]                     ;  eax存放字符编码表: j- Q" e8 D3 D- o' S( R, s
每个字符码表占24(16进制)个字节
  A" @" P8 W2 N: @& w& U02A0EA5F  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]- z( z# h/ j* h5 |) {3 s+ i4 H- h
02A0EA63  |. |8D7C39 14   ||lea edi,dword ptr ds:[ecx+edi+14]                    ;  edi就是显存地址! w2 `6 d1 h, B& D* j$ \- z) Q
02A0EA67  |. |D940 04     ||fld dword ptr ds:[eax+4]+ C& H6 i! y% ]9 n1 p) `$ ~
02A0EA6A  |. |83C2 01     ||add edx,1                                              字符个数加一+ U; f  O" Y7 n: x; K) P
02A0EA6D  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]7 O' l; P' ^2 U% E7 f
02A0EA71  |. |D900        ||fld dword ptr ds:[eax]
9 A, p9 Y6 R" ~$ }02A0EA73  |. |D91F        ||fstp dword ptr ds:[edi]                              ;  edi就是显存地址
% a: R" G) X, Z' W每个字符占1C个字节,最后的四个字节都是一样的,可以认为是结束标志0 a3 V; O0 T$ T+ Z
02A0EA75  |. |D94424 30   ||fld dword ptr ss:[esp+30]
8 Q. P1 i$ ^6 ^: K+ P/ @" |  d02A0EA79  |. |D95F 04     ||fstp dword ptr ds:[edi+4]
2 }; M! M' V6 O, K8 U02A0EA7C  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]# K/ A9 @; p9 p
02A0EA80  |. |D940 04     ||fld dword ptr ds:[eax+4]# q$ e, {. k/ c" g
02A0EA83  |. |8D7C39 30   ||lea edi,dword ptr ds:[ecx+edi+30]8 i. W1 K2 e) Z  `% K/ x5 b& [
02A0EA87  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]
: u2 A: _+ D- R+ ?- j1 D, G4 v02A0EA8B  |. |D940 08     ||fld dword ptr ds:[eax+8]/ o! a0 T9 C' R1 L" h) ^9 ?
02A0EA8E  |. |D91F        ||fstp dword ptr ds:[edi]& e7 ~+ c0 O5 i
02A0EA90  |. |D94424 30   ||fld dword ptr ss:[esp+30]
. U7 V% T6 b6 A7 {02A0EA94  |. |D95F 04     ||fstp dword ptr ds:[edi+4]
1 O2 h# f( I* B# Q0 k  B02A0EA97  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]! f% Z1 I3 U0 }5 Z
02A0EA9B  |. |D940 0C     ||fld dword ptr ds:[eax+C]0 t) Q" [0 F: q0 R
02A0EA9E  |. |8D7C39 4C   ||lea edi,dword ptr ds:[ecx+edi+4C]3 s# I, _+ y! _, i$ ~6 g
02A0EAA2  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]
3 N- i3 A4 \) @8 X& I+ w02A0EAA6  |. |D900        ||fld dword ptr ds:[eax]
5 h& _+ t6 r+ f) I02A0EAA8  |. |D91F        ||fstp dword ptr ds:[edi]* m7 n4 r) b* S7 y' g
02A0EAAA  |. |D94424 30   ||fld dword ptr ss:[esp+30]6 Q; u& V9 l2 J
02A0EAAE  |. |D95F 04     ||fstp dword ptr ds:[edi+4]
. H* G2 f' x  F7 Q- ^9 n; a# j02A0EAB1  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]: E5 \8 k, w+ ~5 \9 x! N
02A0EAB5  |. |D940 0C     ||fld dword ptr ds:[eax+C]
( _* B, ~: N0 F- @2 `02A0EAB8  |. |8D7C39 68   ||lea edi,dword ptr ds:[ecx+edi+68]
2 t8 J: n0 S# G+ v% h' x8 A$ i02A0EABC  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]* _& N+ D) M& i; l
02A0EAC0  |. |83C1 70     ||add ecx,70
! N/ b0 z1 r& z8 Z! I02A0EAC3  |. |D940 08     ||fld dword ptr ds:[eax+8]
2 o4 l+ q. d- e2 @02A0EAC6  |. |D91F        ||fstp dword ptr ds:[edi]+ ~! l6 K2 h- ^  F( {, U' U6 N
02A0EAC8  |. |D94424 30   ||fld dword ptr ss:[esp+30]) q3 W! y' L7 }% _0 H$ j" J7 S
02A0EACC  |. |D95F 04     ||fstp dword ptr ds:[edi+4]9 }( q, d) k$ f" L& E  O; s& ?, r
02A0EACF  |. |8B46 58     ||mov eax,dword ptr ds:[esi+58]
& G: M8 W4 w: w( m02A0EAD2  |. |03C3        ||add eax,ebx) Z3 A! p# O+ N3 s+ m' ~3 ^0 x
02A0EAD4  |. |3B50 08     ||cmp edx,dword ptr ds:[eax+8]* ~, A  ~, X, K
02A0EAD7  |.^\\0F8C 6FFFFF>|\\jl xcDxShad.02A0EA4C
6 O/ s8 F0 b: U3 h/ s+ D3 G) I, J' D" l+ M$ r
本游戏字符编码采用UNICODE,7 d3 J3 e  [% \# e0 F* s
对字符码表的操作:
' K" z  w, ?6 S8 }10028807  |> /0FB702      /movzx eax,word ptr ds:[edx]        读字符的UNICODE码
. ^# Z9 E1 b& |; w! }# `1002880A  |. |8D04C0      |lea eax,dword ptr ds:[eax+eax*8]
/ F; t# t5 b% N) ^6 b1002880D  |. |8D0483      |lea eax,dword ptr ds:[ebx+eax*4]   根据UNICODE码求得字符码表的地址
* @5 H4 @% Q; B3 ?( J10028810  |. |33C9        |xor ecx,ecx
" u" y2 }/ {& {0 p! U! O10028812  |. |DB40 20     |fild dword ptr ds:[eax+20]
) \; {( }) m! J. B+ h: V+ y8 T. K10028815  |. |D95C24 14   |fstp dword ptr ss:[esp+14]% J7 a6 c: X/ y4 ?
10028819  |. |D94424 14   |fld dword ptr ss:[esp+14]6 v; P. |& i1 ^1 p& ?
1002881D  |. |D9C0        |fld st, T1 U( ^; Q& N6 L% [" o6 S
1002881F  |. |D84E 14     |fmul dword ptr ds:[esi+14]" {8 k5 G) H/ t0 {0 X( ~
10028822  |. |D94424 0C   |fld dword ptr ss:[esp+C]
! P! n8 K5 r$ V3 b7 n1 }6 ~& J10028826  |. |D9C0        |fld st  l: n9 ~) Z/ Y
10028828  |. |DEC2        |faddp st(2),st
) K( G8 `- W9 P" ]/ F1002882A  |. |D9C9        |fxch st(1)! y0 ^4 m( Q: F$ y9 C
1002882C  |. |D95C24 14   |fstp dword ptr ss:[esp+14]+ v$ R: Q4 s1 a8 S9 X
10028830  |. |D8D3        |fcom st(3)( P! F' f" b6 R5 H, e# C" |' z
10028832  |. |DFE0        |fstsw ax
* u! i3 I; g: f3 i* d' Y: Y7 x  E10028834  |. |F6C4 01     |test ah,1
% H3 H2 r2 @1 J3 I: ?& k10028837  |. |74 2B       |je short xcEngine.10028864
1 J( U, q/ v- |0 U: e* I10028839  |. |D94424 14   |fld dword ptr ss:[esp+14]
( B1 G# j; j& T0 K) G+ d1002883D  |. |D8D3        |fcom st(3)
% [5 x6 D3 }# C1 E1002883F  |. |DFE0        |fstsw ax
/ |" i$ \8 D0 d. S10028841  |. |F6C4 41     |test ah,41! O. z, t, X$ P( }
10028844  |. |7A 04       |jpe short xcEngine.1002884A8 ~1 b' [0 M+ I. P% L9 Z8 S/ j/ U5 Q
10028846  |. |DDD8        |fstp st/ N& j& v% U1 B; S
10028848  |. |EB 1A       |jmp short xcEngine.10028864" D& i3 e+ P& ]) a: Q; y
1002884A  |> |D9C9        |fxch st(1)
, l5 ]8 M/ ~2 j# w# b) @5 s$ R. V! j1002884C  |. |D8D3        |fcom st(3). V; \  s3 J3 @- c% ]5 T/ d9 W
1002884E  |. |DFE0        |fstsw ax
% D- z9 B  E8 h1 n- p- i10028850  |. |F6C4 05     |test ah,5" D7 n5 T) @! n  }& U
10028853  |. |7A 04       |jpe short xcEngine.10028859* S4 s) V0 x1 Q6 Q$ D& q
10028855  |. |DDD9        |fstp st(1)+ \0 K9 S& S$ u" o' ~
10028857  |. |EB 0B       |jmp short xcEngine.10028864
& P# K+ h& `" w2 K; O: e5 Z10028859  |> |D9C9        |fxch st(1)( ~4 Y# E/ Y% b- ~/ G3 `
1002885B  |. |D8DC        |fcomp st(4)
) a& `- |  T" O1002885D  |. |DFE0        |fstsw ax
" w8 B+ T. h6 Q' r1002885F  |. |F6C4 41     |test ah,41
; m, P1 O2 d3 D4 Y4 m$ t10028862  |. |75 05       |jnz short xcEngine.10028869' h- `# q2 N( h1 L: D& x
10028864  |> |B9 01000000 |mov ecx,1
2 D- ]5 H* k0 N/ Q10028869  |> |85C9        |test ecx,ecx! ~: g6 y; H) V5 {& l/ P
1002886B  |. |8B4424 18   |mov eax,dword ptr ss:[esp+18]
/ I$ b/ ~" X9 t0 j0 ?6 F- `1002886F  |. |D940 14     |fld dword ptr ds:[eax+14]  X& k9 H+ V# V6 t
10028872  |. |DECA        |fmulp st(2),st  d1 P: j: ]7 U! x8 p& X* l
10028874  |. |DEC1        |faddp st(1),st+ t: ]( H0 e& p  U5 p
10028876  |. |D95C24 0C   |fstp dword ptr ss:[esp+C]5 B4 k0 y8 }! g) ]6 S
1002887A  |. |75 05       |jnz short xcEngine.10028881( @; [) f* V' x5 G: h6 S
1002887C  |. |834424 10 0>|add dword ptr ss:[esp+10],1) q  Q+ o2 Q, s% b* \
10028881  |> |83C2 02     |add edx,2
- C/ F/ t2 |, P' t" c; c% H4 `10028884  |. |83EF 01     |sub edi,12 j3 ^# ?* d* ~- t5 _5 ?
10028887  |.^\\0F85 7AFFFF>\\jnz xcEngine.100288078 p  a4 m- a/ H4 @; b: @
由于算法采用了浮点数指令,本人不太懂,边学习边研究中。。。。。。。。。
回复 支持 反对

使用道具 举报

8#
发表于 2010-4-1 11:13 | 只看该作者
加油!UNICODE码内核的游戏?9 t. k" M9 X4 N2 V9 T" g9 G6 e
看来汉化有希望啊。
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

回 8楼(shane007) 的帖子

找到了内存中字库的地址,可在下面这个位置下断,
( m& N  M& \& Q3 y1 n% S* u5 _3 H$ K2 h
02A0EA5C  |. |8D0487      ||lea eax,dword ptr ds:[edi+eax*4]                     ;  eax存放的就是字库的地址8 {* V/ u" k# ^" \$ H; u! e5 `: [
这个字库不是点阵的,经过修改,字符的形状可发生变化,应该是矢量字库
回复 支持 反对

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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