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

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

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

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

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

关于静物2的分析

00403CE0  |> /3B96 10110000    /cmp edx,dword ptr ds:[esi+1110], m: g* l/ ]! @* H8 @- d
00403CE6  |. |1BC9             |sbb ecx,ecx$ \" @& f) z' f7 N
00403CE8  |. |23D1             |and edx,ecx+ D; W1 H+ s- O8 a/ @9 ~8 B
00403CEA  |. |8B8E 0C110000    |mov ecx,dword ptr ds:[esi+110C]
& O0 [, s" T+ s$ a' o00403CF0  |. |8A0C0A           |mov cl,byte ptr ds:[edx+ecx]
, Y& |! A: L* T; j3 R5 }8 W00403CF3  |. |3008             |xor byte ptr ds:[eax],cl                   ;  这个循环就是异或算法( w# `( E- ]: X* D
00403CF5  |. |83C2 01          |add edx,1
. z; K9 y/ j4 Q$ g  C00403CF8  |. |83C0 01          |add eax,1
. v+ {6 p- N1 t00403CFB  |. |83EF 01          |sub edi,17 R8 f, C: b1 u/ M' ?
00403CFE  |.^\75 E0            \jnz short SL2.00403CE0
# M6 _) M) }  ^' W6 V* c8 l- \) |( Y
0 z* z" R, W9 d  C
. z3 i' b7 u$ K  b# M$ r00401A42  |.  8D4C24 18        lea ecx,dword ptr ss:[esp+18]$ i6 M) b2 }) L  T$ D3 a
00401A46  |.  51               push ecx) n& t6 `& d2 F) ?! H/ B0 L
00401A47  |.  8D4C24 24        lea ecx,dword ptr ss:[esp+24]& q' g7 w: V- x2 V0 o' c
00401A4B  |.  C68424 58110000 >mov byte ptr ss:[esp+1158],1
/ w. R* |7 ?) {9 V00401A53  |.  C687 08010000 00 mov byte ptr ds:[edi+108],0
  ]: O8 k- S& ?; O1 V00401A5A  |.  E8 51240000      call SL2.00403EB0                           ;  读取字体函数的开始四个字节
1 Y: [& X/ y* o+ @/ f' g00401A5F  |.  817C24 18 474D47>cmp dword ptr ss:[esp+18],42474D47          ;  此处可判断出开始的四个字节应该是魔幻数, c% w* C* ^; f
+0 魔幻数3 S7 W1 \% ]: ~+ _+ o/ P
+4 段数,
$ t( I/ n' M7 Q下面开始是每段的头部1 U  z/ D. m* x( Y" E- P
+46EE 正文5 F, I! ]( W2 A1 l6 x  O

+ a' l- U/ Z! V0203DDE0  2F 45 58 54 44 41 54 41 53 46 4F 4E 54 2F 41 52  /EXTDATASFONT/AR7 O3 H# I& U( r( K/ T" F
0203DDF0  49 41 4C 20 31 31 2E 45 4E 00                    IAL 11.EN.
7 `$ ^2 e9 y* j8 d! }2 ]
+ L7 `! d- J% p8 M% A+ i0203DEE0              75 16 00 00 (EE 46) 00 00 2F 45 58 54      ..頕../EXT
. p% N7 X+ t  O$ h1 i' f0203DEF0  44 41 54 41 53 46 4F 4E 54 2F 41 52 49 41 4C 20  DATASFONT/ARIAL  h+ f* W+ B( A2 y
0203DF00  31 32 2E 45 4E 00                                12.EN.. P) z1 \4 ^( C' u. I
% N0 l4 E! |, [  Q( I
上面表中的数据除了括号中的(EE 46),其余全部与解包后文件数据一致,- A) \6 H  K1 r, e8 n; A
1675是这个段的长度,46EE是这个在文件中的偏移,每段偏移值的算法如下:# [- t( t/ G  G" C
2 p& S4 m1 F! R) y0 d4 m
00401AE0  |> /899401 08010000  /mov dword ptr ds:[ecx+eax+108],edx         ;  edx=46ee% `# \" v# W, y
00401AE7  |. |8B06             |mov eax,dword ptr ds:[esi]                 ;  [esi]存放读取字符的地址- X" e) S8 ~5 h6 ]. I
00401AE9  |. |039401 04010000  |add edx,dword ptr ds:[ecx+eax+104]
% H* e: N' t* q. P* N/ _  I00401AF0  |. |83C3 01          |add ebx,1( _# @- h$ k/ v: E  y+ l
00401AF3  |. |81C1 0C010000    |add ecx,10C. `& h% R# j( |7 _& o/ w1 t
00401AF9  |. |3B5C24 14        |cmp ebx,dword ptr ss:[esp+14]              ;  [esp+14]=1C2
6 M8 @- a, g3 |3 {4 k* {! z+ r$ }00401AFD  |.^\72 E1            \jb short SL2.00401AE0
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

沙发
发表于 2010-3-28 11:32 | 只看该作者
首先对楼主的大力支持表示非常感谢!6 b" P5 m, F8 U$ z# m# x8 q5 |" l9 Z+ e
想问一下,通过以上分析,能得出什么阶段性的结论吗?
回复 支持 反对

使用道具 举报

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

使用道具 举报

地板
 楼主| 发表于 2010-3-28 12:06 | 只看该作者
Sl2fnt.dat文件格式分析如下:( u  p: L- K6 d  H1 W( M- D5 x
+0 474D4742  这个魔幻数2 X( _9 I0 c% {/ P

9 o: [, X6 i3 c: I! L5 Y/ Q- Q+4 C2010000  表示有01C2个文件
9 w" h& H3 G% A  z. o3 p
9 k1 x' W: Y) K* ?2 V9 C+8 2F4558544441544153464F4E542F415249414C2031312E454E00& D# o1 g! w1 L3 {( o3 z
/EXTDATASFONT/ARIAL 11.EN.u
" T+ V" m/ r/ i) w7 ?: Z这个应该是文件头部,ARIAL表示字体,EN表示英语 11表示字号) b1 T$ w: a( W/ N
( l7 q( S' f5 d2 K$ h  _
   751600 表示这个文件的大小
" Q# \# Z7 F9 r7 F0 _
/ E) I1 L, u& E2 H+ e/ A每个文件的偏移由上文中的最后那个函数得出
( d2 O0 s# v5 e0 Z6 w
4 B7 W, \; j8 `, s# u6 c$ |+ |0 {* _( J1 X0 v
+46EE 此处开始是每个文件的正文
! P9 U8 K  C, e2 u3 w
( R8 C/ ?& ~5 I; \% p( J如上面我举的这个例子,文件正文内容起始地址+46EE,: b4 n6 }* K  u6 w# y, d: S
结束地址为+(46EE+1675)
回复 支持 反对

使用道具 举报

5#
发表于 2010-3-28 12:11 | 只看该作者
这个其实不用分析,这个dat是个包文件,已经有解包器了啊。1 J- Q7 C6 u# h* Q" Y" J" A: F
需要分析的是里面解出来的字体文件。字体文件的magic number是XCPK.  V7 s9 u% i. w3 M4 p- W2 {( {( x

1 X% B) f5 p4 J2 g. G我想知道XCPK文件的结构。
回复 支持 反对

使用道具 举报

6#
发表于 2010-3-28 12:16 | 只看该作者
http://aluigi.altervista.org/papers.htm8 ~9 d$ K, m( K

  ]/ F! x$ b, x9 S8 k! i7 {9 w' A这里有stilllife2 dat文件解包器,配合quickbms使用
回复 支持 反对

使用道具 举报

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

回 楼主(jinxin8866) 的帖子

写屏函数:
/ s' j6 J8 ~$ m0 ]( ?02A0EA4C  |> /8B00        |/mov eax,dword ptr ds:[eax]2 m  w4 F( T  [. E0 H. f
02A0EA4E  |. |0FB70450    ||movzx eax,word ptr ds:[eax+edx*2]                    ;  [eax+edx*2]存放字符的UNICODE码
+ o5 U6 p9 {7 ]' q! l+ |& g02A0EA52  |. |8B7C24 14   ||mov edi,dword ptr ss:[esp+14]
7 C5 s+ V& v4 S; ~8 M6 N02A0EA56  |. |8B7F 2C     ||mov edi,dword ptr ds:[edi+2C]3 W( X9 a/ B, {2 {6 A9 _* d
02A0EA59  |. |8D04C0      ||lea eax,dword ptr ds:[eax+eax*8]
+ W, n, y) \& b7 X+ k" C# c02A0EA5C  |. |8D0487      ||lea eax,dword ptr ds:[edi+eax*4]                     ;  eax存放字符编码表- l, H9 |; h$ k5 z2 }
每个字符码表占24(16进制)个字节
6 `- b4 f, ^3 F+ M( C02A0EA5F  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]
. U' W% W' m, i' T) ]02A0EA63  |. |8D7C39 14   ||lea edi,dword ptr ds:[ecx+edi+14]                    ;  edi就是显存地址+ }# P5 z; k9 n/ O  O# y' W
02A0EA67  |. |D940 04     ||fld dword ptr ds:[eax+4]9 c9 }3 `4 p. g6 H( m" i
02A0EA6A  |. |83C2 01     ||add edx,1                                              字符个数加一/ {% v7 G4 B1 L+ F- g( L6 P
02A0EA6D  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]
+ M# h/ \8 ^7 `' m  D02A0EA71  |. |D900        ||fld dword ptr ds:[eax]
1 M( v! r* R4 a02A0EA73  |. |D91F        ||fstp dword ptr ds:[edi]                              ;  edi就是显存地址7 F0 i# Z2 e8 ]6 a8 t7 D8 j
每个字符占1C个字节,最后的四个字节都是一样的,可以认为是结束标志
' c; b* Y6 C2 d3 W( ^' x8 n02A0EA75  |. |D94424 30   ||fld dword ptr ss:[esp+30], I1 V" Q7 x9 ?) s4 u1 a' B
02A0EA79  |. |D95F 04     ||fstp dword ptr ds:[edi+4]  s! x: N' z, u- [7 @4 N
02A0EA7C  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]
5 g6 c$ m6 W4 Y4 G) X, f  v' U; }02A0EA80  |. |D940 04     ||fld dword ptr ds:[eax+4]
4 u+ s, g* Y! L  Y  O, K02A0EA83  |. |8D7C39 30   ||lea edi,dword ptr ds:[ecx+edi+30]
$ N# Q! b+ Z+ y  R0 Z, _02A0EA87  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]
) _3 x& Z0 E5 ?1 h3 n' F0 {( W9 Q02A0EA8B  |. |D940 08     ||fld dword ptr ds:[eax+8]; n, q7 {- ?( D( X) T+ }% N8 W
02A0EA8E  |. |D91F        ||fstp dword ptr ds:[edi]
5 L' ?. [1 ?) j6 N02A0EA90  |. |D94424 30   ||fld dword ptr ss:[esp+30]
. J4 j5 y* Z6 i02A0EA94  |. |D95F 04     ||fstp dword ptr ds:[edi+4]' F5 V) y# R) S: g( u
02A0EA97  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]
' ~3 N9 R3 A3 S' h& U8 @02A0EA9B  |. |D940 0C     ||fld dword ptr ds:[eax+C]
0 c% k7 k  C$ u" K7 h4 O6 ?/ j3 U& A02A0EA9E  |. |8D7C39 4C   ||lea edi,dword ptr ds:[ecx+edi+4C]' P$ B9 b& J- v5 c9 E' F
02A0EAA2  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]
8 y0 _* x7 y4 j% f) F02A0EAA6  |. |D900        ||fld dword ptr ds:[eax]  U5 q; Y/ R: s  X4 {
02A0EAA8  |. |D91F        ||fstp dword ptr ds:[edi]
/ |# h9 E( S3 S" q; A$ \02A0EAAA  |. |D94424 30   ||fld dword ptr ss:[esp+30]
" o) T0 u/ ?. @02A0EAAE  |. |D95F 04     ||fstp dword ptr ds:[edi+4]4 i( O0 ?) x, R7 o
02A0EAB1  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]) m' }# q: M; T. g# U8 ~
02A0EAB5  |. |D940 0C     ||fld dword ptr ds:[eax+C]+ {. {5 A/ F7 d) O5 e6 [; u: O
02A0EAB8  |. |8D7C39 68   ||lea edi,dword ptr ds:[ecx+edi+68]
, w" O# H' E, D, o: C! L; R02A0EABC  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]
" [% G& u0 @/ V4 G; O  V02A0EAC0  |. |83C1 70     ||add ecx,70+ N9 Q+ d$ {# `
02A0EAC3  |. |D940 08     ||fld dword ptr ds:[eax+8]7 _2 E1 D; o" q, m2 W
02A0EAC6  |. |D91F        ||fstp dword ptr ds:[edi]
" t4 R& F% z# a5 J! Z9 \02A0EAC8  |. |D94424 30   ||fld dword ptr ss:[esp+30]
. X) y' p0 {  V; a4 y$ x$ h02A0EACC  |. |D95F 04     ||fstp dword ptr ds:[edi+4]
+ C8 Z7 W# L8 ?: K( U02A0EACF  |. |8B46 58     ||mov eax,dword ptr ds:[esi+58]# a1 t) v" I, P; g* }
02A0EAD2  |. |03C3        ||add eax,ebx3 i& J  {3 f4 R' u! ~3 i6 J4 p
02A0EAD4  |. |3B50 08     ||cmp edx,dword ptr ds:[eax+8]
0 P6 t" {) Z: F6 P' v: M1 |02A0EAD7  |.^\\0F8C 6FFFFF>|\\jl xcDxShad.02A0EA4C1 Y8 N# e: V9 L6 F' b4 }. ~

. q% T, h/ U, o9 F- v本游戏字符编码采用UNICODE,+ X  ~, k9 c" H; F* w
对字符码表的操作:6 w5 Y: Q9 J$ ]- W) L
10028807  |> /0FB702      /movzx eax,word ptr ds:[edx]        读字符的UNICODE码  f  I. q4 c5 t; o9 z
1002880A  |. |8D04C0      |lea eax,dword ptr ds:[eax+eax*8]" n0 }9 A7 c" @0 \* e' C2 ~
1002880D  |. |8D0483      |lea eax,dword ptr ds:[ebx+eax*4]   根据UNICODE码求得字符码表的地址
) A- F) P* `# M' |10028810  |. |33C9        |xor ecx,ecx7 x/ Q* w1 ?3 O5 K9 z
10028812  |. |DB40 20     |fild dword ptr ds:[eax+20]- v- J. o9 A2 }6 _0 |2 l
10028815  |. |D95C24 14   |fstp dword ptr ss:[esp+14]
0 k. t9 c1 p6 E+ o10028819  |. |D94424 14   |fld dword ptr ss:[esp+14]
2 m$ V. m; U, K* j/ L1002881D  |. |D9C0        |fld st
; k7 W8 {, a  U  G& }1002881F  |. |D84E 14     |fmul dword ptr ds:[esi+14]/ ~) x; r' g( F( ]
10028822  |. |D94424 0C   |fld dword ptr ss:[esp+C]
4 @) h/ E* B& s& W  z10028826  |. |D9C0        |fld st( x: @8 c3 i1 M/ g
10028828  |. |DEC2        |faddp st(2),st4 ?. D9 a6 g1 }4 W
1002882A  |. |D9C9        |fxch st(1)1 }, R1 E6 O4 u  I2 V3 A
1002882C  |. |D95C24 14   |fstp dword ptr ss:[esp+14]. |* y2 S" J& o. q/ s# @) e# _+ s
10028830  |. |D8D3        |fcom st(3)0 u8 [$ L  O* s) k' |
10028832  |. |DFE0        |fstsw ax
: z, i" B# E9 c1 O5 u10028834  |. |F6C4 01     |test ah,1
% m+ F; G* t* g1 q. W. B10028837  |. |74 2B       |je short xcEngine.100288643 U: u0 M$ y+ l' w& ]2 x  @4 F6 F
10028839  |. |D94424 14   |fld dword ptr ss:[esp+14]
# [0 d7 G; O* @1002883D  |. |D8D3        |fcom st(3)0 R4 R5 x0 W* O& e& p& m0 W/ D5 _
1002883F  |. |DFE0        |fstsw ax
8 {2 X$ x. r: \/ o5 K10028841  |. |F6C4 41     |test ah,41  `5 F9 k( F  M9 t8 C: k
10028844  |. |7A 04       |jpe short xcEngine.1002884A
+ Z. x  j0 O) T9 S7 D10028846  |. |DDD8        |fstp st. h8 |3 K: u/ D6 t, ?
10028848  |. |EB 1A       |jmp short xcEngine.10028864
, \# Z! {0 W. n5 p' h! I/ S( w& L1002884A  |> |D9C9        |fxch st(1)
! c# e1 x8 b& [: G) m( l1002884C  |. |D8D3        |fcom st(3)0 U* {7 x9 I  X8 }1 L0 T6 C
1002884E  |. |DFE0        |fstsw ax% I' }4 e( |; k- R# }, u
10028850  |. |F6C4 05     |test ah,5: p1 B+ G8 K. y  K; v" d
10028853  |. |7A 04       |jpe short xcEngine.10028859' K& m; B9 X. e1 y! t/ F
10028855  |. |DDD9        |fstp st(1)
- B7 m. t  V, H. b- B! t! r10028857  |. |EB 0B       |jmp short xcEngine.10028864
0 t, ^4 ~- A, k. P& Y10028859  |> |D9C9        |fxch st(1)8 Y. F3 i2 B$ \+ Y2 s3 |
1002885B  |. |D8DC        |fcomp st(4)2 e3 E) T% I; y9 G& h6 l# L
1002885D  |. |DFE0        |fstsw ax
8 L3 j2 z0 g. {+ S  q1002885F  |. |F6C4 41     |test ah,41
3 ]5 o7 y/ J- \" R4 f; Q# o10028862  |. |75 05       |jnz short xcEngine.10028869
1 {" L9 h1 U" d8 }* R% a10028864  |> |B9 01000000 |mov ecx,1+ x! k, D" h" E- C  [/ M
10028869  |> |85C9        |test ecx,ecx$ d" r& V$ Z& X) b# H$ J3 e+ s
1002886B  |. |8B4424 18   |mov eax,dword ptr ss:[esp+18]
9 e+ Z2 R/ p# Y8 N8 H0 E1002886F  |. |D940 14     |fld dword ptr ds:[eax+14]( |# w, [/ J* m# C# N( u' ~0 d& X
10028872  |. |DECA        |fmulp st(2),st
$ [" j- R3 g9 I" s& A: v10028874  |. |DEC1        |faddp st(1),st. C1 \9 ]3 D  l, |
10028876  |. |D95C24 0C   |fstp dword ptr ss:[esp+C]& t* r7 B9 Y5 c( ?0 q; q6 {
1002887A  |. |75 05       |jnz short xcEngine.10028881
* L+ N" J0 N0 w/ u" T1 [1 r  r7 m1 r1002887C  |. |834424 10 0>|add dword ptr ss:[esp+10],1% A9 j) ]/ \7 `7 L+ ^, ]- a
10028881  |> |83C2 02     |add edx,2
* T+ f% s8 H% ~5 h3 t$ R10028884  |. |83EF 01     |sub edi,1. `1 V4 R# d% W9 K8 a6 D4 s% ?
10028887  |.^\\0F85 7AFFFF>\\jnz xcEngine.10028807
; t3 G1 O. Q3 ]) X: w8 d4 I由于算法采用了浮点数指令,本人不太懂,边学习边研究中。。。。。。。。。
回复 支持 反对

使用道具 举报

8#
发表于 2010-4-1 11:13 | 只看该作者
加油!UNICODE码内核的游戏?3 ?, M& K" D* l8 Q# B: s7 K0 L
看来汉化有希望啊。
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

回 8楼(shane007) 的帖子

找到了内存中字库的地址,可在下面这个位置下断,7 r# ~- x& Q- i0 u4 N: m' Y

6 h- U, A9 t7 d" x02A0EA5C  |. |8D0487      ||lea eax,dword ptr ds:[edi+eax*4]                     ;  eax存放的就是字库的地址
4 [' P* S1 g! A& M这个字库不是点阵的,经过修改,字符的形状可发生变化,应该是矢量字库
回复 支持 反对

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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