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

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

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

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

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

关于静物2的分析

00403CE0  |> /3B96 10110000    /cmp edx,dword ptr ds:[esi+1110]
5 g& {- F8 ^* O/ U9 `00403CE6  |. |1BC9             |sbb ecx,ecx" ~7 `- w, B# i
00403CE8  |. |23D1             |and edx,ecx+ s0 W9 X8 s8 c2 N
00403CEA  |. |8B8E 0C110000    |mov ecx,dword ptr ds:[esi+110C]# D$ M  j, l8 J7 T
00403CF0  |. |8A0C0A           |mov cl,byte ptr ds:[edx+ecx]
: W: U# f& f# z, S, C2 `7 H00403CF3  |. |3008             |xor byte ptr ds:[eax],cl                   ;  这个循环就是异或算法7 g# E* j2 I2 i
00403CF5  |. |83C2 01          |add edx,1
% m9 S* v, @1 H, b, B00403CF8  |. |83C0 01          |add eax,1; }3 [. R% o1 p7 u( h
00403CFB  |. |83EF 01          |sub edi,1
" N6 c* B; [7 \9 P- _. |+ X00403CFE  |.^\75 E0            \jnz short SL2.00403CE0
. Q/ o; k7 o" q; D  d) B$ f
1 b: p3 z: R9 z
8 h- p5 A* P) C# w# k$ |00401A42  |.  8D4C24 18        lea ecx,dword ptr ss:[esp+18]; c8 o$ V# j, `1 g5 V$ ~/ v' J
00401A46  |.  51               push ecx- y6 d& K0 \7 _& f, ^  Q2 d8 G
00401A47  |.  8D4C24 24        lea ecx,dword ptr ss:[esp+24]  S4 I& t. I6 s) ?4 J0 a! v7 F& {, _
00401A4B  |.  C68424 58110000 >mov byte ptr ss:[esp+1158],1
' P6 m. J* r5 ?. R1 v1 U00401A53  |.  C687 08010000 00 mov byte ptr ds:[edi+108],0; B  l+ W1 r$ ]1 n8 `7 b  N
00401A5A  |.  E8 51240000      call SL2.00403EB0                           ;  读取字体函数的开始四个字节
: q+ s, V! j. ^+ m00401A5F  |.  817C24 18 474D47>cmp dword ptr ss:[esp+18],42474D47          ;  此处可判断出开始的四个字节应该是魔幻数
( H# _. A( ^) X. j( u; t8 b+0 魔幻数7 N) p9 B% G" @, A
+4 段数,/ G) p9 @4 r+ @. G6 E$ c
下面开始是每段的头部& S5 G( q2 Y9 l$ R7 p; b
+46EE 正文) w- h7 E* Q3 G6 z; T5 }( t

7 I# f: P. D: W0203DDE0  2F 45 58 54 44 41 54 41 53 46 4F 4E 54 2F 41 52  /EXTDATASFONT/AR. n, a- j$ R" s; z4 K# Q/ O( ?
0203DDF0  49 41 4C 20 31 31 2E 45 4E 00                    IAL 11.EN.
( x% h* _; v2 w" y2 P1 f0 X2 E1 ]
3 l! g8 _% Y: o% d) v( P1 g  ]0203DEE0              75 16 00 00 (EE 46) 00 00 2F 45 58 54      ..頕../EXT/ s9 ~: g: X' U5 c+ V! q* }; \6 r7 `
0203DEF0  44 41 54 41 53 46 4F 4E 54 2F 41 52 49 41 4C 20  DATASFONT/ARIAL/ ~5 _, M5 I5 h0 `7 ]* b! q
0203DF00  31 32 2E 45 4E 00                                12.EN.. L) k) B% _; Y4 P
9 V' j. D% f" |" I
上面表中的数据除了括号中的(EE 46),其余全部与解包后文件数据一致,3 K/ w5 |2 Q+ @: q! B* e  m# m
1675是这个段的长度,46EE是这个在文件中的偏移,每段偏移值的算法如下:
. X% u- h' M, P9 z& r8 `) V
( \6 R- v$ a5 `00401AE0  |> /899401 08010000  /mov dword ptr ds:[ecx+eax+108],edx         ;  edx=46ee
( E) }! }4 U: n, \. q% W00401AE7  |. |8B06             |mov eax,dword ptr ds:[esi]                 ;  [esi]存放读取字符的地址
7 q! Y$ i$ b& T+ J- c) t0 Q" Y00401AE9  |. |039401 04010000  |add edx,dword ptr ds:[ecx+eax+104], N2 D( S, `  K) n/ _
00401AF0  |. |83C3 01          |add ebx,1# y& t# \3 f4 S7 A$ s* y1 M, A( I
00401AF3  |. |81C1 0C010000    |add ecx,10C  ~3 M$ z! J. b3 y$ N" v! w8 P
00401AF9  |. |3B5C24 14        |cmp ebx,dword ptr ss:[esp+14]              ;  [esp+14]=1C2
% l" N+ n3 k* {. N( m00401AFD  |.^\72 E1            \jb short SL2.00401AE0
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

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

