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

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

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

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

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

关于静物2的分析

00403CE0  |> /3B96 10110000    /cmp edx,dword ptr ds:[esi+1110]% Q9 G1 H0 A" g# N) h) m
00403CE6  |. |1BC9             |sbb ecx,ecx' e5 H% W, l/ v+ M
00403CE8  |. |23D1             |and edx,ecx
3 s% z  ]$ O6 p1 _- G$ f8 C00403CEA  |. |8B8E 0C110000    |mov ecx,dword ptr ds:[esi+110C]. o( L( ]+ U$ R% j+ q& k
00403CF0  |. |8A0C0A           |mov cl,byte ptr ds:[edx+ecx]+ C! J4 J' U; O
00403CF3  |. |3008             |xor byte ptr ds:[eax],cl                   ;  这个循环就是异或算法
  @3 k7 c# ~9 o( K7 J/ W$ X) k00403CF5  |. |83C2 01          |add edx,1* B' X6 j( d/ q. k: U! }
00403CF8  |. |83C0 01          |add eax,12 {* n( j1 R6 C  W% |/ p
00403CFB  |. |83EF 01          |sub edi,1
6 ]7 }1 s5 X5 x5 ~! H, t3 U2 L' K00403CFE  |.^\75 E0            \jnz short SL2.00403CE05 k2 z8 w9 \5 C
5 ]  _- R2 c7 o4 y

) c7 E% B4 S$ l" s4 |00401A42  |.  8D4C24 18        lea ecx,dword ptr ss:[esp+18]. E" r4 L! L7 Z+ F$ Y
00401A46  |.  51               push ecx
& R7 j1 G( W  U00401A47  |.  8D4C24 24        lea ecx,dword ptr ss:[esp+24]7 M3 R1 _0 j4 W  \0 o3 E* n
00401A4B  |.  C68424 58110000 >mov byte ptr ss:[esp+1158],1
5 n9 c# _* Z6 P, n# b/ z' l. y' O7 t00401A53  |.  C687 08010000 00 mov byte ptr ds:[edi+108],0
0 i' _5 V0 |; v/ j0 q& U) b00401A5A  |.  E8 51240000      call SL2.00403EB0                           ;  读取字体函数的开始四个字节
& t' d0 }! e3 }9 Q8 ?6 C00401A5F  |.  817C24 18 474D47>cmp dword ptr ss:[esp+18],42474D47          ;  此处可判断出开始的四个字节应该是魔幻数
: t8 ~0 ~3 M0 ]# X+0 魔幻数( @7 P3 V5 B$ f6 C
+4 段数,  b+ t" I# p  W5 y. T4 G8 r  i
下面开始是每段的头部; P( G$ x! E, A$ T- }
+46EE 正文: `! G% N7 e6 W# a

) |7 y# z& u6 {- L6 o7 k- H0203DDE0  2F 45 58 54 44 41 54 41 53 46 4F 4E 54 2F 41 52  /EXTDATASFONT/AR
, p' ^5 [$ \8 \5 x1 R0203DDF0  49 41 4C 20 31 31 2E 45 4E 00                    IAL 11.EN.! ^! t& e2 ~$ [( Q  w# }& w7 u

7 `4 S) |: g- _2 d0203DEE0              75 16 00 00 (EE 46) 00 00 2F 45 58 54      ..頕../EXT- l) a2 p5 H8 Q( e9 K
0203DEF0  44 41 54 41 53 46 4F 4E 54 2F 41 52 49 41 4C 20  DATASFONT/ARIAL' p2 f0 e7 u  F3 O# W
0203DF00  31 32 2E 45 4E 00                                12.EN.( m; i1 o: b( Y# h  ?
# W/ n$ S. `! Z$ T
上面表中的数据除了括号中的(EE 46),其余全部与解包后文件数据一致,# l! m/ o6 B, f
1675是这个段的长度,46EE是这个在文件中的偏移,每段偏移值的算法如下:
( R6 E% T  b; ^: M0 L9 X1 S& ^
1 A3 L% d& A% v( \  s! ]00401AE0  |> /899401 08010000  /mov dword ptr ds:[ecx+eax+108],edx         ;  edx=46ee
2 Y# ^$ w* G1 u. l& W00401AE7  |. |8B06             |mov eax,dword ptr ds:[esi]                 ;  [esi]存放读取字符的地址4 b3 W& b. j; l8 W. k( Z
00401AE9  |. |039401 04010000  |add edx,dword ptr ds:[ecx+eax+104]: S& M, `+ Y& {4 V
00401AF0  |. |83C3 01          |add ebx,1
* N! ^; A% n1 y2 c  \00401AF3  |. |81C1 0C010000    |add ecx,10C
" e" \5 c( |5 n; s00401AF9  |. |3B5C24 14        |cmp ebx,dword ptr ss:[esp+14]              ;  [esp+14]=1C2' c8 ]/ W4 P' F6 c0 x+ m- i8 Q9 P9 ~
00401AFD  |.^\72 E1            \jb short SL2.00401AE0
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

沙发
发表于 2010-3-28 11:32 | 只看该作者
首先对楼主的大力支持表示非常感谢!
2 z) r( N' \0 ?4 V' w/ W% e7 p想问一下,通过以上分析,能得出什么阶段性的结论吗?
回复 支持 反对

使用道具 举报

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

使用道具 举报

地板
 楼主| 发表于 2010-3-28 12:06 | 只看该作者
Sl2fnt.dat文件格式分析如下:
; g. r) @+ |& I4 D+0 474D4742  这个魔幻数
6 x) S% a8 P, P3 k( s" U4 s! ~& C( U' k1 B
+4 C2010000  表示有01C2个文件# p+ K" E+ U  R( e  M* @9 ]. }
# u  U0 s" N% e2 x- L
+8 2F4558544441544153464F4E542F415249414C2031312E454E00
' L# z# r& ~, o' G, ^% @" s/EXTDATASFONT/ARIAL 11.EN.u: e; E8 E0 _1 C. `2 F' r
这个应该是文件头部,ARIAL表示字体,EN表示英语 11表示字号
) X/ l" E% F% h; O4 V. {4 f8 ^# C  ?& H$ `0 q( D+ m! z/ ^' }! ]+ x1 }9 N1 }
   751600 表示这个文件的大小% d8 k  ~+ I9 D, E  c
4 e+ y' L" N3 A8 m$ d" I; p
每个文件的偏移由上文中的最后那个函数得出) t5 h# q3 Y) Z; N; v
* k( E  c0 R& j( n
1 k, Q% S6 i8 i: o
+46EE 此处开始是每个文件的正文9 K; X3 [! N. {; J, ~# E
8 Y, h$ D! E  Z) ^8 \
如上面我举的这个例子,文件正文内容起始地址+46EE,
4 O3 A3 p+ W' m结束地址为+(46EE+1675)
回复 支持 反对

使用道具 举报

5#
发表于 2010-3-28 12:11 | 只看该作者
这个其实不用分析,这个dat是个包文件,已经有解包器了啊。, R: {6 K7 n& M
需要分析的是里面解出来的字体文件。字体文件的magic number是XCPK.* a: y* s5 W  x% G! c# r

8 X; v5 [  j% b& }我想知道XCPK文件的结构。
回复 支持 反对

使用道具 举报

6#
发表于 2010-3-28 12:16 | 只看该作者
http://aluigi.altervista.org/papers.htm& ~" L' h% T; k: d" o8 k4 B
9 C* d# ^; Z! g1 l2 g
这里有stilllife2 dat文件解包器,配合quickbms使用
回复 支持 反对

使用道具 举报

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

回 楼主(jinxin8866) 的帖子

写屏函数:
0 `$ @$ B3 }! @/ Q" ], G( F; [02A0EA4C  |> /8B00        |/mov eax,dword ptr ds:[eax]% @( h* T# n' I8 S
02A0EA4E  |. |0FB70450    ||movzx eax,word ptr ds:[eax+edx*2]                    ;  [eax+edx*2]存放字符的UNICODE码
3 F# [  `$ n8 [$ P02A0EA52  |. |8B7C24 14   ||mov edi,dword ptr ss:[esp+14]& P- Z7 C1 K3 {! u& h
02A0EA56  |. |8B7F 2C     ||mov edi,dword ptr ds:[edi+2C]
4 J. M/ Y- G( U; w02A0EA59  |. |8D04C0      ||lea eax,dword ptr ds:[eax+eax*8]
* S( e: V- D% a2 Q2 W, ^02A0EA5C  |. |8D0487      ||lea eax,dword ptr ds:[edi+eax*4]                     ;  eax存放字符编码表/ i  J& ^; e7 Y& r$ m
每个字符码表占24(16进制)个字节2 X6 e8 W* G  H, ]& x
02A0EA5F  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]
9 g8 j" v% X: a3 C" m3 W1 c( t2 S5 \02A0EA63  |. |8D7C39 14   ||lea edi,dword ptr ds:[ecx+edi+14]                    ;  edi就是显存地址' `- s9 _+ k8 D2 R1 v0 P% L
02A0EA67  |. |D940 04     ||fld dword ptr ds:[eax+4]9 J* U" V1 i( O( B
02A0EA6A  |. |83C2 01     ||add edx,1                                              字符个数加一  L5 @6 O1 c" w/ I
02A0EA6D  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]
( a+ m) A0 x' F02A0EA71  |. |D900        ||fld dword ptr ds:[eax]
9 X9 G9 I; v6 |  L" I02A0EA73  |. |D91F        ||fstp dword ptr ds:[edi]                              ;  edi就是显存地址
2 P0 m" R5 P" b3 J4 W2 b/ O0 |6 I每个字符占1C个字节,最后的四个字节都是一样的,可以认为是结束标志+ C3 n1 H" I0 H0 z  x( S
02A0EA75  |. |D94424 30   ||fld dword ptr ss:[esp+30]  W8 _( E' _" z8 a5 X& G$ }
02A0EA79  |. |D95F 04     ||fstp dword ptr ds:[edi+4]
& _" ~+ |' @3 ~/ D/ R3 ?9 l3 |02A0EA7C  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]* u6 e; o3 u! S, @" \
02A0EA80  |. |D940 04     ||fld dword ptr ds:[eax+4]% e' w- p& y" l# D8 \) U7 F
02A0EA83  |. |8D7C39 30   ||lea edi,dword ptr ds:[ecx+edi+30]1 M5 I* w( I( j3 W
02A0EA87  |. |D95C24 30   ||fstp dword ptr ss:[esp+30], k$ \; }- G1 v1 }( x) a9 J9 {
02A0EA8B  |. |D940 08     ||fld dword ptr ds:[eax+8]3 D4 }3 H2 y( \- O4 e% a2 u
02A0EA8E  |. |D91F        ||fstp dword ptr ds:[edi]6 R. |4 i+ v8 g  ~
02A0EA90  |. |D94424 30   ||fld dword ptr ss:[esp+30]
* z5 x: e( i- E4 x: v* a02A0EA94  |. |D95F 04     ||fstp dword ptr ds:[edi+4]
& z. T, I# F) I6 ^! `% A. j. H) |/ v1 T/ }02A0EA97  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]
" I4 e) o0 ^& j4 x( \# y02A0EA9B  |. |D940 0C     ||fld dword ptr ds:[eax+C]
4 ]4 y( u2 r1 F" [02A0EA9E  |. |8D7C39 4C   ||lea edi,dword ptr ds:[ecx+edi+4C]3 b* @9 E# i2 t* k* A* @" J
02A0EAA2  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]
& X' `/ k; [  D! l) Z3 O! x8 `02A0EAA6  |. |D900        ||fld dword ptr ds:[eax]0 k: ^( @+ ]: c+ X3 S5 W
02A0EAA8  |. |D91F        ||fstp dword ptr ds:[edi]$ v, X, Y9 Z4 r. w8 O. I$ @
02A0EAAA  |. |D94424 30   ||fld dword ptr ss:[esp+30]
  T. ?, O. q  Q7 t02A0EAAE  |. |D95F 04     ||fstp dword ptr ds:[edi+4]: r- b! l3 I& L  t* K
02A0EAB1  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]0 S2 z# g: ^& _  \' y, ^
02A0EAB5  |. |D940 0C     ||fld dword ptr ds:[eax+C]9 l6 ^8 V0 ]3 u! o3 ]
02A0EAB8  |. |8D7C39 68   ||lea edi,dword ptr ds:[ecx+edi+68]# D* w; Z+ `8 }6 ^; C4 y6 s4 ^
02A0EABC  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]4 }5 ?. P3 f3 v5 w% ~0 m
02A0EAC0  |. |83C1 70     ||add ecx,70) o" f9 @5 h: B: K: \: h* q
02A0EAC3  |. |D940 08     ||fld dword ptr ds:[eax+8]; T% e8 B9 k& F$ L6 I: h) b
02A0EAC6  |. |D91F        ||fstp dword ptr ds:[edi]
  U+ z3 }! |, k6 N7 O) _% \02A0EAC8  |. |D94424 30   ||fld dword ptr ss:[esp+30]
: Z1 b( L/ v  d7 U% g02A0EACC  |. |D95F 04     ||fstp dword ptr ds:[edi+4]3 y  h/ j5 }7 d! t
02A0EACF  |. |8B46 58     ||mov eax,dword ptr ds:[esi+58], X8 ]5 ]* X' Z! i# [
02A0EAD2  |. |03C3        ||add eax,ebx
8 v2 _6 A8 |: b, u. e. L& Z02A0EAD4  |. |3B50 08     ||cmp edx,dword ptr ds:[eax+8]; }: j4 I; n6 a: c, V2 i4 H
02A0EAD7  |.^\\0F8C 6FFFFF>|\\jl xcDxShad.02A0EA4C2 F" P) d' z7 w) Z9 |

