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

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

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

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

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

关于静物2的分析

00403CE0  |> /3B96 10110000    /cmp edx,dword ptr ds:[esi+1110]$ @6 [( p, T* Y% j
00403CE6  |. |1BC9             |sbb ecx,ecx
) M- Q6 X$ I  `& O+ E( f) [00403CE8  |. |23D1             |and edx,ecx
' r7 v0 y- t% N  s/ E; O6 B00403CEA  |. |8B8E 0C110000    |mov ecx,dword ptr ds:[esi+110C]: f( c/ ]4 x/ V  t
00403CF0  |. |8A0C0A           |mov cl,byte ptr ds:[edx+ecx]( f" [. X9 \* ?" u5 f
00403CF3  |. |3008             |xor byte ptr ds:[eax],cl                   ;  这个循环就是异或算法
1 x- x6 Q: V' m) v00403CF5  |. |83C2 01          |add edx,1
8 N# ^  N2 P0 o8 h0 O; J00403CF8  |. |83C0 01          |add eax,1
) \& v: P4 o$ o, t' B! i& l- X00403CFB  |. |83EF 01          |sub edi,1
7 o0 ^% q# C8 l  f* x& s: j& T00403CFE  |.^\75 E0            \jnz short SL2.00403CE0* Z( |# K' v. R6 s  S4 Z
+ q- W+ e0 \# q, Q$ A: [$ ^7 u0 |
, J5 R5 {. j/ f2 K
00401A42  |.  8D4C24 18        lea ecx,dword ptr ss:[esp+18]0 D$ M. T# e" q1 o
00401A46  |.  51               push ecx
. d9 @9 c" x3 B) c% ]# m00401A47  |.  8D4C24 24        lea ecx,dword ptr ss:[esp+24]
; Z5 ?, [: Z" y00401A4B  |.  C68424 58110000 >mov byte ptr ss:[esp+1158],1
. g% i7 ]* Q# \9 n00401A53  |.  C687 08010000 00 mov byte ptr ds:[edi+108],03 d0 J8 ^7 U, a% X
00401A5A  |.  E8 51240000      call SL2.00403EB0                           ;  读取字体函数的开始四个字节
) a+ u3 d1 P2 t; G6 g0 j- g00401A5F  |.  817C24 18 474D47>cmp dword ptr ss:[esp+18],42474D47          ;  此处可判断出开始的四个字节应该是魔幻数
) j1 d) S/ ]1 l4 F* u: L- M. z+0 魔幻数
9 D+ o  ?3 I# H: F4 L' d; O, T+4 段数,
! _4 `: z) s* x" g; R; L下面开始是每段的头部
7 D0 t1 [" X8 Y. J1 P+46EE 正文7 u: `. a; s4 t5 T
5 i' j+ J" b) O0 p, \
0203DDE0  2F 45 58 54 44 41 54 41 53 46 4F 4E 54 2F 41 52  /EXTDATASFONT/AR3 C6 G/ Y- ?$ G: _* Q1 w8 L9 a
0203DDF0  49 41 4C 20 31 31 2E 45 4E 00                    IAL 11.EN.
/ i7 D5 G- F- b1 B3 T# V$ V' {) ~2 A& G! i, }7 W% x% c+ B+ a, b/ q  e
0203DEE0              75 16 00 00 (EE 46) 00 00 2F 45 58 54      ..頕../EXT2 x- ?5 R% r( y% }: _. U0 L
0203DEF0  44 41 54 41 53 46 4F 4E 54 2F 41 52 49 41 4C 20  DATASFONT/ARIAL: F  @9 T% b7 @
0203DF00  31 32 2E 45 4E 00                                12.EN.8 V  v7 f& {* j: Q
8 v- k0 t+ P5 J1 u  B& e2 I
上面表中的数据除了括号中的(EE 46),其余全部与解包后文件数据一致,4 V" g9 x1 d* M) Q- A/ p% ^7 l9 {5 Y
1675是这个段的长度,46EE是这个在文件中的偏移,每段偏移值的算法如下:0 ~6 a% |) ^4 z9 g

  f. V% C, ^' L7 h00401AE0  |> /899401 08010000  /mov dword ptr ds:[ecx+eax+108],edx         ;  edx=46ee
) o1 t6 Z. ?& C2 q00401AE7  |. |8B06             |mov eax,dword ptr ds:[esi]                 ;  [esi]存放读取字符的地址* H4 p. D: B1 M  k
00401AE9  |. |039401 04010000  |add edx,dword ptr ds:[ecx+eax+104]
7 Q; I+ T# R4 i( J00401AF0  |. |83C3 01          |add ebx,1# G0 r& Q& W5 t7 K8 \& O
00401AF3  |. |81C1 0C010000    |add ecx,10C
/ R1 {; L6 ?8 `2 w* r00401AF9  |. |3B5C24 14        |cmp ebx,dword ptr ss:[esp+14]              ;  [esp+14]=1C2& Y/ f& P* k# J
00401AFD  |.^\72 E1            \jb short SL2.00401AE0
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

沙发
发表于 2010-3-28 11:32 | 只看该作者
首先对楼主的大力支持表示非常感谢!( j0 g9 B! Q& S+ r  ?8 y7 W( W
想问一下,通过以上分析,能得出什么阶段性的结论吗?
回复 支持 反对

使用道具 举报

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

使用道具 举报

地板
 楼主| 发表于 2010-3-28 12:06 | 只看该作者
Sl2fnt.dat文件格式分析如下:
& {9 r  y$ S  e) Z  K* g+0 474D4742  这个魔幻数. G9 t* b2 Q2 Y/ G/ H- [
0 _  K+ [  l; z8 v
+4 C2010000  表示有01C2个文件6 S) k$ Y: c) a8 a- h
# R! G4 O  ~9 C; U
+8 2F4558544441544153464F4E542F415249414C2031312E454E009 M: s* C7 g+ I: j9 R6 r
/EXTDATASFONT/ARIAL 11.EN.u1 T8 c/ [1 W+ H& J2 H( G$ P1 M
这个应该是文件头部,ARIAL表示字体,EN表示英语 11表示字号! d, |3 ^$ m3 I; x

! Q% W1 t9 }" A( j' x" f2 ]   751600 表示这个文件的大小# Z0 i$ m$ ]( o1 s

8 q+ N- T- }9 z% c+ ?每个文件的偏移由上文中的最后那个函数得出
3 D* x- t/ D( A+ q5 }
6 s! @  f+ U0 d( i7 }- z) h+ Q6 w8 h: N$ c$ d) ^
+46EE 此处开始是每个文件的正文; ?- }5 X# m+ q  l3 g
! C9 X  n. S$ _+ j4 A
如上面我举的这个例子,文件正文内容起始地址+46EE,
* F4 c2 t: M% l7 J结束地址为+(46EE+1675)
回复 支持 反对

使用道具 举报

5#
发表于 2010-3-28 12:11 | 只看该作者
这个其实不用分析,这个dat是个包文件,已经有解包器了啊。
6 Z# w# Q1 z' }  @需要分析的是里面解出来的字体文件。字体文件的magic number是XCPK.
* P1 q$ Q, N8 b! }0 [5 }* _2 A( D9 N4 [9 X2 p
我想知道XCPK文件的结构。
回复 支持 反对

使用道具 举报

6#
发表于 2010-3-28 12:16 | 只看该作者
http://aluigi.altervista.org/papers.htm6 O2 r5 o5 E: \9 f0 Z4 g1 p( U
# G; d' B6 K  J
这里有stilllife2 dat文件解包器,配合quickbms使用
回复 支持 反对

使用道具 举报

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

回 楼主(jinxin8866) 的帖子

写屏函数:
# C, ~  o& Y+ T$ V4 W6 n' p6 ?02A0EA4C  |> /8B00        |/mov eax,dword ptr ds:[eax]; L! L8 |) a. \" \- @7 i2 i! \
02A0EA4E  |. |0FB70450    ||movzx eax,word ptr ds:[eax+edx*2]                    ;  [eax+edx*2]存放字符的UNICODE码
! g6 O$ j& U# A7 y! j4 v1 B02A0EA52  |. |8B7C24 14   ||mov edi,dword ptr ss:[esp+14]& u) D' D. N* Z0 ?
02A0EA56  |. |8B7F 2C     ||mov edi,dword ptr ds:[edi+2C]4 ]" \% {- ~2 I1 i
02A0EA59  |. |8D04C0      ||lea eax,dword ptr ds:[eax+eax*8]" U. V( G, Y! ^  e
02A0EA5C  |. |8D0487      ||lea eax,dword ptr ds:[edi+eax*4]                     ;  eax存放字符编码表) M5 |" ]5 X8 }) u1 |
每个字符码表占24(16进制)个字节
' J' [9 }& k- s. ~& f0 X/ j02A0EA5F  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]
  e# }  R) h, y5 `" i02A0EA63  |. |8D7C39 14   ||lea edi,dword ptr ds:[ecx+edi+14]                    ;  edi就是显存地址
. q& B  J& s" _' o02A0EA67  |. |D940 04     ||fld dword ptr ds:[eax+4], h6 S! K5 L' s  n0 A7 g1 o& B6 l
02A0EA6A  |. |83C2 01     ||add edx,1                                              字符个数加一( _9 |! e. z8 H( b
02A0EA6D  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]$ l2 d/ C5 K) T# j
02A0EA71  |. |D900        ||fld dword ptr ds:[eax]8 x( f# [% t7 y8 T4 r; }& N
02A0EA73  |. |D91F        ||fstp dword ptr ds:[edi]                              ;  edi就是显存地址) x; p+ ?! p8 X# ~: j' Y) u
每个字符占1C个字节,最后的四个字节都是一样的,可以认为是结束标志7 C5 S. J  V6 ]
02A0EA75  |. |D94424 30   ||fld dword ptr ss:[esp+30]
: e4 H" N; A+ K$ ^  I  M7 `/ }3 Q02A0EA79  |. |D95F 04     ||fstp dword ptr ds:[edi+4]5 T( d2 h5 T' P; M
02A0EA7C  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]8 M! r8 W* G' X. |
02A0EA80  |. |D940 04     ||fld dword ptr ds:[eax+4]' f. U$ M' |6 ]- \5 s- ^2 Y
02A0EA83  |. |8D7C39 30   ||lea edi,dword ptr ds:[ecx+edi+30]" t1 B  i0 W0 O" q) ^
02A0EA87  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]
$ m0 M1 n4 o; V2 M4 P02A0EA8B  |. |D940 08     ||fld dword ptr ds:[eax+8]
8 b: w) G0 M( E# b1 @02A0EA8E  |. |D91F        ||fstp dword ptr ds:[edi]5 |3 F3 M. E! p0 ~3 ^9 b: g% U+ u
02A0EA90  |. |D94424 30   ||fld dword ptr ss:[esp+30]
2 Y( i. s( h. r% X) K, w5 D1 C02A0EA94  |. |D95F 04     ||fstp dword ptr ds:[edi+4]
8 d! y1 _+ F4 `7 s02A0EA97  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]/ B+ T0 f& i/ O7 E0 o+ `  J; b
02A0EA9B  |. |D940 0C     ||fld dword ptr ds:[eax+C]
, u- M+ C& k, y# j1 k02A0EA9E  |. |8D7C39 4C   ||lea edi,dword ptr ds:[ecx+edi+4C]
. v5 {+ s  }/ B: @6 o02A0EAA2  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]
  k0 e" l* \8 z2 ?' C3 o  A7 n, d02A0EAA6  |. |D900        ||fld dword ptr ds:[eax]
7 q, i' T2 A. {8 U! r4 o( S5 I  F02A0EAA8  |. |D91F        ||fstp dword ptr ds:[edi]
0 K6 l4 s1 x6 g$ H' Z02A0EAAA  |. |D94424 30   ||fld dword ptr ss:[esp+30]
. _% y  X7 t2 f- Y$ o! X6 q* _02A0EAAE  |. |D95F 04     ||fstp dword ptr ds:[edi+4]
/ n4 J/ c/ d: ^/ S02A0EAB1  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]/ r, B8 T- Z8 _8 Q2 E5 R
02A0EAB5  |. |D940 0C     ||fld dword ptr ds:[eax+C]
( e; L7 r+ V8 Z8 W1 z; \02A0EAB8  |. |8D7C39 68   ||lea edi,dword ptr ds:[ecx+edi+68]" P- c' y8 v. Y/ g2 K. d
02A0EABC  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]6 S- U5 O: {4 _  a; E
02A0EAC0  |. |83C1 70     ||add ecx,70; ]6 z" L$ u, M/ z  ?
02A0EAC3  |. |D940 08     ||fld dword ptr ds:[eax+8]
7 @2 Z- V! U2 Q' K, \02A0EAC6  |. |D91F        ||fstp dword ptr ds:[edi]
% @' _; A1 x, r/ ?02A0EAC8  |. |D94424 30   ||fld dword ptr ss:[esp+30]
  Y' K- M  f9 X# O9 U4 K02A0EACC  |. |D95F 04     ||fstp dword ptr ds:[edi+4]; z! d) C8 l7 h% f, L0 @  f  I
