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

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

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

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

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

关于静物2的分析

00403CE0  |> /3B96 10110000    /cmp edx,dword ptr ds:[esi+1110]6 |4 y' o/ E8 h. @* U9 i1 h* A) Y
00403CE6  |. |1BC9             |sbb ecx,ecx0 M, y: ^2 D  Q( F
00403CE8  |. |23D1             |and edx,ecx- W" u3 t) q1 ]# T/ e; m6 D
00403CEA  |. |8B8E 0C110000    |mov ecx,dword ptr ds:[esi+110C]
# ~4 G' h( N# O' Q/ r00403CF0  |. |8A0C0A           |mov cl,byte ptr ds:[edx+ecx]
6 I. Y1 z8 S9 v, J; \00403CF3  |. |3008             |xor byte ptr ds:[eax],cl                   ;  这个循环就是异或算法
: q% n; e. ]' |# {( l00403CF5  |. |83C2 01          |add edx,1  s* Y6 N# h/ `( b, c! H, U. Z
00403CF8  |. |83C0 01          |add eax,1
5 e, `7 g$ l& T! |/ |00403CFB  |. |83EF 01          |sub edi,1
5 t9 L7 i' j! t' p; |: s* q00403CFE  |.^\75 E0            \jnz short SL2.00403CE0
1 q9 y: `9 d7 t4 i. z  r! K, Z- f, X" z9 \9 G