# D$ _- @4 {7 n( ?' R2 w$ C$ R! g本游戏字符编码采用UNICODE,
1 F; x2 \- @% B4 h. Y4 t/ j对字符码表的操作:9 C9 W! ?. l. n; P$ `0 v
10028807  |> /0FB702      /movzx eax,word ptr ds:[edx]        读字符的UNICODE码
3 r- m1 I1 z5 q% M1002880A  |. |8D04C0      |lea eax,dword ptr ds:[eax+eax*8]
6 A1 [( \! X' V: S- _( b, w1002880D  |. |8D0483      |lea eax,dword ptr ds:[ebx+eax*4]   根据UNICODE码求得字符码表的地址; V$ H" g. H0 y; V$ t! H+ a
10028810  |. |33C9        |xor ecx,ecx' K, w4 y' X5 D) R) H
10028812  |. |DB40 20     |fild dword ptr ds:[eax+20]
( V" Z" a: r# _/ b0 U' h) z10028815  |. |D95C24 14   |fstp dword ptr ss:[esp+14]: r- U5 s" n3 Y& W* M
10028819  |. |D94424 14   |fld dword ptr ss:[esp+14]
/ l0 \5 m% ]0 W' E1002881D  |. |D9C0        |fld st
+ W& |$ r* `; ?* T) j9 \1002881F  |. |D84E 14     |fmul dword ptr ds:[esi+14]3 D* D6 v+ P" R7 `
10028822  |. |D94424 0C   |fld dword ptr ss:[esp+C], l) [" T3 [; J9 D
10028826  |. |D9C0        |fld st
* s$ v& z. Y/ h4 Q( q6 X! Z3 U10028828  |. |DEC2        |faddp st(2),st8 _$ g- k9 x* m( U' @+ ?* ~1 D
1002882A  |. |D9C9        |fxch st(1)
  M  T  s$ o) E# M1002882C  |. |D95C24 14   |fstp dword ptr ss:[esp+14]
, x2 J8 u9 @$ }" n3 I6 z; c+ Y( s- H. Q' q10028830  |. |D8D3        |fcom st(3)
8 }( ]' d* e$ s10028832  |. |DFE0        |fstsw ax
3 W/ F4 |  M* ]8 b+ l10028834  |. |F6C4 01     |test ah,1
( S0 b/ J) p2 R; o" i" s; V2 s5 l10028837  |. |74 2B       |je short xcEngine.10028864
8 p% U) o2 y1 ^8 \9 z. I10028839  |. |D94424 14   |fld dword ptr ss:[esp+14]+ c  }; I% X0 _  ^" |1 e; s1 ]+ A& e
1002883D  |. |D8D3        |fcom st(3)- K& g1 Y: t) D* z1 I6 l0 p
1002883F  |. |DFE0        |fstsw ax1 C8 |  m- F; ]8 d
10028841  |. |F6C4 41     |test ah,417 a1 d4 v5 s5 N, P' R' P- [; q
10028844  |. |7A 04       |jpe short xcEngine.1002884A
6 @. H. C+ t! l2 _( {- w10028846  |. |DDD8        |fstp st
* j: J3 [. k8 ?) {6 C# L10028848  |. |EB 1A       |jmp short xcEngine.10028864
5 U/ c& Y$ W2 `1002884A  |> |D9C9        |fxch st(1)" j; Z1 C4 s0 \. q% C. q& y
1002884C  |. |D8D3        |fcom st(3)
' p$ l& I  \& m3 E+ ~" l( N3 [1 h1002884E  |. |DFE0        |fstsw ax
6 z6 l$ m5 ?1 h10028850  |. |F6C4 05     |test ah,5: @8 q# `# J' H- f
10028853  |. |7A 04       |jpe short xcEngine.10028859+ b" l7 F. D  p4 E& D2 L1 |
10028855  |. |DDD9        |fstp st(1)/ e1 y6 N2 m8 v7 m3 Y- L
10028857  |. |EB 0B       |jmp short xcEngine.10028864
* {! s8 l3 N' Y' ^# ]( i10028859  |> |D9C9        |fxch st(1)
+ f% }  e& z- `5 G1002885B  |. |D8DC        |fcomp st(4)' x9 v) A7 @: ~  f' y/ z3 M" _
1002885D  |. |DFE0        |fstsw ax- Z! \& g. @. W2 b
1002885F  |. |F6C4 41     |test ah,41  ^7 P( _" K2 f
10028862  |. |75 05       |jnz short xcEngine.10028869
2 F/ ~/ A5 e" O- k1 O* L# A; x' H10028864  |> |B9 01000000 |mov ecx,1
5 H4 K. B0 d" @/ m% O10028869  |> |85C9        |test ecx,ecx# e) R$ L, v' e: j' Y, b$ P
1002886B  |. |8B4424 18   |mov eax,dword ptr ss:[esp+18]
6 C) `- l+ ]: f, b& P  G1002886F  |. |D940 14     |fld dword ptr ds:[eax+14]0 M+ W' }6 o! K! W4 V
10028872  |. |DECA        |fmulp st(2),st8 Q' r* o7 F: H/ k
10028874  |. |DEC1        |faddp st(1),st  K( w. t8 J$ l$ ?* Y
10028876  |. |D95C24 0C   |fstp dword ptr ss:[esp+C]# X/ I3 s0 W: f9 g0 E
1002887A  |. |75 05       |jnz short xcEngine.100288817 g! Y! A4 F4 d' ^, Q7 U' s
1002887C  |. |834424 10 0>|add dword ptr ss:[esp+10],1/ G* C; a7 g1 h# v
10028881  |> |83C2 02     |add edx,23 k; ~6 b0 k2 E! X) U
10028884  |. |83EF 01     |sub edi,1
* V( W! U' j% @$ U" j; W10028887  |.^\\0F85 7AFFFF>\\jnz xcEngine.100288075 O% z( |. M5 v/ Q' `! T9 n* |
由于算法采用了浮点数指令,本人不太懂,边学习边研究中。。。。。。。。。
回复 支持 反对

使用道具 举报

8#
发表于 2010-4-1 11:13 | 只看该作者
加油!UNICODE码内核的游戏?5 {" F! P3 I7 X6 v
看来汉化有希望啊。
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

回 8楼(shane007) 的帖子

找到了内存中字库的地址,可在下面这个位置下断,% y* P8 c, {+ m/ n
+ p% J% _6 Z: c) z1 h
02A0EA5C  |. |8D0487      ||lea eax,dword ptr ds:[edi+eax*4]                     ;  eax存放的就是字库的地址: ~% t$ I- s# a* n1 Z6 c
这个字库不是点阵的,经过修改,字符的形状可发生变化,应该是矢量字库
回复 支持 反对

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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