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

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

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

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

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

关于静物2的分析

00403CE0  |> /3B96 10110000    /cmp edx,dword ptr ds:[esi+1110]
# {2 ?2 B! u, b- N9 `8 O00403CE6  |. |1BC9             |sbb ecx,ecx# g) z! ^1 Z* m
00403CE8  |. |23D1             |and edx,ecx5 p& C! Q# X; w7 C$ l9 r
00403CEA  |. |8B8E 0C110000    |mov ecx,dword ptr ds:[esi+110C]
9 V& N- M) i5 a9 i3 m  W/ ?, A1 G00403CF0  |. |8A0C0A           |mov cl,byte ptr ds:[edx+ecx]2 f3 E, J2 s$ J& F4 N
00403CF3  |. |3008             |xor byte ptr ds:[eax],cl                   ;  这个循环就是异或算法4 E2 o! c$ D. ^3 O) `
00403CF5  |. |83C2 01          |add edx,1
* ?% d8 k# I2 ^, C* T" @00403CF8  |. |83C0 01          |add eax,1
( Z* D2 i. \+ a00403CFB  |. |83EF 01          |sub edi,1
! J( n5 s( ^: I1 A+ _00403CFE  |.^\75 E0            \jnz short SL2.00403CE0$ e/ `, ~1 e9 J2 z# A
8 C. g4 r; D4 a& Q7 I! I* ]
9 m$ O/ u  Y: l5 r- S* M
00401A42  |.  8D4C24 18        lea ecx,dword ptr ss:[esp+18]& D, ^' G: ?1 I- H2 ^- W
00401A46  |.  51               push ecx& Z1 t7 Y2 W& j  n
00401A47  |.  8D4C24 24        lea ecx,dword ptr ss:[esp+24]0 ?3 k- U9 d( G" ?9 N
00401A4B  |.  C68424 58110000 >mov byte ptr ss:[esp+1158],1; ?. S5 ~8 s$ s1 ]( P
00401A53  |.  C687 08010000 00 mov byte ptr ds:[edi+108],0# Q/ t* z( [* t/ f6 T9 J
00401A5A  |.  E8 51240000      call SL2.00403EB0                           ;  读取字体函数的开始四个字节
. m; E( z$ h1 p$ _5 H' N$ z00401A5F  |.  817C24 18 474D47>cmp dword ptr ss:[esp+18],42474D47          ;  此处可判断出开始的四个字节应该是魔幻数0 \" w5 ?8 M, i# ?& V
+0 魔幻数
1 F3 R" z! n/ M+ o) _4 `- @+4 段数,' r( M7 l  \8 E/ Z( c
下面开始是每段的头部) K0 j' |1 k+ {7 T
+46EE 正文
" p( ^' Q# b( }" _) z+ `' ]( M# }/ x3 S7 v0 g
0203DDE0  2F 45 58 54 44 41 54 41 53 46 4F 4E 54 2F 41 52  /EXTDATASFONT/AR" c  s3 }! t- `0 l  {3 E
0203DDF0  49 41 4C 20 31 31 2E 45 4E 00                    IAL 11.EN.
; M" c6 g$ w, y) U& X6 ~; a2 M) @, l) V" P# K
0203DEE0              75 16 00 00 (EE 46) 00 00 2F 45 58 54      ..頕../EXT
& J0 H5 A& `5 r1 v0203DEF0  44 41 54 41 53 46 4F 4E 54 2F 41 52 49 41 4C 20  DATASFONT/ARIAL$ d; W& \& Q& o/ n8 e  G
0203DF00  31 32 2E 45 4E 00                                12.EN.
( ]% G6 z" @+ v# ]
2 _; S% ]; ~0 }5 ?3 ~$ c上面表中的数据除了括号中的(EE 46),其余全部与解包后文件数据一致,: h2 V. M+ c: t5 @0 x1 ~
1675是这个段的长度,46EE是这个在文件中的偏移,每段偏移值的算法如下:
& R" i5 _, N0 a( e) k" H6 y4 ~3 {$ |% P$ R. T5 |* c
00401AE0  |> /899401 08010000  /mov dword ptr ds:[ecx+eax+108],edx         ;  edx=46ee
- k# u: ^: R* [2 O% K00401AE7  |. |8B06             |mov eax,dword ptr ds:[esi]                 ;  [esi]存放读取字符的地址, k; T" j' g( k4 N- `! y' T
00401AE9  |. |039401 04010000  |add edx,dword ptr ds:[ecx+eax+104]
1 J5 x2 P- @- I" c0 |00401AF0  |. |83C3 01          |add ebx,1; `* M5 Y* K2 k/ O) X
00401AF3  |. |81C1 0C010000    |add ecx,10C8 t8 O+ |! u0 K, l: |
00401AF9  |. |3B5C24 14        |cmp ebx,dword ptr ss:[esp+14]              ;  [esp+14]=1C2
# @1 d# [! H) H$ I' X00401AFD  |.^\72 E1            \jb short SL2.00401AE0
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

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

使用道具 举报

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

使用道具 举报

地板
 楼主| 发表于 2010-3-28 12:06 | 只看该作者
Sl2fnt.dat文件格式分析如下:' {5 v) Y0 Q5 r- G( n7 D
+0 474D4742  这个魔幻数% s. ~0 n  i$ Q. h4 b) R
+ x% B2 n* }( Q- z0 X+ c7 b  `) L
+4 C2010000  表示有01C2个文件
' }" E* o6 L0 |8 l
2 o7 P3 _- T# ?) f5 P8 i, O+8 2F4558544441544153464F4E542F415249414C2031312E454E00
5 u9 U3 M' @/ v* x0 ~7 _, r/EXTDATASFONT/ARIAL 11.EN.u0 `; f4 ^5 Y1 D" A9 p- h& W
这个应该是文件头部,ARIAL表示字体,EN表示英语 11表示字号# p1 l. S  @( ^% P% @1 l, \
7 `9 Q9 W! V# e
   751600 表示这个文件的大小+ A* c( j0 t  L6 J2 n- @
$ S) y# s! }& ~5 |' T2 ]
每个文件的偏移由上文中的最后那个函数得出
) w$ _' m/ @# l9 S( R2 \% u% @9 v) r' p6 H
, I* G  E0 D" w" U5 `0 O. C0 X
+46EE 此处开始是每个文件的正文
, K) x# D% F* L) Z1 s& |9 u4 A# E3 A2 l2 k1 m' R# V7 F
如上面我举的这个例子,文件正文内容起始地址+46EE,
$ d' _1 t+ Q+ n7 k! m4 u结束地址为+(46EE+1675)
回复 支持 反对