使用道具 举报

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

使用道具 举报

地板
 楼主| 发表于 2010-3-28 12:06 | 只看该作者
Sl2fnt.dat文件格式分析如下:6 J  D" W2 n; f' y# ~: X; M8 x' m
+0 474D4742  这个魔幻数$ U* K- v! }: s

# F, }# c( |% _8 ~8 m/ K/ L+4 C2010000  表示有01C2个文件% `1 ?- K/ I/ y9 O- w) }5 h: b

6 F3 L6 W( M& C- I, [+ C: D3 ~+8 2F4558544441544153464F4E542F415249414C2031312E454E00
) j# @. q5 E, O0 `& P9 A3 {/EXTDATASFONT/ARIAL 11.EN.u1 W1 |3 U/ ]! U& ~, Y
这个应该是文件头部,ARIAL表示字体,EN表示英语 11表示字号
. s7 V( o0 F/ A8 ]0 u, J, d* D, p* Q# c
   751600 表示这个文件的大小9 l+ n/ x0 ~$ j/ X: W4 A

' X2 _1 y+ B# \6 ^& s8 x  r# U每个文件的偏移由上文中的最后那个函数得出* e8 p! \" a, v, u1 g8 b2 N
$ \9 \0 |) R0 w) p1 ]+ j7 B5 W

