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

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

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

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

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

关于静物2的分析

00403CE0  |> /3B96 10110000    /cmp edx,dword ptr ds:[esi+1110]
# f  d! X4 \7 }1 c( I00403CE6  |. |1BC9             |sbb ecx,ecx% l/ k' z9 @$ ]
00403CE8  |. |23D1             |and edx,ecx
; u8 j0 Y0 m/ W7 m- M! Q00403CEA  |. |8B8E 0C110000    |mov ecx,dword ptr ds:[esi+110C]
9 R# P- {; k# [00403CF0  |. |8A0C0A           |mov cl,byte ptr ds:[edx+ecx]1 d! F6 ^9 |! r1 A% M% \  }" s+ N
00403CF3  |. |3008             |xor byte ptr ds:[eax],cl                   ;  这个循环就是异或算法" [  L$ s6 e. x" b% C
00403CF5  |. |83C2 01          |add edx,10 G/ q3 ?' v; g' f
00403CF8  |. |83C0 01          |add eax,1
% u) d6 d1 \9 N0 u8 _2 q00403CFB  |. |83EF 01          |sub edi,12 r6 I1 d3 A' {) ?2 L2 B7 s
00403CFE  |.^\75 E0            \jnz short SL2.00403CE0) a! P/ C, ]$ \; a7 v

