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

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

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

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

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

关于静物2的分析

00403CE0  |> /3B96 10110000    /cmp edx,dword ptr ds:[esi+1110]
( ?3 `, Z) V  N- b& W$ o3 N6 A00403CE6  |. |1BC9             |sbb ecx,ecx) q, Z) }0 V# n9 L& B
00403CE8  |. |23D1             |and edx,ecx
7 |, {- H2 j# u& F9 C, @00403CEA  |. |8B8E 0C110000    |mov ecx,dword ptr ds:[esi+110C]
. p: ]. [/ J+ W: R% d4 i" R2 k( i00403CF0  |. |8A0C0A           |mov cl,byte ptr ds:[edx+ecx]+ [, C! E# `8 r
00403CF3  |. |3008             |xor byte ptr ds:[eax],cl                   ;  这个循环就是异或算法
! @$ W/ w$ p+ t& ~$ M7 R00403CF5  |. |83C2 01          |add edx,12 a# E# W  `4 t5 h: [% U
00403CF8  |. |83C0 01          |add eax,15 S5 i+ Z$ l' m: r
00403CFB  |. |83EF 01          |sub edi,1
; I" G! ]/ B) b6 `4 o  G00403CFE  |.^\75 E0            \jnz short SL2.00403CE03 ]9 @, a0 x5 t& a+ t* m

% l5 x5 t/ r% j; ^! l0 @0 O8 s* B
00401A42  |.  8D4C24 18        lea ecx,dword ptr ss:[esp+18]
4 _/ D$ C- R1 z( K00401A46  |.  51               push ecx
' \! E$ n" U( v4 f00401A47  |.  8D4C24 24        lea ecx,dword ptr ss:[esp+24]: _3 V; M$ `: j# f! B" I0 \
00401A4B  |.  C68424 58110000 >mov byte ptr ss:[esp+1158],1
7 u4 i3 O: X# q00401A53  |.  C687 08010000 00 mov byte ptr ds:[edi+108],0: ~4 E+ i/ u8 H4 h' b
00401A5A  |.  E8 51240000      call SL2.00403EB0                           ;  读取字体函数的开始四个字节
+ P+ ~) a, t2 [; o00401A5F  |.  817C24 18 474D47>cmp dword ptr ss:[esp+18],42474D47          ;  此处可判断出开始的四个字节应该是魔幻数9 G8 x: K; @6 j" @) m  \
+0 魔幻数
4 a' w& j& {) B$ x9 p+4 段数,
+ D$ J- s( |# x( R/ U. E下面开始是每段的头部
+ N1 K6 p+ p, k/ l0 l% \8 p7 D7 Z+46EE 正文
! a0 G5 Z. @" b
$ ]+ f! J  h/ ], M) _- s0203DDE0  2F 45 58 54 44 41 54 41 53 46 4F 4E 54 2F 41 52  /EXTDATASFONT/AR) N& y# K# J# h3 _/ A  c, e
0203DDF0  49 41 4C 20 31 31 2E 45 4E 00                    IAL 11.EN.: q, E! i6 }* K1 G+ ?, @

6 U# f8 X) Z; |3 F! A2 h0203DEE0              75 16 00 00 (EE 46) 00 00 2F 45 58 54      ..頕../EXT
% s0 m, _4 N. H, B& @0203DEF0  44 41 54 41 53 46 4F 4E 54 2F 41 52 49 41 4C 20  DATASFONT/ARIAL; d' ?% n+ R' t) h! u* g& |9 n- X# c
0203DF00  31 32 2E 45 4E 00                                12.EN.
# A1 ~. D- W8 f! J1 K5 H  ?' x: O  a  H8 W: `8 d/ i3 I
上面表中的数据除了括号中的(EE 46),其余全部与解包后文件数据一致,
+ \/ m" V- J! y& S/ B$ j% I% W1675是这个段的长度,46EE是这个在文件中的偏移,每段偏移值的算法如下:
: I# ^( a3 n# [2 U7 v9 M
/ Z8 K# E' n# I' V5 ^3 W0 W00401AE0  |> /899401 08010000  /mov dword ptr ds:[ecx+eax+108],edx         ;  edx=46ee
$ L% L9 Q8 h2 r5 u6 B+ n0 U00401AE7  |. |8B06             |mov eax,dword ptr ds:[esi]                 ;  [esi]存放读取字符的地址1 D+ E& F2 x+ v; s6 L$ n7 _
00401AE9  |. |039401 04010000  |add edx,dword ptr ds:[ecx+eax+104]
8 \: N7 n4 y' {* a% o00401AF0  |. |83C3 01          |add ebx,1
; y6 ]- m  s8 x3 [* p2 g- Z* v00401AF3  |. |81C1 0C010000    |add ecx,10C) w. |' [8 n$ R' O" k% X8 h
00401AF9  |. |3B5C24 14        |cmp ebx,dword ptr ss:[esp+14]              ;  [esp+14]=1C27 Y/ Z& Z8 _& p  s0 u$ O5 p8 u. j
00401AFD  |.^\72 E1            \jb short SL2.00401AE0
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

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