/ R) F/ W, `; y% \6 e+46EE 此处开始是每个文件的正文
* R3 ~* q; ?( ~3 Y, e
! @1 [. |& l. {6 u+ y如上面我举的这个例子,文件正文内容起始地址+46EE,
! w! d# G8 l. z2 I' w结束地址为+(46EE+1675)
回复 支持 反对

使用道具 举报

5#
发表于 2010-3-28 12:11 | 只看该作者
这个其实不用分析,这个dat是个包文件,已经有解包器了啊。
$ K5 h$ \' X  x( l需要分析的是里面解出来的字体文件。字体文件的magic number是XCPK.
9 I6 w$ t' I* ]1 S- @8 g
$ y* Q& ?5 H3 ?我想知道XCPK文件的结构。
回复 支持 反对

使用道具 举报

6#
发表于 2010-3-28 12:16 | 只看该作者
http://aluigi.altervista.org/papers.htm
+ V; C" K9 E$ S0 g. N0 R. B; g. C1 E& L
这里有stilllife2 dat文件解包器,配合quickbms使用
回复 支持 反对

使用道具 举报

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

回 楼主(jinxin8866) 的帖子

写屏函数:
6 d+ J4 @% j. J+ \, S& x02A0EA4C  |> /8B00        |/mov eax,dword ptr ds:[eax]! q- @# r5 D# J' M# q* ]
02A0EA4E  |. |0FB70450    ||movzx eax,word ptr ds:[eax+edx*2]                    ;  [eax+edx*2]存放字符的UNICODE码
% y% Y5 K! n9 A02A0EA52  |. |8B7C24 14   ||mov edi,dword ptr ss:[esp+14]
7 |) j5 d2 ]1 L7 R02A0EA56  |. |8B7F 2C     ||mov edi,dword ptr ds:[edi+2C]8 w; z: L! M2 U
02A0EA59  |. |8D04C0      ||lea eax,dword ptr ds:[eax+eax*8]
# j0 B3 C( [3 s02A0EA5C  |. |8D0487      ||lea eax,dword ptr ds:[edi+eax*4]                     ;  eax存放字符编码表, I. u* l* X( b7 l' N, K% U
每个字符码表占24(16进制)个字节
+ F& `3 R) I3 k0 |8 r5 ]; Q02A0EA5F  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]1 h: X: t3 _& c1 C' U5 j6 f" U5 w
02A0EA63  |. |8D7C39 14   ||lea edi,dword ptr ds:[ecx+edi+14]                    ;  edi就是显存地址
( l2 D1 k9 c8 v: \02A0EA67  |. |D940 04     ||fld dword ptr ds:[eax+4]" l8 c7 d/ F; C& E
02A0EA6A  |. |83C2 01     ||add edx,1                                              字符个数加一
/ I6 l7 S8 ~4 R1 Y! @0 A02A0EA6D  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]
9 {9 ]* x# k# D: m8 ?. B02A0EA71  |. |D900        ||fld dword ptr ds:[eax]
( l/ B3 |, z; B4 O& w! t02A0EA73  |. |D91F        ||fstp dword ptr ds:[edi]                              ;  edi就是显存地址# j7 L6 Q: A1 E4 w$ Q# C
每个字符占1C个字节,最后的四个字节都是一样的,可以认为是结束标志; P2 n  R! U/ Q" }( ^9 e* k0 M; p! x) T
02A0EA75  |. |D94424 30   ||fld dword ptr ss:[esp+30]3 }! x& t" g, s2 L4 _
02A0EA79  |. |D95F 04     ||fstp dword ptr ds:[edi+4]# L4 m0 c5 x, p& t' X
02A0EA7C  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]0 T, C: w, W. A8 {; G
02A0EA80  |. |D940 04     ||fld dword ptr ds:[eax+4]
# P9 b/ G7 l) Y$ L2 n# d02A0EA83  |. |8D7C39 30   ||lea edi,dword ptr ds:[ecx+edi+30]
8 B6 D7 j2 R7 e. D1 ]3 J02A0EA87  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]
2 A, ~6 r7 h* f: g$ ]* s! \02A0EA8B  |. |D940 08     ||fld dword ptr ds:[eax+8]8 U6 B) `; A! k5 w
02A0EA8E  |. |D91F        ||fstp dword ptr ds:[edi]
) `" Q! T- B2 k2 H02A0EA90  |. |D94424 30   ||fld dword ptr ss:[esp+30]0 \1 n( e4 ~! S# n9 p1 V: S2 R# Y
02A0EA94  |. |D95F 04     ||fstp dword ptr ds:[edi+4]+ F+ _. v  p4 u, ]/ h9 P/ x5 S6 L
02A0EA97  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]
) l3 U6 s4 T2 ?; |, i/ D0 {3 {02A0EA9B  |. |D940 0C     ||fld dword ptr ds:[eax+C]& H* O  Q5 T# R: \/ E8 s! i
02A0EA9E  |. |8D7C39 4C   ||lea edi,dword ptr ds:[ecx+edi+4C]. m3 n6 m1 P5 N, Y
02A0EAA2  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]
/ l5 |1 }+ b+ O5 G) x. n, c02A0EAA6  |. |D900        ||fld dword ptr ds:[eax]# H, W# v6 U% ?) t" k
02A0EAA8  |. |D91F        ||fstp dword ptr ds:[edi]; v! g. F( J- C# M1 b+ g
02A0EAAA  |. |D94424 30   ||fld dword ptr ss:[esp+30]
9 s, N# D& g( j& ~* Y& E02A0EAAE  |. |D95F 04     ||fstp dword ptr ds:[edi+4]
! K6 K" P) P# y/ Q02A0EAB1  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]
# W' D8 B! H9 K0 F# O; @02A0EAB5  |. |D940 0C     ||fld dword ptr ds:[eax+C]1 Q  O7 g- X$ m* z& X! x6 `' k
02A0EAB8  |. |8D7C39 68   ||lea edi,dword ptr ds:[ecx+edi+68]
2 [& Y9 v: o9 O7 O( K- L8 H02A0EABC  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]- ^& w% u4 E+ W
02A0EAC0  |. |83C1 70     ||add ecx,70
' J7 F! Z; U8 ?; X02A0EAC3  |. |D940 08     ||fld dword ptr ds:[eax+8]
# F+ d' n7 y/ d' B4 u9 v) @) Z02A0EAC6  |. |D91F        ||fstp dword ptr ds:[edi]
9 z) P! K( l  y; G1 ^9 O/ F# K02A0EAC8  |. |D94424 30   ||fld dword ptr ss:[esp+30]2 O9 g( _% g) j5 j4 Q( Z: g
02A0EACC  |. |D95F 04     ||fstp dword ptr ds:[edi+4]
: z  l# ~- y! O  C9 F02A0EACF  |. |8B46 58     ||mov eax,dword ptr ds:[esi+58]$ W" W2 [7 n( D! a1 B
02A0EAD2  |. |03C3        ||add eax,ebx
: y" |% ]# ?9 `! ?1 ]02A0EAD4  |. |3B50 08     ||cmp edx,dword ptr ds:[eax+8]
4 t! n, r7 {6 h1 Z2 {# J02A0EAD7  |.^\\0F8C 6FFFFF>|\\jl xcDxShad.02A0EA4C
7 l. R" a# U. k  p! M+ L- e% b0 X' q- x' R( W0 [0 e* Z! @2 U
本游戏字符编码采用UNICODE,
; e7 I9 \! W# H2 }对字符码表的操作:5 @  ~) }7 H% u$ G: E/ W% n
10028807  |> /0FB702      /movzx eax,word ptr ds:[edx]        读字符的UNICODE码
  A/ a7 p5 h& D$ h* @1002880A  |. |8D04C0      |lea eax,dword ptr ds:[eax+eax*8]6 P" L) e- S7 N
1002880D  |. |8D0483      |lea eax,dword ptr ds:[ebx+eax*4]   根据UNICODE码求得字符码表的地址" H5 ~" g& K/ C% z
10028810  |. |33C9        |xor ecx,ecx
8 c+ y; o! x: V8 z# V0 r5 P7 I10028812  |. |DB40 20     |fild dword ptr ds:[eax+20]
& C1 p3 `2 j: z' t5 l4 M10028815  |. |D95C24 14   |fstp dword ptr ss:[esp+14]+ J: i: L4 x3 `- p
10028819  |. |D94424 14   |fld dword ptr ss:[esp+14]% E& k# T* t: X4 U& H
1002881D  |. |D9C0        |fld st
) T/ ~' g# e9 o* L) n" D& [; T9 d1002881F  |. |D84E 14     |fmul dword ptr ds:[esi+14]. B3 r; d" C& F
10028822  |. |D94424 0C   |fld dword ptr ss:[esp+C]0 p+ C$ W9 i3 u' j& p
10028826  |. |D9C0        |fld st
8 d' {, F2 W. d; E- G: B1 o10028828  |. |DEC2        |faddp st(2),st# O. c) o" c0 i: M& g
1002882A  |. |D9C9        |fxch st(1)3 ~* ?% X! F- C  l
1002882C  |. |D95C24 14   |fstp dword ptr ss:[esp+14]
, ]7 {" R/ ~( r10028830  |. |D8D3        |fcom st(3)
( c) B6 i0 x+ [! q& d# x% q10028832  |. |DFE0        |fstsw ax0 j& m+ ?* |+ b; [3 u% \
10028834  |. |F6C4 01     |test ah,17 q$ b" [6 R8 G% G) c9 n
10028837  |. |74 2B       |je short xcEngine.10028864' S5 n" c( E4 y6 `2 V
10028839  |. |D94424 14   |fld dword ptr ss:[esp+14]$ S5 ?# j. ?* K8 W; ?# b8 e
1002883D  |. |D8D3        |fcom st(3)
' t7 ?/ x; b8 `+ G- G1002883F  |. |DFE0        |fstsw ax
. v9 ^  ^" q4 ]% U% ]% s10028841  |. |F6C4 41     |test ah,41
' v+ W4 g5 @, h; S6 |1 n# i10028844  |. |7A 04       |jpe short xcEngine.1002884A6 ]3 @$ Y0 |8 g; g  c% R4 W
10028846  |. |DDD8        |fstp st$ X1 {6 L7 ^1 k4 ]
10028848  |. |EB 1A       |jmp short xcEngine.100288645 W: ^0 ]; d6 R1 _- x  j' H
1002884A  |> |D9C9        |fxch st(1)7 u$ S0 g: E% Y
1002884C  |. |D8D3        |fcom st(3)" g0 a/ V6 A7 n4 S9 Y" @
1002884E  |. |DFE0        |fstsw ax: R2 S4 @! O6 x0 G5 k8 d  c6 w! K5 o
10028850  |. |F6C4 05     |test ah,5* }: M, k  C3 G6 O: H
10028853  |. |7A 04       |jpe short xcEngine.10028859  L# X  I$ h: C" S
10028855  |. |DDD9        |fstp st(1)
- ~: G4 X8 z) I' W& |" G10028857  |. |EB 0B       |jmp short xcEngine.10028864' z, A. P  x, Q% B+ s2 f: j
10028859  |> |D9C9        |fxch st(1)
( h2 _+ H/ K0 `1002885B  |. |D8DC        |fcomp st(4)- }: b) v5 C! V0 G
1002885D  |. |DFE0        |fstsw ax
# \1 f6 z) U4 x  @" E& @( I: R# h1002885F  |. |F6C4 41     |test ah,41% ~8 p4 O; ~6 J
10028862  |. |75 05       |jnz short xcEngine.10028869
, V% `  w0 J, A+ s  [6 b3 u10028864  |> |B9 01000000 |mov ecx,1
3 X8 q6 S9 p; T* A6 U10028869  |> |85C9        |test ecx,ecx" w( _8 D, g5 m, E- X
1002886B  |. |8B4424 18   |mov eax,dword ptr ss:[esp+18]+ M; ^( {0 w0 i/ y  q0 ^
1002886F  |. |D940 14     |fld dword ptr ds:[eax+14]
  G! S6 h6 B) E3 r10028872  |. |DECA        |fmulp st(2),st' N0 O6 O0 U7 o% i' Y3 C4 m
10028874  |. |DEC1        |faddp st(1),st
1 X, U4 Y! i% h: L1 W5 g( {7 L10028876  |. |D95C24 0C   |fstp dword ptr ss:[esp+C]
1 ~7 s$ |# L$ [7 t+ k9 @1002887A  |. |75 05       |jnz short xcEngine.10028881
: ~( F" Y  {9 ~$ e* q! ^- v1002887C  |. |834424 10 0>|add dword ptr ss:[esp+10],1
* C8 }: `9 _) a4 u  h4 }: [10028881  |> |83C2 02     |add edx,2
0 Z4 y' {" ~( \+ T10028884  |. |83EF 01     |sub edi,1* _8 |% |9 \$ N! t: B9 k
10028887  |.^\\0F85 7AFFFF>\\jnz xcEngine.10028807( T! t6 h$ U4 _5 Y3 }( x6 t
由于算法采用了浮点数指令,本人不太懂,边学习边研究中。。。。。。。。。
回复 支持 反对

使用道具 举报

8#
发表于 2010-4-1 11:13 | 只看该作者
加油!UNICODE码内核的游戏?
' @( A; l: P- T! J4 [9 E+ ?5 ]看来汉化有希望啊。
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

回 8楼(shane007) 的帖子

找到了内存中字库的地址,可在下面这个位置下断,! a" x0 r# y9 \
4 k  W$ t8 b3 [9 _
02A0EA5C  |. |8D0487      ||lea eax,dword ptr ds:[edi+eax*4]                     ;  eax存放的就是字库的地址$ B" P/ D2 P7 p3 @: ^% G5 B
这个字库不是点阵的,经过修改,字符的形状可发生变化,应该是矢量字库
回复 支持 反对

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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