6 y( P* h1 u4 w+ c) n& _4 i5 E00401A42  |.  8D4C24 18        lea ecx,dword ptr ss:[esp+18]
' K& g# g# h+ ]0 H6 @00401A46  |.  51               push ecx
( h8 A0 M) D7 K1 {  h4 J6 H" e00401A47  |.  8D4C24 24        lea ecx,dword ptr ss:[esp+24]3 Y* b) B7 R$ i1 o( |8 z
00401A4B  |.  C68424 58110000 >mov byte ptr ss:[esp+1158],10 |. P& `! y5 p6 L# w/ l1 s9 q+ |$ A: M
00401A53  |.  C687 08010000 00 mov byte ptr ds:[edi+108],0& u4 }1 F- o! [9 x3 k
00401A5A  |.  E8 51240000      call SL2.00403EB0                           ;  读取字体函数的开始四个字节% u% d. s6 d4 K
00401A5F  |.  817C24 18 474D47>cmp dword ptr ss:[esp+18],42474D47          ;  此处可判断出开始的四个字节应该是魔幻数# `  r) P2 z  ]0 Q* g% K6 P
+0 魔幻数
; J1 n3 @0 P* A) s  i4 P' P. H( w+4 段数,8 A0 ?" z% X+ |" }) o! v( T/ Q
下面开始是每段的头部6 S+ v! x( J1 Z0 j
+46EE 正文9 T$ {8 e! L% j5 ]8 w

* z# E# G/ r' v$ P0203DDE0  2F 45 58 54 44 41 54 41 53 46 4F 4E 54 2F 41 52  /EXTDATASFONT/AR
6 V! _# {5 Q5 O* T  I: f0203DDF0  49 41 4C 20 31 31 2E 45 4E 00                    IAL 11.EN.
: y9 F2 r$ a8 ^5 u- S) ~0 L/ n7 T1 u$ F/ b+ Q1 J7 p2 s
0203DEE0              75 16 00 00 (EE 46) 00 00 2F 45 58 54      ..頕../EXT
8 ?" J/ R( x3 }5 l. R0203DEF0  44 41 54 41 53 46 4F 4E 54 2F 41 52 49 41 4C 20  DATASFONT/ARIAL: e' ^8 r# J# S6 v) w3 `0 F
0203DF00  31 32 2E 45 4E 00                                12.EN.
6 B5 h0 {6 C- K2 I. S* K& t- M& ^  t0 q% T3 \
上面表中的数据除了括号中的(EE 46),其余全部与解包后文件数据一致,
+ Q# c: R! c; N& ?1675是这个段的长度,46EE是这个在文件中的偏移,每段偏移值的算法如下:
: a' A3 ~- F1 V9 n2 i4 V; {1 E7 s, p0 j/ \5 H
00401AE0  |> /899401 08010000  /mov dword ptr ds:[ecx+eax+108],edx         ;  edx=46ee4 ?" H4 a* t8 K9 i# k
00401AE7  |. |8B06             |mov eax,dword ptr ds:[esi]                 ;  [esi]存放读取字符的地址
2 P2 u3 e+ T- a; F00401AE9  |. |039401 04010000  |add edx,dword ptr ds:[ecx+eax+104]7 x5 P6 q- K- I* I. P
00401AF0  |. |83C3 01          |add ebx,1
- ?. B0 v* D/ ~' g% L00401AF3  |. |81C1 0C010000    |add ecx,10C  c' u" W3 ?: h, Q" a
00401AF9  |. |3B5C24 14        |cmp ebx,dword ptr ss:[esp+14]              ;  [esp+14]=1C2
0 W, H. b4 B6 k( |* ^00401AFD  |.^\72 E1            \jb short SL2.00401AE0
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

沙发
发表于 2010-3-28 11:32 | 只看该作者
首先对楼主的大力支持表示非常感谢!
. j0 ~$ f) `+ B+ B" u想问一下,通过以上分析,能得出什么阶段性的结论吗?
回复 支持 反对

使用道具 举报

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

使用道具 举报

地板
 楼主| 发表于 2010-3-28 12:06 | 只看该作者
Sl2fnt.dat文件格式分析如下:
! x; r4 o3 S+ g6 E. S/ R+ F+0 474D4742  这个魔幻数
/ h( p9 A) k5 r- A/ N. t7 l% z$ K- \+ T, E% D9 ~
+4 C2010000  表示有01C2个文件. J; ?( M' W/ M5 c4 \0 G6 t3 u
% r4 m  r: P! k9 u3 m1 ^! u% n0 g8 i
+8 2F4558544441544153464F4E542F415249414C2031312E454E00
/ t2 [; I* C9 l4 s6 ]/EXTDATASFONT/ARIAL 11.EN.u
1 K3 J) n# C4 o5 l这个应该是文件头部,ARIAL表示字体,EN表示英语 11表示字号( Y( L, p- M3 j
4 J% c7 r: y* a3 Z4 d0 C
   751600 表示这个文件的大小
7 h6 b7 |( i: h# E1 P3 c3 ^0 d: p5 w, S( k3 @
每个文件的偏移由上文中的最后那个函数得出/ _! v, I0 w5 C9 W0 F# C2 @
, W" T/ ~9 m' y. S. K2 e8 g
- G1 n" q5 F) h7 A6 P
+46EE 此处开始是每个文件的正文: y1 E  ?* |5 P( _

, e1 _% A6 M& P& I' I& u如上面我举的这个例子,文件正文内容起始地址+46EE,
7 l5 A2 B! K1 o  f1 b* \结束地址为+(46EE+1675)
回复 支持 反对

使用道具 举报

5#
发表于 2010-3-28 12:11 | 只看该作者
这个其实不用分析,这个dat是个包文件,已经有解包器了啊。, W" \3 ^9 H2 ^% j8 h2 X" \, H
需要分析的是里面解出来的字体文件。字体文件的magic number是XCPK./ C: g7 Q9 ^- K6 I" q

4 y; |& W  ~) p7 T- k我想知道XCPK文件的结构。
回复 支持 反对

使用道具 举报

6#
发表于 2010-3-28 12:16 | 只看该作者
http://aluigi.altervista.org/papers.htm0 |4 {7 G) J' ~3 F/ [

. l- |- ]$ V: L4 g这里有stilllife2 dat文件解包器,配合quickbms使用
回复 支持 反对

使用道具 举报

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

回 楼主(jinxin8866) 的帖子

写屏函数:
" L5 t$ O. C# K! y1 R02A0EA4C  |> /8B00        |/mov eax,dword ptr ds:[eax]
5 B0 S4 p# v- X9 m0 s02A0EA4E  |. |0FB70450    ||movzx eax,word ptr ds:[eax+edx*2]                    ;  [eax+edx*2]存放字符的UNICODE码+ ~8 l& R; Q7 A7 G) B
02A0EA52  |. |8B7C24 14   ||mov edi,dword ptr ss:[esp+14]
0 p" O1 \; M  l- V! C1 L( ~02A0EA56  |. |8B7F 2C     ||mov edi,dword ptr ds:[edi+2C]
2 K. F6 e* H7 Y. q. J9 Q. S$ F( z& T02A0EA59  |. |8D04C0      ||lea eax,dword ptr ds:[eax+eax*8]
1 p% N( }* p$ e4 @% g0 p02A0EA5C  |. |8D0487      ||lea eax,dword ptr ds:[edi+eax*4]                     ;  eax存放字符编码表
6 v. x# X8 b4 J- o每个字符码表占24(16进制)个字节* m+ n. a1 E3 g2 a! Y
02A0EA5F  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]
5 j: ^- ?5 n/ O6 W. r& {02A0EA63  |. |8D7C39 14   ||lea edi,dword ptr ds:[ecx+edi+14]                    ;  edi就是显存地址, Z- t+ `2 e7 I4 j
02A0EA67  |. |D940 04     ||fld dword ptr ds:[eax+4]
2 W" t: h8 V* F+ p( a; ~02A0EA6A  |. |83C2 01     ||add edx,1                                              字符个数加一) b+ r1 G7 J- [/ b
02A0EA6D  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]  ]2 @. e8 o, N2 a* o+ }3 x4 n6 f
02A0EA71  |. |D900        ||fld dword ptr ds:[eax]
# W$ q3 f2 z/ t+ \02A0EA73  |. |D91F        ||fstp dword ptr ds:[edi]                              ;  edi就是显存地址
) b! h6 A/ K" |每个字符占1C个字节,最后的四个字节都是一样的,可以认为是结束标志
& p( P( V2 t0 v. V02A0EA75  |. |D94424 30   ||fld dword ptr ss:[esp+30]
# y+ \. }% o" m2 m' }* B02A0EA79  |. |D95F 04     ||fstp dword ptr ds:[edi+4]
/ _; q1 o, ]7 T  ~6 I0 m02A0EA7C  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]
6 j. x' y( E* x( g1 X/ `02A0EA80  |. |D940 04     ||fld dword ptr ds:[eax+4]
) p2 L- C( M' l( B; [: y02A0EA83  |. |8D7C39 30   ||lea edi,dword ptr ds:[ecx+edi+30]
1 T! Z9 w' f& ]+ s+ P  @4 d4 x02A0EA87  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]% z( h1 W7 t( r1 \
02A0EA8B  |. |D940 08     ||fld dword ptr ds:[eax+8]
# u6 b* l+ b& V  w; G# H" I02A0EA8E  |. |D91F        ||fstp dword ptr ds:[edi]
( K: c7 D; [* Y) P# x5 U02A0EA90  |. |D94424 30   ||fld dword ptr ss:[esp+30]
) U& x4 k8 }: v8 b7 Y3 R4 W8 i( S02A0EA94  |. |D95F 04     ||fstp dword ptr ds:[edi+4]
, ^( @6 v3 Z- \) ^1 |' _02A0EA97  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]
+ k; ~. h; b! y( L- i7 e02A0EA9B  |. |D940 0C     ||fld dword ptr ds:[eax+C]8 k0 l( s2 A7 s) Q: R# G
02A0EA9E  |. |8D7C39 4C   ||lea edi,dword ptr ds:[ecx+edi+4C]! x7 A) @+ m9 Z" N2 V4 K
02A0EAA2  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]) e5 }* G' M3 e
02A0EAA6  |. |D900        ||fld dword ptr ds:[eax]; b" T' ~- H) d8 F! _$ z, u( a
02A0EAA8  |. |D91F        ||fstp dword ptr ds:[edi]  X1 R6 h) ]4 U. R0 K. J9 c9 x
02A0EAAA  |. |D94424 30   ||fld dword ptr ss:[esp+30]  X5 b% U% l* [, k
02A0EAAE  |. |D95F 04     ||fstp dword ptr ds:[edi+4]
8 F% Y) e+ ]1 w6 C! R7 J2 X: f02A0EAB1  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]
- D, w' F' [% P8 ~3 E02A0EAB5  |. |D940 0C     ||fld dword ptr ds:[eax+C]
/ @# D# ]6 k9 Y- I7 l) [3 p& f, B02A0EAB8  |. |8D7C39 68   ||lea edi,dword ptr ds:[ecx+edi+68]
7 x5 e- u) Z& k, r4 a) I" C02A0EABC  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]1 g2 M) c" E5 f2 Y  e8 U3 N
02A0EAC0  |. |83C1 70     ||add ecx,70
3 x- ~- I8 g$ O  S0 G' J- `2 ?' R02A0EAC3  |. |D940 08     ||fld dword ptr ds:[eax+8]
  H( L7 \* q& J+ `* v& U$ ]4 }02A0EAC6  |. |D91F        ||fstp dword ptr ds:[edi]: S' q; @# [. Q, U
02A0EAC8  |. |D94424 30   ||fld dword ptr ss:[esp+30]
9 N4 q' F8 Q7 C! x/ a; n% `02A0EACC  |. |D95F 04     ||fstp dword ptr ds:[edi+4]1 `* P6 r* S& L6 o
02A0EACF  |. |8B46 58     ||mov eax,dword ptr ds:[esi+58]0 Y7 D& P8 Q$ n. m& P: V( D
02A0EAD2  |. |03C3        ||add eax,ebx
6 d6 x2 m' ^8 d$ j  G02A0EAD4  |. |3B50 08     ||cmp edx,dword ptr ds:[eax+8]& r. ~) f  I* r) C& M; ]1 h
02A0EAD7  |.^\\0F8C 6FFFFF>|\\jl xcDxShad.02A0EA4C
% g( H9 l  v1 X2 u+ ~/ i4 n0 k. n4 n
本游戏字符编码采用UNICODE,
/ t3 ~6 a. Y' w/ c2 ?对字符码表的操作:/ @/ q' }6 Y: [2 |
10028807  |> /0FB702      /movzx eax,word ptr ds:[edx]        读字符的UNICODE码
. R5 }0 \6 q! s5 I1002880A  |. |8D04C0      |lea eax,dword ptr ds:[eax+eax*8]
1 d% S5 t6 j. g/ R4 i1002880D  |. |8D0483      |lea eax,dword ptr ds:[ebx+eax*4]   根据UNICODE码求得字符码表的地址/ I5 D+ T0 g- M8 b
10028810  |. |33C9        |xor ecx,ecx+ }* L( H; [4 u- M, e
10028812  |. |DB40 20     |fild dword ptr ds:[eax+20]
8 Z  Y# D' P4 C5 s10028815  |. |D95C24 14   |fstp dword ptr ss:[esp+14]3 |2 `+ _& l! j, s" @8 K
10028819  |. |D94424 14   |fld dword ptr ss:[esp+14]
0 F9 L$ Y- z6 F8 q1002881D  |. |D9C0        |fld st
( ~  P7 C2 w1 p* G! Z3 C1002881F  |. |D84E 14     |fmul dword ptr ds:[esi+14]
8 {) Q, J8 N* `6 Z10028822  |. |D94424 0C   |fld dword ptr ss:[esp+C]
9 {* X2 m! G5 ~. @10028826  |. |D9C0        |fld st1 V7 N! Y% v! m8 r  Q. R
10028828  |. |DEC2        |faddp st(2),st  \3 [" I9 m! o$ ]6 b7 \1 i
1002882A  |. |D9C9        |fxch st(1)* R4 E4 Z5 v8 q' Q+ f% u
1002882C  |. |D95C24 14   |fstp dword ptr ss:[esp+14]
3 s- [% ^: ~' R6 U+ f4 Y10028830  |. |D8D3        |fcom st(3), y2 Q2 M7 F  b0 z
10028832  |. |DFE0        |fstsw ax* y- j# d1 ?1 |8 R
10028834  |. |F6C4 01     |test ah,1" G# y& j8 Z' R* {; H
10028837  |. |74 2B       |je short xcEngine.10028864
5 B# N. i. U, v" H; e10028839  |. |D94424 14   |fld dword ptr ss:[esp+14]( T/ H; P! f  Q: N2 o$ T7 s
1002883D  |. |D8D3        |fcom st(3)
& g$ k! \+ y0 }1002883F  |. |DFE0        |fstsw ax
+ @6 J% L9 L" Q8 f9 G) L/ c10028841  |. |F6C4 41     |test ah,41
/ ?. d9 `! }7 M$ g7 U1 H) i10028844  |. |7A 04       |jpe short xcEngine.1002884A) U. Y$ I( K9 c- C# _
10028846  |. |DDD8        |fstp st
' K; f' @1 U9 J% G/ O/ @! w10028848  |. |EB 1A       |jmp short xcEngine.10028864( f8 @/ S7 v+ Z  d7 s5 n# Y
1002884A  |> |D9C9        |fxch st(1)
  [4 l0 O( }3 F4 V5 S1002884C  |. |D8D3        |fcom st(3)
- H, i: H. w3 g5 f. S1 H$ @* T1002884E  |. |DFE0        |fstsw ax( e: R3 ^% v: c2 n9 S) Z7 n
10028850  |. |F6C4 05     |test ah,53 \5 Q& G4 o! z6 r' k& V, x
10028853  |. |7A 04       |jpe short xcEngine.10028859  @% J3 J0 O7 U+ ~
10028855  |. |DDD9        |fstp st(1)
% y/ S9 i! @3 K( z, y4 p+ D10028857  |. |EB 0B       |jmp short xcEngine.10028864
- ?% i2 \1 l; q, B10028859  |> |D9C9        |fxch st(1)
! H  V( k; B* i4 D( K+ Y1002885B  |. |D8DC        |fcomp st(4)
- w$ f5 k; b7 a, O1002885D  |. |DFE0        |fstsw ax# [( G# C; B: d6 r1 _! @
1002885F  |. |F6C4 41     |test ah,416 ]1 W; P6 E# N8 ~; ^% w' Q
10028862  |. |75 05       |jnz short xcEngine.10028869
& ]* Z5 _- k5 o) ?' x1 B% \; d5 U10028864  |> |B9 01000000 |mov ecx,1- U4 l' I" |' a& l6 q$ Z5 N0 f
10028869  |> |85C9        |test ecx,ecx
4 V9 I' e& F' K3 O' j1002886B  |. |8B4424 18   |mov eax,dword ptr ss:[esp+18]# ^* o& e" D9 M$ J+ c
1002886F  |. |D940 14     |fld dword ptr ds:[eax+14]! \9 N* F2 @' u7 n8 d
10028872  |. |DECA        |fmulp st(2),st
/ E. ]( |: x  g( t10028874  |. |DEC1        |faddp st(1),st
" h: ~0 ~% I  i* J& t! e10028876  |. |D95C24 0C   |fstp dword ptr ss:[esp+C]
; e. d4 b8 r4 x8 {" ~1002887A  |. |75 05       |jnz short xcEngine.10028881
+ D) v; `) J: y9 P% u$ M1002887C  |. |834424 10 0>|add dword ptr ss:[esp+10],1! ^6 j) T% D8 `3 A! N
10028881  |> |83C2 02     |add edx,2' o: G8 r: K  b* c8 A% j0 B
10028884  |. |83EF 01     |sub edi,1) l/ M- F1 I. Q6 S; F
10028887  |.^\\0F85 7AFFFF>\\jnz xcEngine.100288073 }, A6 [- u+ ]* O2 J3 L$ w
由于算法采用了浮点数指令,本人不太懂,边学习边研究中。。。。。。。。。
回复 支持 反对

使用道具 举报

8#
发表于 2010-4-1 11:13 | 只看该作者
加油!UNICODE码内核的游戏?$ p- E2 Z) D3 h7 M. L
看来汉化有希望啊。
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

回 8楼(shane007) 的帖子

找到了内存中字库的地址,可在下面这个位置下断,! c6 P" e% O! F5 C( X; M& s: [, _
0 q" p3 g5 [  L- l
02A0EA5C  |. |8D0487      ||lea eax,dword ptr ds:[edi+eax*4]                     ;  eax存放的就是字库的地址1 S2 ]$ `6 O' M( l
这个字库不是点阵的,经过修改,字符的形状可发生变化,应该是矢量字库
回复 支持 反对

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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