02A0EACF  |. |8B46 58     ||mov eax,dword ptr ds:[esi+58]" M; U7 ?/ H+ s1 s# Z/ y
02A0EAD2  |. |03C3        ||add eax,ebx
1 E+ {; n6 c' X7 u: B- \3 G3 d' T02A0EAD4  |. |3B50 08     ||cmp edx,dword ptr ds:[eax+8]" h6 F4 y9 V% n1 P
02A0EAD7  |.^\\0F8C 6FFFFF>|\\jl xcDxShad.02A0EA4C
1 F  f4 j# `0 M6 J0 [+ [; ?3 ~& L: T2 [( g, |
本游戏字符编码采用UNICODE,1 ~  ~) t2 v8 o
对字符码表的操作:
$ {; `; W) N; ?* g  X0 G; a10028807  |> /0FB702      /movzx eax,word ptr ds:[edx]        读字符的UNICODE码4 K8 x0 J, d+ P- j  D6 u. s; M) v
1002880A  |. |8D04C0      |lea eax,dword ptr ds:[eax+eax*8]
) i5 y2 k; f( A1002880D  |. |8D0483      |lea eax,dword ptr ds:[ebx+eax*4]   根据UNICODE码求得字符码表的地址
# w* {+ h- Y' v( ?2 Q9 C10028810  |. |33C9        |xor ecx,ecx
+ w2 b7 k- }  y/ E" R: |10028812  |. |DB40 20     |fild dword ptr ds:[eax+20]
  F3 m: K8 G- Y  f6 J; q9 s10028815  |. |D95C24 14   |fstp dword ptr ss:[esp+14]
) B8 Q( [3 g# b# Z3 r& h' Y) t10028819  |. |D94424 14   |fld dword ptr ss:[esp+14]: N5 N1 y* a- ~- d6 }* ]! T+ \$ `
1002881D  |. |D9C0        |fld st
  t$ A# p. k$ ]* `& g1002881F  |. |D84E 14     |fmul dword ptr ds:[esi+14]0 y4 ^* R9 V! E  ^( C/ G
10028822  |. |D94424 0C   |fld dword ptr ss:[esp+C]2 s% s' N6 q6 v6 g, ]1 o, ?% \
10028826  |. |D9C0        |fld st
4 ?) y" i1 t& r4 B. a$ l2 Z- c10028828  |. |DEC2        |faddp st(2),st
0 O# {/ m, Z2 r9 n1002882A  |. |D9C9        |fxch st(1)
6 A4 b! y/ L6 H& {1002882C  |. |D95C24 14   |fstp dword ptr ss:[esp+14]: b6 X. y1 |1 g, B* Z0 e
10028830  |. |D8D3        |fcom st(3)/ ^+ _7 G# R* s; L
10028832  |. |DFE0        |fstsw ax
) w) H5 s: q4 Q5 ?10028834  |. |F6C4 01     |test ah,1
. Q+ ?/ C0 N* g1 ~" c; m; C) J10028837  |. |74 2B       |je short xcEngine.10028864
3 z/ ~$ ~" w1 U8 d" W+ F10028839  |. |D94424 14   |fld dword ptr ss:[esp+14]
9 ?; f  K/ E/ e. T8 t* r% _8 l6 t8 s1002883D  |. |D8D3        |fcom st(3)
' u, \' u/ F* M+ g4 ~- P1002883F  |. |DFE0        |fstsw ax; h* t6 e0 f- b; j4 l- B5 ?5 Z
10028841  |. |F6C4 41     |test ah,41) w" a& M3 r! N2 Y0 r4 V
10028844  |. |7A 04       |jpe short xcEngine.1002884A  E0 S: B- i" R7 B6 q
10028846  |. |DDD8        |fstp st
  R- _% c6 V% L% G/ B# B# r% t; W: h# K10028848  |. |EB 1A       |jmp short xcEngine.10028864