使用道具 举报

5#
发表于 2010-3-28 12:11 | 只看该作者
这个其实不用分析,这个dat是个包文件,已经有解包器了啊。, ~3 Z6 Z, m, [. t! }/ P/ B' Q/ V* J
需要分析的是里面解出来的字体文件。字体文件的magic number是XCPK.9 d- e  M8 o3 [$ I) B/ s

: Z+ Z1 |4 p) R0 h9 v0 O我想知道XCPK文件的结构。
回复 支持 反对

使用道具 举报

6#
发表于 2010-3-28 12:16 | 只看该作者
http://aluigi.altervista.org/papers.htm
+ J7 x' b0 A  k9 a! Y
+ @' E& I5 F  H( o3 a这里有stilllife2 dat文件解包器,配合quickbms使用
回复 支持 反对

使用道具 举报

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

回 楼主(jinxin8866) 的帖子

写屏函数:
6 G2 I1 a8 h' B6 I" b% R3 e3 @% s) |02A0EA4C  |> /8B00        |/mov eax,dword ptr ds:[eax]
8 W  Z, ]$ K% J02A0EA4E  |. |0FB70450    ||movzx eax,word ptr ds:[eax+edx*2]                    ;  [eax+edx*2]存放字符的UNICODE码6 l9 h0 g9 k' T3 o3 @: c" e% y' P
02A0EA52  |. |8B7C24 14   ||mov edi,dword ptr ss:[esp+14]
+ M7 X# a4 Z% C7 ]% p# n5 d2 B+ d. |02A0EA56  |. |8B7F 2C     ||mov edi,dword ptr ds:[edi+2C]( `/ q2 G( ~7 ]/ _- A
02A0EA59  |. |8D04C0      ||lea eax,dword ptr ds:[eax+eax*8]. Y# ?1 X$ T7 d6 O# `) S; U
02A0EA5C  |. |8D0487      ||lea eax,dword ptr ds:[edi+eax*4]                     ;  eax存放字符编码表6 ?7 w% _+ v. u8 y- ?) X
每个字符码表占24(16进制)个字节* Q. O% t. ~) `- P! U+ I( w
02A0EA5F  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]
9 c- j" `  ?4 R/ e02A0EA63  |. |8D7C39 14   ||lea edi,dword ptr ds:[ecx+edi+14]                    ;  edi就是显存地址
* H0 L2 u) O0 R0 I02A0EA67  |. |D940 04     ||fld dword ptr ds:[eax+4]
8 b0 I" j7 W6 b) ?02A0EA6A  |. |83C2 01     ||add edx,1                                              字符个数加一. H- l7 o6 M1 i! n
02A0EA6D  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]
4 g& z: d1 I! L+ u02A0EA71  |. |D900        ||fld dword ptr ds:[eax]
. V: u! a' `: h$ e" Y* m' G02A0EA73  |. |D91F        ||fstp dword ptr ds:[edi]                              ;  edi就是显存地址" ~( O. L8 K* O1 X' N' @
每个字符占1C个字节,最后的四个字节都是一样的,可以认为是结束标志4 \. S; v% }1 X, g4 D$ {  ]8 W: e
02A0EA75  |. |D94424 30   ||fld dword ptr ss:[esp+30]* [2 K$ ]' e& y# h- h
02A0EA79  |. |D95F 04     ||fstp dword ptr ds:[edi+4]
7 V( V( K9 s, h: _# t1 e02A0EA7C  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]5 N$ w0 t7 D$ o& `! Z
02A0EA80  |. |D940 04     ||fld dword ptr ds:[eax+4]
# f- P: a1 {, ?/ {1 Q: L$ \02A0EA83  |. |8D7C39 30   ||lea edi,dword ptr ds:[ecx+edi+30]
) a+ z" x+ S- e8 @' m: {. I02A0EA87  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]: g- f- d$ J4 E& e# ^
02A0EA8B  |. |D940 08     ||fld dword ptr ds:[eax+8]
# R+ _9 U: N+ l" h9 F0 @02A0EA8E  |. |D91F        ||fstp dword ptr ds:[edi]7 _2 h6 H, }( L0 Z; ^$ c
02A0EA90  |. |D94424 30   ||fld dword ptr ss:[esp+30]: R. W: X; |- r9 ?( j( B7 |2 i' ?9 J
02A0EA94  |. |D95F 04     ||fstp dword ptr ds:[edi+4]  \7 I. B: L' |3 x% S$ o4 x
02A0EA97  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]! \( X/ [/ Y) _: w# [  L2 u+ f
02A0EA9B  |. |D940 0C     ||fld dword ptr ds:[eax+C]3 a' k- a4 u8 ?# [- l# O
02A0EA9E  |. |8D7C39 4C   ||lea edi,dword ptr ds:[ecx+edi+4C]$ I/ H. @4 Y2 D, L, G- j$ a
02A0EAA2  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]
* e( f& h8 R7 V5 F4 R02A0EAA6  |. |D900        ||fld dword ptr ds:[eax]/ Z( Q+ q: L% I+ {+ @) m
02A0EAA8  |. |D91F        ||fstp dword ptr ds:[edi]* x& S- m- f9 X5 U: k3 N" r
02A0EAAA  |. |D94424 30   ||fld dword ptr ss:[esp+30]
; ^/ n, b! ?8 f' t" A1 \02A0EAAE  |. |D95F 04     ||fstp dword ptr ds:[edi+4]3 B: N: ]& L0 g. V7 t
02A0EAB1  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]- a6 c* C* q7 i. N/ h. W: P
02A0EAB5  |. |D940 0C     ||fld dword ptr ds:[eax+C]
. ^5 u4 Q8 b1 e3 V8 D# o0 W; {02A0EAB8  |. |8D7C39 68   ||lea edi,dword ptr ds:[ecx+edi+68]: T8 x$ |8 M8 s* M
02A0EABC  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]" x8 r( X! j" D4 }; |
02A0EAC0  |. |83C1 70     ||add ecx,702 t' G4 s% ~7 V7 h: N2 k
02A0EAC3  |. |D940 08     ||fld dword ptr ds:[eax+8]
' ^! T& ~$ n3 S# u, B02A0EAC6  |. |D91F        ||fstp dword ptr ds:[edi]0 }, C. H  e, ]% z% O& L
02A0EAC8  |. |D94424 30   ||fld dword ptr ss:[esp+30]
- R. }) q; H  Y- x- B( [02A0EACC  |. |D95F 04     ||fstp dword ptr ds:[edi+4], ?, G" i1 y+ H" m& |$ s
02A0EACF  |. |8B46 58     ||mov eax,dword ptr ds:[esi+58]' K, K3 @9 m; T; z
02A0EAD2  |. |03C3        ||add eax,ebx
- I6 e) a# X1 ]02A0EAD4  |. |3B50 08     ||cmp edx,dword ptr ds:[eax+8]
7 y( V0 Q: e$ k) ]02A0EAD7  |.^\\0F8C 6FFFFF>|\\jl xcDxShad.02A0EA4C
. S4 D. [5 R8 h+ z/ y" U7 v% g( P/ i' ~* ]7 x
本游戏字符编码采用UNICODE,3 r* x. k8 k4 n6 y1 e$ t
对字符码表的操作:
% w) Y2 F& O8 x/ k: N' L10028807  |> /0FB702      /movzx eax,word ptr ds:[edx]        读字符的UNICODE码7 L4 }/ e+ P* q! l2 q; H+ n: R. L
1002880A  |. |8D04C0      |lea eax,dword ptr ds:[eax+eax*8]' V5 p* Y' Y5 `: u) d$ w* S* r$ ?" ?6 D
1002880D  |. |8D0483      |lea eax,dword ptr ds:[ebx+eax*4]   根据UNICODE码求得字符码表的地址
+ O. T2 r# t1 Q# D10028810  |. |33C9        |xor ecx,ecx2 k2 e! S/ d$ Y* I3 \" ]& w
10028812  |. |DB40 20     |fild dword ptr ds:[eax+20]: t7 J6 N, A& N; l! t
10028815  |. |D95C24 14   |fstp dword ptr ss:[esp+14]7 e1 s! ]* r8 b0 K0 `2 |
10028819  |. |D94424 14   |fld dword ptr ss:[esp+14]/ y; o% `/ Q' x5 M6 U/ z
1002881D  |. |D9C0        |fld st
. v- ?8 {# c& D1002881F  |. |D84E 14     |fmul dword ptr ds:[esi+14]
& h# A! Y* J* T' Z- b) z0 f* a10028822  |. |D94424 0C   |fld dword ptr ss:[esp+C]
: o  n  k- @1 K1 m: }10028826  |. |D9C0        |fld st2 A6 X3 Z, ]. C6 Y+ T' {! J
10028828  |. |DEC2        |faddp st(2),st
3 H4 x$ T' }1 W/ l1002882A  |. |D9C9        |fxch st(1)
# ~2 n- D+ X7 C( U1002882C  |. |D95C24 14   |fstp dword ptr ss:[esp+14]
; w& W4 U/ V: S: ~10028830  |. |D8D3        |fcom st(3)
8 T) U! f0 r  F10028832  |. |DFE0        |fstsw ax
  D5 V" j3 D2 @+ \* l0 I) v. i$ C# i10028834  |. |F6C4 01     |test ah,1; F( ~5 r3 z0 ^) i
10028837  |. |74 2B       |je short xcEngine.10028864
: x' t5 o  q- }. V. P( {  X- |10028839  |. |D94424 14   |fld dword ptr ss:[esp+14]0 _$ D, X& Z6 i0 w: S6 V9 f
1002883D  |. |D8D3        |fcom st(3)
% C) Z. }7 W6 D+ C2 b) P7 n$ A1002883F  |. |DFE0        |fstsw ax9 Y( Y! O0 `  R, D6 X# B5 K
10028841  |. |F6C4 41     |test ah,41
( }3 ~, Z$ u9 w2 B8 E, h10028844  |. |7A 04       |jpe short xcEngine.1002884A! s) b! Z; M3 ?
10028846  |. |DDD8        |fstp st
  K# T! H/ v1 V. N10028848  |. |EB 1A       |jmp short xcEngine.10028864