使用道具 举报

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

使用道具 举报

地板
 楼主| 发表于 2010-3-28 12:06 | 只看该作者
Sl2fnt.dat文件格式分析如下:3 p2 C  v% l3 C* k5 b) C+ Q
+0 474D4742  这个魔幻数$ U8 n1 `. ]+ N) c9 q' F
" b- Y$ _  g( Q9 E# @! E+ E8 ~8 T4 v
+4 C2010000  表示有01C2个文件' t& h" b+ P( ?9 e3 X- c0 f! J

- n& X. b' ]2 [1 Q) e+8 2F4558544441544153464F4E542F415249414C2031312E454E00
1 I, \( S$ {" R9 g8 u. W/EXTDATASFONT/ARIAL 11.EN.u
- K) P$ O! ]0 ~* O- H6 R这个应该是文件头部,ARIAL表示字体,EN表示英语 11表示字号$ L5 k8 s6 R7 H- k

  a4 j* ^6 v+ b! q   751600 表示这个文件的大小
& Q: \: p" }" T  s0 b) ]" q' C2 }3 P( _' \  O# i! O: N+ d
每个文件的偏移由上文中的最后那个函数得出
% c! f; Q. y! q8 {& T5 n$ k+ y, v7 P4 _5 W2 @: ]  k; `' Q9 J

# g# ]6 M1 ^' e. u( G, }# Z# H. m# q: f+46EE 此处开始是每个文件的正文
- a8 t$ b6 T$ u1 T5 O  b/ C" o
) x: k9 _7 m+ h6 f% U, q- \, q. ~5 ?如上面我举的这个例子,文件正文内容起始地址+46EE,
4 h" r* _0 P7 J/ Q" M$ v) G0 d; b结束地址为+(46EE+1675)
回复 支持 反对

使用道具 举报