% X3 [, f6 T; d1002884A  |> |D9C9        |fxch st(1)0 j$ \; A) q9 Y1 E2 f
1002884C  |. |D8D3        |fcom st(3)( C6 r% j- c. _' Q4 U
1002884E  |. |DFE0        |fstsw ax. h) U! _; @" q
10028850  |. |F6C4 05     |test ah,5
0 u/ R$ p0 F' @5 z5 ]3 N. g10028853  |. |7A 04       |jpe short xcEngine.10028859
5 B5 A9 R2 @) X10028855  |. |DDD9        |fstp st(1)- M) {6 D3 t5 Z# }' \4 o
10028857  |. |EB 0B       |jmp short xcEngine.10028864: L; }1 I: P1 g) A3 n7 d2 s/ f: U
10028859  |> |D9C9        |fxch st(1)
# |% U! R/ M' i: ?. u$ y3 [  f1002885B  |. |D8DC        |fcomp st(4)) O, ?9 S- S4 }' c- A  u4 ]/ P" a' p
1002885D  |. |DFE0        |fstsw ax
5 D. L0 @1 D9 B5 H, x- w1002885F  |. |F6C4 41     |test ah,417 S" P+ G; ?( w8 ^
10028862  |. |75 05       |jnz short xcEngine.10028869* z8 f% v9 W9 v- u, B1 a$ m
10028864  |> |B9 01000000 |mov ecx,1
. p6 ]+ ^0 l. \10028869  |> |85C9        |test ecx,ecx0 D( M6 r) R+ u3 y2 R: h2 w- d% l
1002886B  |. |8B4424 18   |mov eax,dword ptr ss:[esp+18]
: w! J* S: L, k  ^+ Q. r' [- r; q- ]1002886F  |. |D940 14     |fld dword ptr ds:[eax+14]
' K) n6 {, D. `+ _10028872  |. |DECA        |fmulp st(2),st
8 H& W* h8 n' {) V2 w$ F10028874  |. |DEC1        |faddp st(1),st
$ r9 O0 H* }6 W$ a10028876  |. |D95C24 0C   |fstp dword ptr ss:[esp+C]
0 ?/ f) N3 w" h' T) w1002887A  |. |75 05       |jnz short xcEngine.10028881$ I6 J$ r$ C% C
1002887C  |. |834424 10 0>|add dword ptr ss:[esp+10],1
& b- O+ a+ p9 ?% p& [: m5 A- ~10028881  |> |83C2 02     |add edx,2( X) p& j+ F% o( W& F; k# ^
10028884  |. |83EF 01     |sub edi,1
* K+ q( f# k. `# Q6 p2 P" O3 x10028887  |.^\\0F85 7AFFFF>\\jnz xcEngine.100288075 _% R6 X0 r' r" p' z/ M
由于算法采用了浮点数指令,本人不太懂,边学习边研究中。。。。。。。。。
回复 支持 反对

使用道具 举报

8#
发表于 2010-4-1 11:13 | 只看该作者
加油!UNICODE码内核的游戏?) N# k! n( a: T
看来汉化有希望啊。
回复 支持 反对

使用道具 举报

9#
发表于 2010-4-1 11:17 | 只看该作者
只要知道游戏读取字符图片以后,以何种格式,放到哪个内存地址。
! r( S! Z$ y9 G) P5 E# w0 A1 m即使我们无法解压字库,也可以通过内挂一个DLL,传入字符编码,把我们自己的字符图片写入对应的内存地址。从而达到汉化的目的。
回复 支持 反对

使用道具 举报

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

回 8楼(shane007) 的帖子

找到了内存中字库的地址,可在下面这个位置下断,% I9 j. C) y9 ?. H
4 `  w/ E% `- w+ f% l
02A0EA5C  |. |8D0487      ||lea eax,dword ptr ds:[edi+eax*4]                     ;  eax存放的就是字库的地址4 P0 x3 z2 ?) J, |
这个字库不是点阵的,经过修改,字符的形状可发生变化,应该是矢量字库
回复 支持 反对

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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