8 ~- k, n& Q/ k* f- k1002884A  |> |D9C9        |fxch st(1)
' c9 G' z, Y0 C8 f5 f# @0 u1002884C  |. |D8D3        |fcom st(3)+ l5 u8 }: |' R. j' @
1002884E  |. |DFE0        |fstsw ax
7 G% c. `4 \5 O# q9 l) H10028850  |. |F6C4 05     |test ah,5
& R+ k- Z7 i9 G7 g5 \10028853  |. |7A 04       |jpe short xcEngine.10028859- t8 z" z. {- X+ Y) S7 k+ C( a/ Z
10028855  |. |DDD9        |fstp st(1)3 \  k3 P7 _# `7 L- m/ m
10028857  |. |EB 0B       |jmp short xcEngine.10028864
1 ]% V$ {8 {' u9 S0 z10028859  |> |D9C9        |fxch st(1)4 o, y6 w2 S3 T( ~+ L, T
1002885B  |. |D8DC        |fcomp st(4)% x% {0 l( d/ L! _
1002885D  |. |DFE0        |fstsw ax
7 G- u4 @( M, O6 E% v* O' b3 J6 l1002885F  |. |F6C4 41     |test ah,41
. ~5 V  i4 p$ ]5 w* z10028862  |. |75 05       |jnz short xcEngine.100288690 x! I; K. R# X7 W9 V" p
10028864  |> |B9 01000000 |mov ecx,1
# U( k+ u4 T. o6 J& t/ y# F3 s10028869  |> |85C9        |test ecx,ecx
. k' P2 L- h. w1 K( B! d1002886B  |. |8B4424 18   |mov eax,dword ptr ss:[esp+18]
& P9 J* n5 p" U% i# H$ p9 i1002886F  |. |D940 14     |fld dword ptr ds:[eax+14]
8 y3 t( p2 v! L2 D3 k, Y* P+ |: s10028872  |. |DECA        |fmulp st(2),st$ V. `1 @0 y/ U7 m6 z& u
10028874  |. |DEC1        |faddp st(1),st
5 K5 [/ c8 v; s! o10028876  |. |D95C24 0C   |fstp dword ptr ss:[esp+C]! c6 l; s! N! O& |' o
1002887A  |. |75 05       |jnz short xcEngine.10028881/ n6 E' V. P8 {' h" Z' d
1002887C  |. |834424 10 0>|add dword ptr ss:[esp+10],1
( w7 \" F3 h# k; G8 U6 ^2 f10028881  |> |83C2 02     |add edx,2+ K6 p. M5 b: @' L/ v
10028884  |. |83EF 01     |sub edi,1
: A( h( H3 D) P$ c10028887  |.^\\0F85 7AFFFF>\\jnz xcEngine.100288077 K" h4 D6 i0 }' @9 q) Z
由于算法采用了浮点数指令,本人不太懂,边学习边研究中。。。。。。。。。
回复 支持 反对

使用道具 举报

8#
发表于 2010-4-1 11:13 | 只看该作者
加油!UNICODE码内核的游戏?
3 G; T; _4 ?7 F1 X" s8 @% ?. R5 o9 R看来汉化有希望啊。
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

回 8楼(shane007) 的帖子

找到了内存中字库的地址,可在下面这个位置下断,
' |+ j. X8 |6 z+ H% D; N0 J$ u
+ Q; Y9 P$ p7 H5 ~+ d* P; h  |6 K02A0EA5C  |. |8D0487      ||lea eax,dword ptr ds:[edi+eax*4]                     ;  eax存放的就是字库的地址. |0 n- i0 ^) h9 C# u- u# f' Z; z
这个字库不是点阵的,经过修改,字符的形状可发生变化,应该是矢量字库
回复 支持 反对

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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