5#
发表于 2010-3-28 12:11 | 只看该作者
这个其实不用分析,这个dat是个包文件,已经有解包器了啊。
2 E4 T+ N8 K* P( }1 \7 b需要分析的是里面解出来的字体文件。字体文件的magic number是XCPK.
: y" H, T, J% z" p  G- J( A
7 b+ s6 H4 y0 J( I& p7 B* p: g我想知道XCPK文件的结构。
回复 支持 反对

使用道具 举报

6#
发表于 2010-3-28 12:16 | 只看该作者
http://aluigi.altervista.org/papers.htm
/ e" R' m9 q8 W4 y. {8 H. ]
6 i* r( z! g- p2 b4 j+ A& s这里有stilllife2 dat文件解包器,配合quickbms使用
回复 支持 反对

使用道具 举报

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

回 楼主(jinxin8866) 的帖子

写屏函数:
' t- F( g5 C" ^: w02A0EA4C  |> /8B00        |/mov eax,dword ptr ds:[eax]; d! e$ |' O6 t
02A0EA4E  |. |0FB70450    ||movzx eax,word ptr ds:[eax+edx*2]                    ;  [eax+edx*2]存放字符的UNICODE码- F8 p- X3 d) m. g# w
02A0EA52  |. |8B7C24 14   ||mov edi,dword ptr ss:[esp+14]
2 z& V2 |! x2 f0 G$ I02A0EA56  |. |8B7F 2C     ||mov edi,dword ptr ds:[edi+2C]4 f* Z3 g# D2 ?' k
02A0EA59  |. |8D04C0      ||lea eax,dword ptr ds:[eax+eax*8]& A; B: D+ i! }1 O, O# }6 B
02A0EA5C  |. |8D0487      ||lea eax,dword ptr ds:[edi+eax*4]                     ;  eax存放字符编码表% t4 @3 |* w5 c) p5 A# l
每个字符码表占24(16进制)个字节
) ~- t5 W1 {, e4 u/ J02A0EA5F  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]
4 N: X) F8 w& N- R* W7 Q02A0EA63  |. |8D7C39 14   ||lea edi,dword ptr ds:[ecx+edi+14]                    ;  edi就是显存地址
. U) D! X6 j7 n/ @02A0EA67  |. |D940 04     ||fld dword ptr ds:[eax+4], C$ l# e" t( i/ b( D8 m# Q1 \
02A0EA6A  |. |83C2 01     ||add edx,1                                              字符个数加一
+ N' {- q+ T  ]+ K02A0EA6D  |. |D95C24 30   ||fstp dword ptr ss:[esp+30], M$ ^0 F* i! m# h- w
02A0EA71  |. |D900        ||fld dword ptr ds:[eax]
( _7 u! a; d" \9 H* [02A0EA73  |. |D91F        ||fstp dword ptr ds:[edi]                              ;  edi就是显存地址
$ G8 A$ Q2 d0 D; u( s' a$ ]1 f( K; P每个字符占1C个字节,最后的四个字节都是一样的,可以认为是结束标志
2 @7 Q$ K! {5 G' \9 z, N02A0EA75  |. |D94424 30   ||fld dword ptr ss:[esp+30]! R0 V! S& b& b! M
02A0EA79  |. |D95F 04     ||fstp dword ptr ds:[edi+4]( d+ Z6 ]" a5 q. X1 G& P
02A0EA7C  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]  A. J+ K! W8 p8 `9 k; v; v
02A0EA80  |. |D940 04     ||fld dword ptr ds:[eax+4]2 h, e6 t6 j5 z; ~- K
02A0EA83  |. |8D7C39 30   ||lea edi,dword ptr ds:[ecx+edi+30]; C: C% e( f, _5 n7 z
02A0EA87  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]
' H( D: z/ Y( z02A0EA8B  |. |D940 08     ||fld dword ptr ds:[eax+8]( D( b9 k* P3 |# k4 o/ }8 g" G
02A0EA8E  |. |D91F        ||fstp dword ptr ds:[edi]
$ l5 [3 T3 i- A2 L02A0EA90  |. |D94424 30   ||fld dword ptr ss:[esp+30]
# r" F& `# w1 {$ V4 Z. M02A0EA94  |. |D95F 04     ||fstp dword ptr ds:[edi+4]
* d( z# S) Z; a1 [9 S02A0EA97  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]- Q8 E! I$ t4 K& R0 u, i5 o
02A0EA9B  |. |D940 0C     ||fld dword ptr ds:[eax+C]
# P3 W  q# j& P+ s- X02A0EA9E  |. |8D7C39 4C   ||lea edi,dword ptr ds:[ecx+edi+4C]: L( |6 j* I' t7 S
02A0EAA2  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]  r* n9 u8 q! b- J
02A0EAA6  |. |D900        ||fld dword ptr ds:[eax]( P7 }' A8 A* u! t/ }' v, ]
02A0EAA8  |. |D91F        ||fstp dword ptr ds:[edi]
; e1 Z( j. I0 H* ^# o. D' O8 s" r- S02A0EAAA  |. |D94424 30   ||fld dword ptr ss:[esp+30]
5 c* F3 r4 Y; f8 q- d1 x02A0EAAE  |. |D95F 04     ||fstp dword ptr ds:[edi+4]3 g; q* M( p: E! {" l2 Y, _* z: V8 o- d
02A0EAB1  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]
( R+ b  P, b* G  `  k8 M02A0EAB5  |. |D940 0C     ||fld dword ptr ds:[eax+C]) C9 N+ V) \/ x% m/ r0 K( `
02A0EAB8  |. |8D7C39 68   ||lea edi,dword ptr ds:[ecx+edi+68]
' j+ Y9 Y, d/ f0 K5 P" d02A0EABC  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]9 L; M  j8 ^0 A9 N
02A0EAC0  |. |83C1 70     ||add ecx,70
  c1 |, Z4 z. M, G+ P3 g& T02A0EAC3  |. |D940 08     ||fld dword ptr ds:[eax+8]" r: E. A) N5 ]0 _3 N
02A0EAC6  |. |D91F        ||fstp dword ptr ds:[edi]
1 L, O4 M- u: A1 H* n) y02A0EAC8  |. |D94424 30   ||fld dword ptr ss:[esp+30]
4 y$ g/ i( N# e$ L' x02A0EACC  |. |D95F 04     ||fstp dword ptr ds:[edi+4]
* L/ Y1 E" r# N# ^$ c02A0EACF  |. |8B46 58     ||mov eax,dword ptr ds:[esi+58]
  d+ S: e3 {- Y8 s) z# n! A2 a1 p( t02A0EAD2  |. |03C3        ||add eax,ebx& {- h& p/ N9 H% Y# _" D# q
02A0EAD4  |. |3B50 08     ||cmp edx,dword ptr ds:[eax+8]5 x/ \9 [- k3 L
02A0EAD7  |.^\\0F8C 6FFFFF>|\\jl xcDxShad.02A0EA4C3 N1 H6 \% J+ {( p

' q# ]( |8 A1 ?1 z3 Q) K8 W7 J; Q本游戏字符编码采用UNICODE,' _) N+ V, Q  {. b" i/ c
对字符码表的操作:: G8 O# @- l6 m5 _
10028807  |> /0FB702      /movzx eax,word ptr ds:[edx]        读字符的UNICODE码3 Q7 E7 J% X4 Y+ e+ ~* X0 J
1002880A  |. |8D04C0      |lea eax,dword ptr ds:[eax+eax*8]
1 Y- x$ u% T- T$ {5 y! i1002880D  |. |8D0483      |lea eax,dword ptr ds:[ebx+eax*4]   根据UNICODE码求得字符码表的地址
' r' A) e2 E4 c10028810  |. |33C9        |xor ecx,ecx
  d. T: K, P% Q$ V$ \10028812  |. |DB40 20     |fild dword ptr ds:[eax+20]
" L7 D, e; z$ r/ i) ]5 d2 ?10028815  |. |D95C24 14   |fstp dword ptr ss:[esp+14]
2 E% \' [0 E2 z4 @9 ^& L/ Z10028819  |. |D94424 14   |fld dword ptr ss:[esp+14]
/ d+ R$ K" w1 ?& @1002881D  |. |D9C0        |fld st
3 Y0 g( [! N' F; B  p- s# R1002881F  |. |D84E 14     |fmul dword ptr ds:[esi+14]
1 ]" v: E+ ?* Y10028822  |. |D94424 0C   |fld dword ptr ss:[esp+C]6 N2 B- Q. z/ F# x
10028826  |. |D9C0        |fld st
4 W+ D) g4 l, d5 K1 {0 h4 g8 g10028828  |. |DEC2        |faddp st(2),st
; ]0 x4 q( T, s1 K. _$ Q3 _1002882A  |. |D9C9        |fxch st(1)* S( ]4 S! d% q8 A5 O! _
1002882C  |. |D95C24 14   |fstp dword ptr ss:[esp+14], ?1 k" H1 X5 B, g6 A9 Y8 `
10028830  |. |D8D3        |fcom st(3)$ W: x, a4 [7 c6 Z# X, Q9 L
10028832  |. |DFE0        |fstsw ax
3 ?: \  m' V. {2 B: ~8 a10028834  |. |F6C4 01     |test ah,1& g" A2 x0 I, c
10028837  |. |74 2B       |je short xcEngine.10028864) s1 L3 y) J6 @1 q/ t$ v( y
10028839  |. |D94424 14   |fld dword ptr ss:[esp+14]
$ ~5 g( n! k6 V1002883D  |. |D8D3        |fcom st(3)
* q6 x% |6 p( F- p) i( L, [1002883F  |. |DFE0        |fstsw ax
0 [! C" V( _, r) \" i10028841  |. |F6C4 41     |test ah,41
' {! B6 C/ @: r7 Q+ ~6 P1 S  X10028844  |. |7A 04       |jpe short xcEngine.1002884A; q$ O9 T( s7 l% Y
10028846  |. |DDD8        |fstp st) @/ |' P( s5 q* S
10028848  |. |EB 1A       |jmp short xcEngine.10028864& w+ W7 @( i4 I( o$ X/ _! d
1002884A  |> |D9C9        |fxch st(1). }, L6 L! e7 v: z4 o' F) ]: u
1002884C  |. |D8D3        |fcom st(3)% |) F/ J5 X4 u3 G& N' E/ `
1002884E  |. |DFE0        |fstsw ax
" N+ t! z9 g$ g10028850  |. |F6C4 05     |test ah,5
  p- t+ T7 |9 g; ^2 N$ Z4 i10028853  |. |7A 04       |jpe short xcEngine.10028859
( B+ B7 ?( G. Y; Z10028855  |. |DDD9        |fstp st(1)
6 _: M% _4 c- H- t10028857  |. |EB 0B       |jmp short xcEngine.10028864
1 T+ t$ j) F/ u2 p- ]2 A# }10028859  |> |D9C9        |fxch st(1)6 h& Q( f, n4 i
1002885B  |. |D8DC        |fcomp st(4)
0 j4 R8 C8 c! ^2 I. m1002885D  |. |DFE0        |fstsw ax
5 J0 \. J- J$ b: y5 a* M1002885F  |. |F6C4 41     |test ah,41$ k" }$ j9 h+ i3 o1 \, Y
10028862  |. |75 05       |jnz short xcEngine.10028869( [5 x9 S! N  z8 s; @. N1 O4 t
10028864  |> |B9 01000000 |mov ecx,1
( s/ q* P4 I+ J& l9 P10028869  |> |85C9        |test ecx,ecx- A. M2 i3 q9 n
1002886B  |. |8B4424 18   |mov eax,dword ptr ss:[esp+18]) m# e8 `6 ]% Y  Z  @0 y
1002886F  |. |D940 14     |fld dword ptr ds:[eax+14]
2 w2 H" [, x; S10028872  |. |DECA        |fmulp st(2),st
8 ?$ b  f- t6 A. z" n) E- j: x10028874  |. |DEC1        |faddp st(1),st
/ R; n' [# _! p2 V+ `10028876  |. |D95C24 0C   |fstp dword ptr ss:[esp+C]
, M# w  W- h9 n1002887A  |. |75 05       |jnz short xcEngine.10028881* A  r* e# J& C6 e1 q0 Z2 H
1002887C  |. |834424 10 0>|add dword ptr ss:[esp+10],16 q. t& f. S% ^. `& k
10028881  |> |83C2 02     |add edx,20 u3 k' O* ^# S! l2 x" Q! N& ^
10028884  |. |83EF 01     |sub edi,17 p/ z- f0 J$ c. z& F6 r
10028887  |.^\\0F85 7AFFFF>\\jnz xcEngine.10028807
$ y7 g' G2 @" l' D9 Q, g- J由于算法采用了浮点数指令,本人不太懂,边学习边研究中。。。。。。。。。
回复 支持 反对

使用道具 举报

8#
发表于 2010-4-1 11:13 | 只看该作者
加油!UNICODE码内核的游戏?1 j6 l( `, o1 o2 p& t5 G
看来汉化有希望啊。
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

回 8楼(shane007) 的帖子

找到了内存中字库的地址,可在下面这个位置下断,
0 V. j: M% e' L/ p& V& {; |& r9 q' ^! F8 w/ S
02A0EA5C  |. |8D0487      ||lea eax,dword ptr ds:[edi+eax*4]                     ;  eax存放的就是字库的地址8 f  }3 `" g% j
这个字库不是点阵的,经过修改,字符的形状可发生变化,应该是矢量字库
回复 支持 反对

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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