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

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

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

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

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

关于静物2的分析

00403CE0  |> /3B96 10110000    /cmp edx,dword ptr ds:[esi+1110]
( F+ \$ a  f" [) J4 G% v00403CE6  |. |1BC9             |sbb ecx,ecx5 v# W9 I$ I. \  b) ^- \4 T9 \' w
00403CE8  |. |23D1             |and edx,ecx  F3 r/ L: M$ D: G
00403CEA  |. |8B8E 0C110000    |mov ecx,dword ptr ds:[esi+110C]
0 o* j* {* K$ o( e9 a; l00403CF0  |. |8A0C0A           |mov cl,byte ptr ds:[edx+ecx]
& x8 t5 l. S" B! ?00403CF3  |. |3008             |xor byte ptr ds:[eax],cl                   ;  这个循环就是异或算法) x. h8 d" f& p1 p5 |1 l
00403CF5  |. |83C2 01          |add edx,1! H: W8 m" \) n
00403CF8  |. |83C0 01          |add eax,1  p/ c: m+ p0 p9 j$ q7 l8 j
00403CFB  |. |83EF 01          |sub edi,1. i" R' ?& u+ V. r0 M
00403CFE  |.^\75 E0            \jnz short SL2.00403CE0" D% g5 E+ s: J/ o) Z; I
. e$ |$ q1 w/ I* q1 ~. C

; k" s& p" o' v) v00401A42  |.  8D4C24 18        lea ecx,dword ptr ss:[esp+18]9 e6 O4 G$ L5 M8 P" h0 ?: Z
00401A46  |.  51               push ecx2 l) H7 \0 q4 O" f
00401A47  |.  8D4C24 24        lea ecx,dword ptr ss:[esp+24]* `* a5 M  C$ M1 \5 L
00401A4B  |.  C68424 58110000 >mov byte ptr ss:[esp+1158],1
9 |1 X6 \6 x/ i3 F" Q00401A53  |.  C687 08010000 00 mov byte ptr ds:[edi+108],09 k- H5 R2 M; p9 [$ a- O
00401A5A  |.  E8 51240000      call SL2.00403EB0                           ;  读取字体函数的开始四个字节& [7 d4 @: E1 n( x3 B
00401A5F  |.  817C24 18 474D47>cmp dword ptr ss:[esp+18],42474D47          ;  此处可判断出开始的四个字节应该是魔幻数
. i! y% O" y0 }+0 魔幻数: L1 p5 q  A* }( A
+4 段数,; w, ^; V+ n2 K0 o+ J+ M
下面开始是每段的头部
. R2 w! ~& u% K3 O/ `7 X- k+46EE 正文5 d5 j$ o2 C3 I

, T( T1 ?' `, v( p# h* r0203DDE0  2F 45 58 54 44 41 54 41 53 46 4F 4E 54 2F 41 52  /EXTDATASFONT/AR
( V, u1 O% P6 l; [# W0203DDF0  49 41 4C 20 31 31 2E 45 4E 00                    IAL 11.EN./ D$ |7 p; Q& J% S

+ b7 F9 P- ?( c# R( Z: Y0203DEE0              75 16 00 00 (EE 46) 00 00 2F 45 58 54      ..頕../EXT+ L, K' f& `, C* E/ E* R
0203DEF0  44 41 54 41 53 46 4F 4E 54 2F 41 52 49 41 4C 20  DATASFONT/ARIAL
" T5 D. B4 o+ g# q2 M0203DF00  31 32 2E 45 4E 00                                12.EN.5 B8 {0 W0 ]! Y/ _: j( G
+ c" D* K5 F; O- l( Y2 n
上面表中的数据除了括号中的(EE 46),其余全部与解包后文件数据一致,
9 \- x4 `7 f# s6 w1 ?2 _- x1675是这个段的长度,46EE是这个在文件中的偏移,每段偏移值的算法如下:$ l, q' h  ?1 P0 o, [! H
6 B& }0 o& A; d  ?! A, Y
00401AE0  |> /899401 08010000  /mov dword ptr ds:[ecx+eax+108],edx         ;  edx=46ee
) X$ i  n2 v1 u; A4 S1 s- b00401AE7  |. |8B06             |mov eax,dword ptr ds:[esi]                 ;  [esi]存放读取字符的地址, S# ~3 [& ^: x6 y
00401AE9  |. |039401 04010000  |add edx,dword ptr ds:[ecx+eax+104]
! T3 @0 v+ ], Q$ T+ T* L00401AF0  |. |83C3 01          |add ebx,1! X7 j# b$ o1 ?
00401AF3  |. |81C1 0C010000    |add ecx,10C
( S5 D( r$ v( C6 {8 k00401AF9  |. |3B5C24 14        |cmp ebx,dword ptr ss:[esp+14]              ;  [esp+14]=1C2
: S) ~8 r! _; ~: j& l' a% T00401AFD  |.^\72 E1            \jb short SL2.00401AE0
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

沙发
发表于 2010-3-28 11:32 | 只看该作者
首先对楼主的大力支持表示非常感谢!+ R& N: D, k* x5 f
想问一下,通过以上分析,能得出什么阶段性的结论吗?
回复 支持 反对

使用道具 举报

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

使用道具 举报

地板
 楼主| 发表于 2010-3-28 12:06 | 只看该作者
Sl2fnt.dat文件格式分析如下:
9 o7 M. I8 F+ b! J, d+0 474D4742  这个魔幻数
* f& ?* U# m& h  l7 ]8 A+ g" P! s/ v) u0 G+ A
+4 C2010000  表示有01C2个文件
  f; g6 R! ]9 ]9 |$ I1 t
  j4 Q, b, R. N2 N+8 2F4558544441544153464F4E542F415249414C2031312E454E00, Z/ z) q& [; m. e0 o) o; n& [4 V
/EXTDATASFONT/ARIAL 11.EN.u. A- T* w  F4 M; l) c8 K
这个应该是文件头部,ARIAL表示字体,EN表示英语 11表示字号
# C' f1 a1 {) [2 J, \! P( Q4 M0 y$ E5 x, }2 ^5 m* R' O
   751600 表示这个文件的大小! L! `2 a- y6 u0 _9 q8 q. i) k

! M0 m$ l* m& |" i3 O' E  ?每个文件的偏移由上文中的最后那个函数得出- Q! G+ Q. T) L- U  T' o
7 y: b1 u1 l/ Q5 {# }0 E
5 {, F7 f4 O4 z0 Q/ p2 o( ]  B
+46EE 此处开始是每个文件的正文
) L3 d3 Q/ W. f- u! m* \9 E4 Y8 _: o  B+ ?+ q, n5 {" ^2 @+ Y
如上面我举的这个例子,文件正文内容起始地址+46EE,
" d# l) F# b  [, F7 t. M/ z3 _结束地址为+(46EE+1675)
回复 支持 反对

使用道具 举报

5#
发表于 2010-3-28 12:11 | 只看该作者
这个其实不用分析,这个dat是个包文件,已经有解包器了啊。
0 P2 T0 @9 L2 k1 h* S需要分析的是里面解出来的字体文件。字体文件的magic number是XCPK.
. |' C2 R0 Z& i
# W6 C5 v% j& `- Z+ b, A% i我想知道XCPK文件的结构。
回复 支持 反对

使用道具 举报

6#
发表于 2010-3-28 12:16 | 只看该作者
http://aluigi.altervista.org/papers.htm
& G9 u* C3 U& U1 S; A- ]: @0 S  E, E6 a/ i
这里有stilllife2 dat文件解包器,配合quickbms使用
回复 支持 反对

使用道具 举报

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

回 楼主(jinxin8866) 的帖子

写屏函数:
$ ]5 d+ T# X: z/ g: [% W9 u02A0EA4C  |> /8B00        |/mov eax,dword ptr ds:[eax]
! I9 O3 V! e1 {, C; I$ D02A0EA4E  |. |0FB70450    ||movzx eax,word ptr ds:[eax+edx*2]                    ;  [eax+edx*2]存放字符的UNICODE码
4 j1 }  i. G; D$ c9 l( W02A0EA52  |. |8B7C24 14   ||mov edi,dword ptr ss:[esp+14]
5 q6 E: N5 s+ ^( e4 \4 t02A0EA56  |. |8B7F 2C     ||mov edi,dword ptr ds:[edi+2C]
& b$ m3 A& ^. {4 @- t4 {02A0EA59  |. |8D04C0      ||lea eax,dword ptr ds:[eax+eax*8]
4 i5 E2 [7 c  w1 u  W' E$ }( y02A0EA5C  |. |8D0487      ||lea eax,dword ptr ds:[edi+eax*4]                     ;  eax存放字符编码表8 D( B1 X; n' z1 U+ I1 Q
每个字符码表占24(16进制)个字节
8 Q: m0 \' h3 r( w2 ]& |& `02A0EA5F  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]
! H: e0 j9 y. D8 p02A0EA63  |. |8D7C39 14   ||lea edi,dword ptr ds:[ecx+edi+14]                    ;  edi就是显存地址
1 r* i/ D; C, l5 K02A0EA67  |. |D940 04     ||fld dword ptr ds:[eax+4]
! d( L5 K+ H7 W02A0EA6A  |. |83C2 01     ||add edx,1                                              字符个数加一; x3 S2 h8 }; b) u
02A0EA6D  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]
+ j& N( E" r0 ~) o; a+ {02A0EA71  |. |D900        ||fld dword ptr ds:[eax]
" a. B" \9 T. b* q. t# ~. D02A0EA73  |. |D91F        ||fstp dword ptr ds:[edi]                              ;  edi就是显存地址& N! f- K# H4 R3 I) y
每个字符占1C个字节,最后的四个字节都是一样的,可以认为是结束标志, h8 \1 m8 U# z: w+ B) |
02A0EA75  |. |D94424 30   ||fld dword ptr ss:[esp+30]% S' b( K$ C% K5 U7 s( _
02A0EA79  |. |D95F 04     ||fstp dword ptr ds:[edi+4]. U6 f2 y' ]7 z5 N1 ]+ {6 J
02A0EA7C  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]0 I, J4 S: `$ p, O3 I4 h7 L
02A0EA80  |. |D940 04     ||fld dword ptr ds:[eax+4]+ ^% k; O, y: g( g: o. x; u& c5 e
02A0EA83  |. |8D7C39 30   ||lea edi,dword ptr ds:[ecx+edi+30]
6 }8 V4 [. D4 B3 O8 U. p2 D02A0EA87  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]+ d% T; l, u" U8 J7 v2 B/ b
02A0EA8B  |. |D940 08     ||fld dword ptr ds:[eax+8]
" a# n0 J3 k8 x1 ^02A0EA8E  |. |D91F        ||fstp dword ptr ds:[edi]" B4 h$ Z+ c. M, S5 s6 c
02A0EA90  |. |D94424 30   ||fld dword ptr ss:[esp+30]1 I* l' _; B. ]! {9 f
02A0EA94  |. |D95F 04     ||fstp dword ptr ds:[edi+4]% z% I" ?1 N, a) @1 a% L
02A0EA97  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]$ o; a' J, u+ ]4 z
02A0EA9B  |. |D940 0C     ||fld dword ptr ds:[eax+C]: \9 A7 N* T* `) }) t3 f: o
02A0EA9E  |. |8D7C39 4C   ||lea edi,dword ptr ds:[ecx+edi+4C]% I  n- B3 f# y
02A0EAA2  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]
! Z/ B' J8 x! O8 W02A0EAA6  |. |D900        ||fld dword ptr ds:[eax]" X: \. X1 ]( L  m5 _+ `
02A0EAA8  |. |D91F        ||fstp dword ptr ds:[edi]) o: l2 h4 E2 [( |# ~
02A0EAAA  |. |D94424 30   ||fld dword ptr ss:[esp+30]
2 ]/ D1 |/ H. `. E02A0EAAE  |. |D95F 04     ||fstp dword ptr ds:[edi+4]
' A+ U; l) }- ^0 b02A0EAB1  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]
3 _: |4 e( U  ]; Z0 f02A0EAB5  |. |D940 0C     ||fld dword ptr ds:[eax+C]
3 o% R, H# a& h" h02A0EAB8  |. |8D7C39 68   ||lea edi,dword ptr ds:[ecx+edi+68]$ Y/ K. ?0 v3 e$ c  o: }& l
02A0EABC  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]) X  C) y( e) d/ {: k
02A0EAC0  |. |83C1 70     ||add ecx,702 I, r" e0 q0 ?' }8 V3 O
02A0EAC3  |. |D940 08     ||fld dword ptr ds:[eax+8]; M) y8 Y! _8 c  \0 H
02A0EAC6  |. |D91F        ||fstp dword ptr ds:[edi]3 `2 m4 O, S/ j# m0 |# Y
02A0EAC8  |. |D94424 30   ||fld dword ptr ss:[esp+30]! P$ U' j- N2 C# {- p
02A0EACC  |. |D95F 04     ||fstp dword ptr ds:[edi+4]
9 K1 Q3 V' [% G" L02A0EACF  |. |8B46 58     ||mov eax,dword ptr ds:[esi+58]
) ?% x5 A) p; @! a2 P% }02A0EAD2  |. |03C3        ||add eax,ebx
! q* G) c$ E9 m. v02A0EAD4  |. |3B50 08     ||cmp edx,dword ptr ds:[eax+8]
* q9 e6 C! M2 X! C2 |* j& [02A0EAD7  |.^\\0F8C 6FFFFF>|\\jl xcDxShad.02A0EA4C+ p" S& V3 G, R' V3 h5 e  I
; ]( J  x8 M: a  R
本游戏字符编码采用UNICODE,; e' [' K' ]+ v
对字符码表的操作:
: M, y* Q* A- M10028807  |> /0FB702      /movzx eax,word ptr ds:[edx]        读字符的UNICODE码- h" z) b7 w# X) z+ y( E
1002880A  |. |8D04C0      |lea eax,dword ptr ds:[eax+eax*8]% J" Y, ]- n: q, K) a( q
1002880D  |. |8D0483      |lea eax,dword ptr ds:[ebx+eax*4]   根据UNICODE码求得字符码表的地址( u+ E" Y: y$ \7 m) s
10028810  |. |33C9        |xor ecx,ecx- |# g- j* j  m; H
10028812  |. |DB40 20     |fild dword ptr ds:[eax+20]
* G9 J& L7 o  e' B8 _10028815  |. |D95C24 14   |fstp dword ptr ss:[esp+14]
) P; N' J, p' y" b9 O/ O: }4 b; E10028819  |. |D94424 14   |fld dword ptr ss:[esp+14]3 V" h% A( Z7 t9 L
1002881D  |. |D9C0        |fld st* @, J0 z4 @$ k0 v& H! H- c
1002881F  |. |D84E 14     |fmul dword ptr ds:[esi+14]* g0 g& `% T- o# t
10028822  |. |D94424 0C   |fld dword ptr ss:[esp+C]
$ J# u2 f" t9 l& s, r10028826  |. |D9C0        |fld st; X! C. K% y- C- ^+ z. c  g) c+ q
10028828  |. |DEC2        |faddp st(2),st( Z( c' p0 C" a! o
1002882A  |. |D9C9        |fxch st(1): {& c4 p# h+ L# c
1002882C  |. |D95C24 14   |fstp dword ptr ss:[esp+14]0 x  H0 \& t) c) R1 b& x
10028830  |. |D8D3        |fcom st(3)
! h, q) s# c( x) w0 D* Y0 [6 J10028832  |. |DFE0        |fstsw ax
& s, |* K! ?3 S10028834  |. |F6C4 01     |test ah,1
  k9 r' Y( a) \4 [10028837  |. |74 2B       |je short xcEngine.10028864; J3 G+ ?3 Z. y) P$ {
10028839  |. |D94424 14   |fld dword ptr ss:[esp+14]
9 T( e' Y8 O/ s; z6 v1002883D  |. |D8D3        |fcom st(3)6 A! P: n4 X  r" [8 k
1002883F  |. |DFE0        |fstsw ax4 j$ z$ k  _/ Q/ X
10028841  |. |F6C4 41     |test ah,41
# J  ]: ?) x) |10028844  |. |7A 04       |jpe short xcEngine.1002884A. c) v1 G! H& F( \) A; W
10028846  |. |DDD8        |fstp st+ |! r8 y! m" r' W
10028848  |. |EB 1A       |jmp short xcEngine.10028864
4 Y0 q% T# B4 |: m5 j1002884A  |> |D9C9        |fxch st(1)
* W8 X1 k1 V( ^0 c, x" K2 W) P0 u1002884C  |. |D8D3        |fcom st(3)
' u* `; y: \6 H* v1002884E  |. |DFE0        |fstsw ax
8 c3 z: c, U/ a" q/ C( H' F10028850  |. |F6C4 05     |test ah,5" G& D3 e$ ^; |2 A- K! u8 e
10028853  |. |7A 04       |jpe short xcEngine.10028859
6 r* ~1 C$ D3 x5 S) v* F10028855  |. |DDD9        |fstp st(1)2 `1 j( d# D9 }3 p* W% h
10028857  |. |EB 0B       |jmp short xcEngine.10028864
2 t$ n2 B3 W1 U4 h/ V10028859  |> |D9C9        |fxch st(1)
6 Q( A- @: \9 D1002885B  |. |D8DC        |fcomp st(4)
1 \0 u; e0 x" |1002885D  |. |DFE0        |fstsw ax
6 ?  u, d/ m8 l& w" Y1 Z1 i1002885F  |. |F6C4 41     |test ah,413 B" E2 o$ N; C/ p. |* p4 }
10028862  |. |75 05       |jnz short xcEngine.100288696 I) E9 ]5 V; G* f- I8 U# k' H
10028864  |> |B9 01000000 |mov ecx,1
2 J4 A1 h! Q# }' y% z& _) {+ P0 x+ @9 w10028869  |> |85C9        |test ecx,ecx2 u, o0 Y' p9 R+ j) q
1002886B  |. |8B4424 18   |mov eax,dword ptr ss:[esp+18]& x% V0 ^6 q# G7 S5 Z
1002886F  |. |D940 14     |fld dword ptr ds:[eax+14]
  F/ g0 c- K; F10028872  |. |DECA        |fmulp st(2),st- A* [# V3 v  v& f- }
10028874  |. |DEC1        |faddp st(1),st
7 H7 V% P5 T6 G10028876  |. |D95C24 0C   |fstp dword ptr ss:[esp+C]
" l" L% z* Y6 d1002887A  |. |75 05       |jnz short xcEngine.10028881
/ k! ]. u# I2 |8 a# i. {3 ?1002887C  |. |834424 10 0>|add dword ptr ss:[esp+10],1$ ]: {! X" [$ k9 z
10028881  |> |83C2 02     |add edx,2
% X2 K* e. ~- \/ L: g) X" C& }10028884  |. |83EF 01     |sub edi,15 l, t5 S5 r8 P  [7 B& ^: F5 z
10028887  |.^\\0F85 7AFFFF>\\jnz xcEngine.10028807
9 A; @$ Q; m* m+ J7 ]$ P由于算法采用了浮点数指令,本人不太懂,边学习边研究中。。。。。。。。。
回复 支持 反对

使用道具 举报

8#
发表于 2010-4-1 11:13 | 只看该作者
加油!UNICODE码内核的游戏?2 P5 s& ~! c1 R9 w5 b$ ^# n* `
看来汉化有希望啊。
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

回 8楼(shane007) 的帖子

找到了内存中字库的地址,可在下面这个位置下断,; F& Q" A9 l' S" Z. Q* [) B4 }" }

% `/ T( w7 T8 M6 W+ W8 \2 V02A0EA5C  |. |8D0487      ||lea eax,dword ptr ds:[edi+eax*4]                     ;  eax存放的就是字库的地址" U! |1 L- y' |2 A- _* T
这个字库不是点阵的,经过修改,字符的形状可发生变化,应该是矢量字库
回复 支持 反对

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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