6 J) W+ B# a; h/ @* f: H3 C
, c6 c; u4 ~, l4 i00401A42  |.  8D4C24 18        lea ecx,dword ptr ss:[esp+18]
, U0 v" L( _+ J7 {* M4 {: z00401A46  |.  51               push ecx- p0 C& [2 u: I+ Y* z1 n8 D7 i0 P0 b
00401A47  |.  8D4C24 24        lea ecx,dword ptr ss:[esp+24]
; J3 T- m% P2 Y$ Y; ~6 C00401A4B  |.  C68424 58110000 >mov byte ptr ss:[esp+1158],14 S6 h$ V8 r4 T! H7 c1 c
00401A53  |.  C687 08010000 00 mov byte ptr ds:[edi+108],0
$ \" Z& E# J1 O& A2 h; C; Q% ?00401A5A  |.  E8 51240000      call SL2.00403EB0                           ;  读取字体函数的开始四个字节- t1 X, G5 n  z( W
00401A5F  |.  817C24 18 474D47>cmp dword ptr ss:[esp+18],42474D47          ;  此处可判断出开始的四个字节应该是魔幻数, x3 U7 F, b0 u, O/ `2 N# h: W0 j0 B
+0 魔幻数
9 p8 v7 W9 c1 U9 W4 h0 x+4 段数,- O5 }6 q3 Z, }" T5 y# s9 Z/ L
下面开始是每段的头部8 p+ t7 ]7 |) P) W, u
+46EE 正文6 `2 [- B& A/ ~2 i8 s& g0 L
" V; N. W( Z$ f. b# p9 }  L" U, h. D
0203DDE0  2F 45 58 54 44 41 54 41 53 46 4F 4E 54 2F 41 52  /EXTDATASFONT/AR
% ^( g* n+ {! v, u, l! L0203DDF0  49 41 4C 20 31 31 2E 45 4E 00                    IAL 11.EN.
6 j  P8 Z9 w! j. z3 o" \; {: e/ y- Z+ y! a$ p/ P
0203DEE0              75 16 00 00 (EE 46) 00 00 2F 45 58 54      ..頕../EXT
% F7 R& R6 d! T8 q' C0203DEF0  44 41 54 41 53 46 4F 4E 54 2F 41 52 49 41 4C 20  DATASFONT/ARIAL2 }+ {- J3 g3 K
0203DF00  31 32 2E 45 4E 00                                12.EN.! A9 O& C3 j0 l( p7 [* k
* |* m5 ?# l* r: F6 m
上面表中的数据除了括号中的(EE 46),其余全部与解包后文件数据一致,
# Z( T0 b7 B$ t/ Q& h8 Y1675是这个段的长度,46EE是这个在文件中的偏移,每段偏移值的算法如下:
' W( h7 t# `2 I9 ?, N1 i9 A( V2 \9 w( f! e$ m% P
00401AE0  |> /899401 08010000  /mov dword ptr ds:[ecx+eax+108],edx         ;  edx=46ee
! x! B& u; Q6 I/ x2 X. `: M00401AE7  |. |8B06             |mov eax,dword ptr ds:[esi]                 ;  [esi]存放读取字符的地址7 b/ a" D4 J6 K" D( ^! c) O
00401AE9  |. |039401 04010000  |add edx,dword ptr ds:[ecx+eax+104]
2 w8 O5 A( g- y' O  G: i+ ]00401AF0  |. |83C3 01          |add ebx,17 {  Z/ _" Q/ L- X% i3 q8 o6 H
00401AF3  |. |81C1 0C010000    |add ecx,10C) J/ v  M; V8 e4 O
00401AF9  |. |3B5C24 14        |cmp ebx,dword ptr ss:[esp+14]              ;  [esp+14]=1C2
4 B# v1 z, o7 D: Y00401AFD  |.^\72 E1            \jb short SL2.00401AE0
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

沙发
发表于 2010-3-28 11:32 | 只看该作者
首先对楼主的大力支持表示非常感谢!+ t" g% r  }' K3 t" C% {
想问一下,通过以上分析,能得出什么阶段性的结论吗?
回复 支持 反对

使用道具 举报

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

使用道具 举报

地板
 楼主| 发表于 2010-3-28 12:06 | 只看该作者
Sl2fnt.dat文件格式分析如下:6 A/ h5 @, a* C% T$ L" B$ j
+0 474D4742  这个魔幻数8 A% p5 \4 s+ b$ r0 D, {
+ i" I2 _6 R1 ?/ m& v) t& S
+4 C2010000  表示有01C2个文件9 i7 e" h" ]$ ~  h2 b" T1 C# c

- [9 R+ J. V, A0 y. J+8 2F4558544441544153464F4E542F415249414C2031312E454E00: r  x! e/ p# d' A: S
/EXTDATASFONT/ARIAL 11.EN.u
- x9 t5 s2 m. @. [; K- ?1 O' o这个应该是文件头部,ARIAL表示字体,EN表示英语 11表示字号
, t/ ^, k# ~7 _2 ]5 K% `/ Q
/ s2 z0 u2 U) C! b" N7 a6 i! j   751600 表示这个文件的大小4 k% z8 F4 L2 w7 @( Z0 U( f/ V

3 X) m8 Z  y3 [1 E! W每个文件的偏移由上文中的最后那个函数得出
: m8 ^% n3 w4 f4 j' X/ }+ @0 j
+ R+ |9 c$ y( U6 \$ N, M4 V8 H  i; j; d  F: }' u
+46EE 此处开始是每个文件的正文
+ g. A6 w5 a% A$ {- f! _% s# A6 E! {, X! \1 \0 D9 y
如上面我举的这个例子,文件正文内容起始地址+46EE,/ }" s( _4 _1 p3 Z$ k2 K
结束地址为+(46EE+1675)
回复 支持 反对

使用道具 举报

5#
发表于 2010-3-28 12:11 | 只看该作者
这个其实不用分析,这个dat是个包文件,已经有解包器了啊。
- o8 w& J3 Y- Z6 ?  Z1 a- P需要分析的是里面解出来的字体文件。字体文件的magic number是XCPK." E0 K8 {/ }6 t

* L/ I) _. y+ e4 ?) M8 L我想知道XCPK文件的结构。
回复 支持 反对

使用道具 举报

6#
发表于 2010-3-28 12:16 | 只看该作者
http://aluigi.altervista.org/papers.htm$ v& T+ k2 E+ f: v/ J, r# v

9 i( U& G8 c9 R2 t这里有stilllife2 dat文件解包器,配合quickbms使用
回复 支持 反对

使用道具 举报

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

回 楼主(jinxin8866) 的帖子

写屏函数:! n7 e7 a5 v% a( ]
02A0EA4C  |> /8B00        |/mov eax,dword ptr ds:[eax]( m6 e2 C( M$ n2 A$ \* _
02A0EA4E  |. |0FB70450    ||movzx eax,word ptr ds:[eax+edx*2]                    ;  [eax+edx*2]存放字符的UNICODE码
' z" Y2 P6 L, a* t02A0EA52  |. |8B7C24 14   ||mov edi,dword ptr ss:[esp+14]
; q$ E0 y7 y+ N) |% l7 ]02A0EA56  |. |8B7F 2C     ||mov edi,dword ptr ds:[edi+2C]
3 i0 B; Y) [6 N9 \8 m$ e02A0EA59  |. |8D04C0      ||lea eax,dword ptr ds:[eax+eax*8]
# J) P9 E+ d# \& |% Q0 Z- t+ m02A0EA5C  |. |8D0487      ||lea eax,dword ptr ds:[edi+eax*4]                     ;  eax存放字符编码表
4 V% l/ x0 x* V: g0 p  G- g每个字符码表占24(16进制)个字节
7 Y. s. Z* j$ e; ~$ u- B5 J02A0EA5F  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]9 j  w$ _9 B1 C8 b; y7 l1 ^* r
02A0EA63  |. |8D7C39 14   ||lea edi,dword ptr ds:[ecx+edi+14]                    ;  edi就是显存地址( ^4 \: s  L) @) N' [7 |
02A0EA67  |. |D940 04     ||fld dword ptr ds:[eax+4]4 v+ F% G% ~% J* }- U9 q
02A0EA6A  |. |83C2 01     ||add edx,1                                              字符个数加一
! c, E* [3 ]& h5 v- a02A0EA6D  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]; ~% {* Q& L8 M4 ^) y/ U* {" p
02A0EA71  |. |D900        ||fld dword ptr ds:[eax]& A  L# r) J% A7 ]9 l) h
02A0EA73  |. |D91F        ||fstp dword ptr ds:[edi]                              ;  edi就是显存地址
( _$ P* ?9 o0 F- d4 b. t每个字符占1C个字节,最后的四个字节都是一样的,可以认为是结束标志
. T" L! U6 n5 U2 E3 N$ V( s3 y# Y* y02A0EA75  |. |D94424 30   ||fld dword ptr ss:[esp+30]# \$ }  n& J; |1 f9 L8 k$ i8 ]
02A0EA79  |. |D95F 04     ||fstp dword ptr ds:[edi+4]! z3 }# L( o8 u& U
02A0EA7C  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]" k% |1 |9 ?! B  u$ N' E+ z
02A0EA80  |. |D940 04     ||fld dword ptr ds:[eax+4]; Y) q3 v, L! k8 O$ J, h8 O& ?3 H
02A0EA83  |. |8D7C39 30   ||lea edi,dword ptr ds:[ecx+edi+30]
4 R- N2 R: T. d. W1 n3 M02A0EA87  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]* V6 y9 {1 N- h6 ~3 y% G3 i/ z
02A0EA8B  |. |D940 08     ||fld dword ptr ds:[eax+8]3 ?2 a) u7 P- U1 J4 L  x% z3 f3 G
02A0EA8E  |. |D91F        ||fstp dword ptr ds:[edi]) H: E" I- g7 J( n8 ?: f# r
02A0EA90  |. |D94424 30   ||fld dword ptr ss:[esp+30]. g( X; A% w5 B
02A0EA94  |. |D95F 04     ||fstp dword ptr ds:[edi+4]0 u, m3 M7 s  |
02A0EA97  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]
! Y/ h2 `- V. _! `: G& R7 s- M2 L02A0EA9B  |. |D940 0C     ||fld dword ptr ds:[eax+C]. f* R1 v! e9 P5 v& y& [+ Y2 ~
02A0EA9E  |. |8D7C39 4C   ||lea edi,dword ptr ds:[ecx+edi+4C]" ]4 _; U- M5 B& @+ P
02A0EAA2  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]
/ d" H# \% L$ {6 u) a% N# l" M02A0EAA6  |. |D900        ||fld dword ptr ds:[eax]
9 k4 b6 L: H5 l02A0EAA8  |. |D91F        ||fstp dword ptr ds:[edi]
) v# a0 D" o7 ?" H9 d& Q2 M$ X" a0 x" A02A0EAAA  |. |D94424 30   ||fld dword ptr ss:[esp+30]
5 I& U( j- @; m/ b5 Z; W02A0EAAE  |. |D95F 04     ||fstp dword ptr ds:[edi+4]9 d" w0 N1 p5 F3 Q0 N4 {6 x
02A0EAB1  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]  g0 T4 n! _5 t' S% u
02A0EAB5  |. |D940 0C     ||fld dword ptr ds:[eax+C]
) D) ^# l5 G7 o  ~" M' T) ?, w02A0EAB8  |. |8D7C39 68   ||lea edi,dword ptr ds:[ecx+edi+68]
, N8 o1 d" e, F5 P/ F4 _; Y8 ^3 \) x02A0EABC  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]+ c, ]$ r, Z5 _0 T8 B
02A0EAC0  |. |83C1 70     ||add ecx,704 X- j: v, S  H' ^" f+ w
02A0EAC3  |. |D940 08     ||fld dword ptr ds:[eax+8]' {$ {1 T3 |5 W. P- O
02A0EAC6  |. |D91F        ||fstp dword ptr ds:[edi]
" y" E0 e4 K! J/ Q" h02A0EAC8  |. |D94424 30   ||fld dword ptr ss:[esp+30]) i) w" ]7 R! A0 D
02A0EACC  |. |D95F 04     ||fstp dword ptr ds:[edi+4]' ^: g3 d) m* Y9 v/ [  V' x+ h6 W0 s
02A0EACF  |. |8B46 58     ||mov eax,dword ptr ds:[esi+58]" x- h4 `5 \. x* Q
02A0EAD2  |. |03C3        ||add eax,ebx$ C# Q1 Z  {) v" h
02A0EAD4  |. |3B50 08     ||cmp edx,dword ptr ds:[eax+8], N3 c* m% O" v8 z0 }3 t! h7 q' ?% U
02A0EAD7  |.^\\0F8C 6FFFFF>|\\jl xcDxShad.02A0EA4C
0 V5 o# H, g9 q1 r; H0 o6 {4 j# A, |; B* D! `
本游戏字符编码采用UNICODE,
  ?' G3 d- z5 b2 E0 Q对字符码表的操作:
8 a. B" b) S8 C: A; J4 G10028807  |> /0FB702      /movzx eax,word ptr ds:[edx]        读字符的UNICODE码
% \  b. q7 r8 C, i' _* ^$ C1002880A  |. |8D04C0      |lea eax,dword ptr ds:[eax+eax*8]0 K/ R& T: v8 x: L
1002880D  |. |8D0483      |lea eax,dword ptr ds:[ebx+eax*4]   根据UNICODE码求得字符码表的地址; K) V+ f* G" U+ h4 Y7 Y; p
10028810  |. |33C9        |xor ecx,ecx
* L& c' Q- c6 N3 W% \10028812  |. |DB40 20     |fild dword ptr ds:[eax+20]0 \. P3 y: F( y# L9 I
10028815  |. |D95C24 14   |fstp dword ptr ss:[esp+14]3 U6 x- d4 S' O$ u6 Y
10028819  |. |D94424 14   |fld dword ptr ss:[esp+14]
4 l, t9 j) X1 \5 L) P1002881D  |. |D9C0        |fld st3 K( w3 g! K- j9 G  K. I& j" M1 q
1002881F  |. |D84E 14     |fmul dword ptr ds:[esi+14]; c$ g( v4 K9 b! G' N
10028822  |. |D94424 0C   |fld dword ptr ss:[esp+C]# l) r( t$ Z$ K. G( u, A
10028826  |. |D9C0        |fld st2 d. w+ s1 v5 q, L# U% O* w2 e  b5 X
10028828  |. |DEC2        |faddp st(2),st
* y8 S# f9 H6 `; r5 f1002882A  |. |D9C9        |fxch st(1)1 m: Y6 E( F4 s7 t
1002882C  |. |D95C24 14   |fstp dword ptr ss:[esp+14]. Y- n. `+ i/ u2 H9 U
10028830  |. |D8D3        |fcom st(3)# P$ d7 h+ A/ i1 Z; @- u& R$ s( m8 e/ A
10028832  |. |DFE0        |fstsw ax
9 E8 b/ U- L, d/ O10028834  |. |F6C4 01     |test ah,1
7 ]' `% v# E, T; d3 A: f& f( [: J$ G10028837  |. |74 2B       |je short xcEngine.10028864
% l( @: u' k  z) i10028839  |. |D94424 14   |fld dword ptr ss:[esp+14]
* |) {6 L( U6 u8 |- N7 h2 ^* W8 |1002883D  |. |D8D3        |fcom st(3)4 ?  }9 X% z: |
1002883F  |. |DFE0        |fstsw ax
  C* O0 }6 I) q" A& g10028841  |. |F6C4 41     |test ah,41; B5 }+ k) e# _
10028844  |. |7A 04       |jpe short xcEngine.1002884A
( t) A, l- L& V& c10028846  |. |DDD8        |fstp st% X" C$ d# A) @0 T* p9 e, A
10028848  |. |EB 1A       |jmp short xcEngine.100288641 Z! v  T  {$ q$ d
1002884A  |> |D9C9        |fxch st(1)
& o) r/ r# F' o1 W( y. ^# G1 H1002884C  |. |D8D3        |fcom st(3)
. g" S$ T% J8 m1 j3 c" S1002884E  |. |DFE0        |fstsw ax
2 ?# n- w& a, ^/ \6 o6 W10028850  |. |F6C4 05     |test ah,5) O/ @: B9 E2 R
10028853  |. |7A 04       |jpe short xcEngine.10028859
& }5 D0 b0 e% h$ K; f6 ]" A2 O0 `10028855  |. |DDD9        |fstp st(1)
: s  ]- \% C  a& H10028857  |. |EB 0B       |jmp short xcEngine.10028864& S$ r6 K7 n" e6 H
10028859  |> |D9C9        |fxch st(1); f. v  [+ m6 o- Q6 A
1002885B  |. |D8DC        |fcomp st(4)
# j( `( |5 D! i. E" T1002885D  |. |DFE0        |fstsw ax/ \( A* h+ e* i7 K
1002885F  |. |F6C4 41     |test ah,41
) K2 {, \9 o" S" b10028862  |. |75 05       |jnz short xcEngine.100288698 X, f) J* M0 P) F
10028864  |> |B9 01000000 |mov ecx,1
% ^4 r% g6 ?/ `10028869  |> |85C9        |test ecx,ecx
, U4 L/ p: Y9 R3 x! j3 t1002886B  |. |8B4424 18   |mov eax,dword ptr ss:[esp+18]
. s, y* J. P' N1002886F  |. |D940 14     |fld dword ptr ds:[eax+14]
' l! [9 l2 d9 g4 J& g( ]! J% C* n9 b10028872  |. |DECA        |fmulp st(2),st7 J' i/ y2 T) T- ^1 I% L& P
10028874  |. |DEC1        |faddp st(1),st2 I  }0 r( d6 S9 i* s  O
10028876  |. |D95C24 0C   |fstp dword ptr ss:[esp+C]- o+ B7 o4 K& i
1002887A  |. |75 05       |jnz short xcEngine.10028881
: J5 P, V1 A5 A" p3 ^! b1002887C  |. |834424 10 0>|add dword ptr ss:[esp+10],1
& t# [* Z) P8 }: |5 m2 H# R10028881  |> |83C2 02     |add edx,2
/ }1 u% }* }# @% T3 f1 s0 S# @3 p. \10028884  |. |83EF 01     |sub edi,1- K7 e' _4 f. v# _; O$ L
10028887  |.^\\0F85 7AFFFF>\\jnz xcEngine.100288072 R& R! e' W' Y8 V8 X7 P
由于算法采用了浮点数指令,本人不太懂,边学习边研究中。。。。。。。。。
回复 支持 反对

使用道具 举报

8#
发表于 2010-4-1 11:13 | 只看该作者
加油!UNICODE码内核的游戏?. B+ K1 z8 T$ J8 _+ L" B+ s7 m6 ~
看来汉化有希望啊。
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

回 8楼(shane007) 的帖子

找到了内存中字库的地址,可在下面这个位置下断,
" ^5 U- E+ q$ w5 _
& L% z3 ]( m0 q1 y  j4 Q02A0EA5C  |. |8D0487      ||lea eax,dword ptr ds:[edi+eax*4]                     ;  eax存放的就是字库的地址% G3 Q7 b) {* a5 |' ^
这个字库不是点阵的,经过修改,字符的形状可发生变化,应该是矢量字库
回复 支持 反对

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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