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

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

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

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

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

关于静物2的分析

00403CE0  |> /3B96 10110000    /cmp edx,dword ptr ds:[esi+1110]& e  g5 O& B/ Y' G
00403CE6  |. |1BC9             |sbb ecx,ecx
, x* m9 n6 ]1 G00403CE8  |. |23D1             |and edx,ecx
8 Q4 {* J& b$ F! z, N; M/ X9 A! L00403CEA  |. |8B8E 0C110000    |mov ecx,dword ptr ds:[esi+110C]. R2 E, w' c* ^: F
00403CF0  |. |8A0C0A           |mov cl,byte ptr ds:[edx+ecx]2 ~# v* [3 A( ^" t2 x
00403CF3  |. |3008             |xor byte ptr ds:[eax],cl                   ;  这个循环就是异或算法
" K6 {. _# H- T+ P) T2 t00403CF5  |. |83C2 01          |add edx,12 J* T; e7 b5 h
00403CF8  |. |83C0 01          |add eax,1& i; M8 B8 L8 e/ i8 O0 e6 V9 X& X
00403CFB  |. |83EF 01          |sub edi,1; p9 T( ]1 |4 P; E: |
00403CFE  |.^\75 E0            \jnz short SL2.00403CE0: L% z: W- S4 W# @) l' l# I# Z

5 x7 ]) u/ H/ v4 g, L
9 [+ J4 `3 J0 B- z! o  y  p8 }8 X* m00401A42  |.  8D4C24 18        lea ecx,dword ptr ss:[esp+18]* {* B/ @9 c& X7 e; a6 _5 z. O, t9 n" q
00401A46  |.  51               push ecx
! i7 A. F% T- N, G00401A47  |.  8D4C24 24        lea ecx,dword ptr ss:[esp+24]
  a3 D4 A! a% a0 q1 V7 F00401A4B  |.  C68424 58110000 >mov byte ptr ss:[esp+1158],1
# b* Q5 q) H4 f00401A53  |.  C687 08010000 00 mov byte ptr ds:[edi+108],0! A- Q7 e+ L7 m. y5 M1 v
00401A5A  |.  E8 51240000      call SL2.00403EB0                           ;  读取字体函数的开始四个字节) _, a* i! R" g; E8 C6 {
00401A5F  |.  817C24 18 474D47>cmp dword ptr ss:[esp+18],42474D47          ;  此处可判断出开始的四个字节应该是魔幻数) t' ~# \/ W8 a( H" E# o
+0 魔幻数" a* R' ?# ~8 v  E. G; C
+4 段数,
; I0 R0 |: ~# {; N- |下面开始是每段的头部
0 z0 Z( z) _8 V1 ?; w) K$ ]1 P+46EE 正文
6 s4 [! P9 J" r1 e" T$ b9 `& _- v) @9 P1 Q
0203DDE0  2F 45 58 54 44 41 54 41 53 46 4F 4E 54 2F 41 52  /EXTDATASFONT/AR- k& b/ t; X4 ^+ M4 i- Y
0203DDF0  49 41 4C 20 31 31 2E 45 4E 00                    IAL 11.EN.* R6 K6 C+ P7 G8 S% |

% W3 I. F# K/ i  P/ N0203DEE0              75 16 00 00 (EE 46) 00 00 2F 45 58 54      ..頕../EXT: J; n4 C0 r2 g* ~9 C
0203DEF0  44 41 54 41 53 46 4F 4E 54 2F 41 52 49 41 4C 20  DATASFONT/ARIAL+ t; x# Q( {. C% w
0203DF00  31 32 2E 45 4E 00                                12.EN.
3 P5 z, e4 L0 j& j+ A/ z) v
9 u9 q) L1 U7 A% b上面表中的数据除了括号中的(EE 46),其余全部与解包后文件数据一致,* E4 p5 S' U0 h' x% l
1675是这个段的长度,46EE是这个在文件中的偏移,每段偏移值的算法如下:
( B$ k4 l: q. M; D+ P
8 V7 ]9 @( N  a* }- i, I00401AE0  |> /899401 08010000  /mov dword ptr ds:[ecx+eax+108],edx         ;  edx=46ee
7 p1 t) _4 E9 ^4 v! z; {% W00401AE7  |. |8B06             |mov eax,dword ptr ds:[esi]                 ;  [esi]存放读取字符的地址6 d3 O9 @& n- f" H* f7 T
00401AE9  |. |039401 04010000  |add edx,dword ptr ds:[ecx+eax+104]; @) Y4 c7 D4 D/ o! v  w2 F
00401AF0  |. |83C3 01          |add ebx,10 B8 h6 r  g# }- ]2 M' p
00401AF3  |. |81C1 0C010000    |add ecx,10C
/ C3 X  V7 S: ?5 `+ j00401AF9  |. |3B5C24 14        |cmp ebx,dword ptr ss:[esp+14]              ;  [esp+14]=1C2
/ o- F5 Z4 X* R6 I2 R00401AFD  |.^\72 E1            \jb short SL2.00401AE0
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

沙发
发表于 2010-3-28 11:32 | 只看该作者
首先对楼主的大力支持表示非常感谢!8 D" n1 t7 g" l6 C" P8 w, P
想问一下,通过以上分析,能得出什么阶段性的结论吗?
回复 支持 反对

使用道具 举报

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

使用道具 举报

地板
 楼主| 发表于 2010-3-28 12:06 | 只看该作者
Sl2fnt.dat文件格式分析如下:2 H) b1 \1 t! E; N
+0 474D4742  这个魔幻数
, V" ^+ L" E/ L/ v1 `% q9 O0 w
- U6 s# M* Y' h7 {1 L* F/ ]+4 C2010000  表示有01C2个文件
. r6 B; C; s, v0 q$ S3 N, l' y& C0 h4 I9 {, y- j+ H
+8 2F4558544441544153464F4E542F415249414C2031312E454E00
4 ^9 D. p% R5 m- V/EXTDATASFONT/ARIAL 11.EN.u* t# ^0 |! z" z  Y) C: G
这个应该是文件头部,ARIAL表示字体,EN表示英语 11表示字号3 w) x. P& C- d# E6 g# W
  E8 Q/ D- }$ Q( b7 \/ h; U- i
   751600 表示这个文件的大小3 k4 J9 K1 |8 s" s, A2 ~

3 D' [5 X0 K& Q* `5 U& J每个文件的偏移由上文中的最后那个函数得出
/ U& |2 |8 R, C  R- W3 W9 a1 w. ]1 c8 `: d. P7 K4 X% y# v2 d
7 |% N$ \) g! s2 l# a. h3 {8 E* y4 d
+46EE 此处开始是每个文件的正文
/ W" G1 w% v6 }' i4 V( Z) X
* s& y0 Y* ^$ f& v. D如上面我举的这个例子,文件正文内容起始地址+46EE,
1 W1 U. R+ F/ P" m! A- w结束地址为+(46EE+1675)
回复 支持 反对

使用道具 举报

5#
发表于 2010-3-28 12:11 | 只看该作者
这个其实不用分析,这个dat是个包文件,已经有解包器了啊。( G& }8 y+ O9 |" }6 a7 t+ K
需要分析的是里面解出来的字体文件。字体文件的magic number是XCPK.
: M  y9 T2 @) Y2 n" J8 L' A/ c/ P2 M
' F. l8 U/ k; j& ~" N7 X我想知道XCPK文件的结构。
回复 支持 反对

使用道具 举报

6#
发表于 2010-3-28 12:16 | 只看该作者
http://aluigi.altervista.org/papers.htm# d) Q( z0 u5 ^; A/ H' C, A5 v

9 v+ J, x' ^0 x& q这里有stilllife2 dat文件解包器,配合quickbms使用
回复 支持 反对

使用道具 举报

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

回 楼主(jinxin8866) 的帖子

写屏函数:0 L$ J# P* A. ^: N7 h  P
02A0EA4C  |> /8B00        |/mov eax,dword ptr ds:[eax]2 a1 p) Y( M0 Q" ?; [5 g
02A0EA4E  |. |0FB70450    ||movzx eax,word ptr ds:[eax+edx*2]                    ;  [eax+edx*2]存放字符的UNICODE码" k( o: `9 i+ E: {4 L
02A0EA52  |. |8B7C24 14   ||mov edi,dword ptr ss:[esp+14]
8 l( t" u( \+ \# E02A0EA56  |. |8B7F 2C     ||mov edi,dword ptr ds:[edi+2C]8 H7 M1 J: [2 |/ q, ?$ m( \
02A0EA59  |. |8D04C0      ||lea eax,dword ptr ds:[eax+eax*8]% i8 Y$ E( z( c! u
02A0EA5C  |. |8D0487      ||lea eax,dword ptr ds:[edi+eax*4]                     ;  eax存放字符编码表
: Z" K& }% W4 g6 E每个字符码表占24(16进制)个字节
/ @, Q8 O5 y: }7 `+ I" r% l5 Z02A0EA5F  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]' j" _+ V( i9 l+ {: E4 d  i  l9 t8 F6 ~
02A0EA63  |. |8D7C39 14   ||lea edi,dword ptr ds:[ecx+edi+14]                    ;  edi就是显存地址1 v9 j8 G, C- h& N# T" U
02A0EA67  |. |D940 04     ||fld dword ptr ds:[eax+4]
/ l( A& B  O$ O5 p) c: u0 l02A0EA6A  |. |83C2 01     ||add edx,1                                              字符个数加一5 T4 |/ }8 S, ]) g& c4 `; c
02A0EA6D  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]
- X7 X6 o0 M, Y+ n' P02A0EA71  |. |D900        ||fld dword ptr ds:[eax]$ d9 `" f( ^6 t8 E
02A0EA73  |. |D91F        ||fstp dword ptr ds:[edi]                              ;  edi就是显存地址- T; }) l4 B, e
每个字符占1C个字节,最后的四个字节都是一样的,可以认为是结束标志
) _( `' F: r5 E" A02A0EA75  |. |D94424 30   ||fld dword ptr ss:[esp+30]( y/ x8 L# t" ]/ ]1 c- P
02A0EA79  |. |D95F 04     ||fstp dword ptr ds:[edi+4]! T. g4 [1 z; o& K) k" ?, k+ m
02A0EA7C  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]  |' W3 M& D) [' N! i
02A0EA80  |. |D940 04     ||fld dword ptr ds:[eax+4]
. h6 e3 ~' Z7 [02A0EA83  |. |8D7C39 30   ||lea edi,dword ptr ds:[ecx+edi+30]2 ~7 G' B  H; X: K
02A0EA87  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]
5 n7 E+ q4 b# i" Q1 _/ i1 @02A0EA8B  |. |D940 08     ||fld dword ptr ds:[eax+8]
# h" _1 M& B4 L- k" ]% _02A0EA8E  |. |D91F        ||fstp dword ptr ds:[edi]" d0 ^* J9 ~+ s* R+ N
02A0EA90  |. |D94424 30   ||fld dword ptr ss:[esp+30]8 b$ x$ L( d, q( y8 u: i
02A0EA94  |. |D95F 04     ||fstp dword ptr ds:[edi+4]6 w1 j  Q9 T  C* H8 u* B
02A0EA97  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]) Y7 _8 j6 o; ^* R8 k3 x$ b* g. h5 a
02A0EA9B  |. |D940 0C     ||fld dword ptr ds:[eax+C]
/ x6 Y) q& `4 e" j7 D02A0EA9E  |. |8D7C39 4C   ||lea edi,dword ptr ds:[ecx+edi+4C]
+ `3 P: A! `# S8 S02A0EAA2  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]$ n/ j5 T. Q0 V+ E+ ~- `
02A0EAA6  |. |D900        ||fld dword ptr ds:[eax]' z0 u& p* x5 S. z+ Y
02A0EAA8  |. |D91F        ||fstp dword ptr ds:[edi], A' [; d) W! Y' P' b
02A0EAAA  |. |D94424 30   ||fld dword ptr ss:[esp+30]
( M) B( U3 l" f* d" p02A0EAAE  |. |D95F 04     ||fstp dword ptr ds:[edi+4]; i: ]2 `9 N7 t/ v# m+ T. v5 q
02A0EAB1  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]
) C% I: w% v9 i02A0EAB5  |. |D940 0C     ||fld dword ptr ds:[eax+C]% ^+ u. c0 |! ^5 a0 H
02A0EAB8  |. |8D7C39 68   ||lea edi,dword ptr ds:[ecx+edi+68]" ]! @  O7 R6 ^! `$ {+ H
02A0EABC  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]
* M' O6 Z7 L6 W( y7 r! w0 W02A0EAC0  |. |83C1 70     ||add ecx,70! K6 }) ~0 |" `, n# T* U/ V8 }. Z; i
02A0EAC3  |. |D940 08     ||fld dword ptr ds:[eax+8]
& J: D( t1 X0 G  ^4 C) |* z+ S( \' [02A0EAC6  |. |D91F        ||fstp dword ptr ds:[edi]
, ]# D+ v4 A/ y: i3 R1 P02A0EAC8  |. |D94424 30   ||fld dword ptr ss:[esp+30]
+ a9 r2 W: [' H: N02A0EACC  |. |D95F 04     ||fstp dword ptr ds:[edi+4]/ k! v6 O- u/ `
02A0EACF  |. |8B46 58     ||mov eax,dword ptr ds:[esi+58]
. ~: q4 F# ?  w. ?  q0 P  y+ d02A0EAD2  |. |03C3        ||add eax,ebx9 x& r: v# E+ N
02A0EAD4  |. |3B50 08     ||cmp edx,dword ptr ds:[eax+8]/ e  E. S  M$ M6 [' {
02A0EAD7  |.^\\0F8C 6FFFFF>|\\jl xcDxShad.02A0EA4C$ F! `9 q' [% C+ _  E
( R) I8 Z3 S- v
本游戏字符编码采用UNICODE,' _. p9 Q' d/ @' C: i2 j# y
对字符码表的操作:# d- Z& {) }) e4 ^. ?
10028807  |> /0FB702      /movzx eax,word ptr ds:[edx]        读字符的UNICODE码
) e$ W7 C# N& ~  W. N# H2 P! Z9 b1002880A  |. |8D04C0      |lea eax,dword ptr ds:[eax+eax*8]: \5 I) ]1 R# j" i; l/ p. S. G: h
1002880D  |. |8D0483      |lea eax,dword ptr ds:[ebx+eax*4]   根据UNICODE码求得字符码表的地址
9 Q0 c& h$ k4 j; e9 s- `* G0 z% q10028810  |. |33C9        |xor ecx,ecx
6 l2 J* }  T; s  i10028812  |. |DB40 20     |fild dword ptr ds:[eax+20]# `0 S) q, P1 @8 _( z
10028815  |. |D95C24 14   |fstp dword ptr ss:[esp+14]* G# q$ b* i1 C  d/ J0 ^
10028819  |. |D94424 14   |fld dword ptr ss:[esp+14]* w  |& Q5 [% c! u3 D" G" Z2 j
1002881D  |. |D9C0        |fld st+ n, q/ f5 v4 o6 n  V
1002881F  |. |D84E 14     |fmul dword ptr ds:[esi+14]! h2 \1 E2 ~* w* Z4 `( r* Y
10028822  |. |D94424 0C   |fld dword ptr ss:[esp+C]
- d: w( _7 y& M1 X+ U; k) `0 k4 R10028826  |. |D9C0        |fld st- |. ?4 E7 ^+ |* W, R
10028828  |. |DEC2        |faddp st(2),st$ i' X, N, u) n( F
1002882A  |. |D9C9        |fxch st(1)
+ t* Q+ b, L5 ?1002882C  |. |D95C24 14   |fstp dword ptr ss:[esp+14]
* {0 a3 h. y/ d: B2 T( U6 b10028830  |. |D8D3        |fcom st(3)0 b. R6 ]$ z% t' T1 o, ~
10028832  |. |DFE0        |fstsw ax, V) `" P4 l, {! M4 o9 i
10028834  |. |F6C4 01     |test ah,1! c) N5 t6 A5 p1 N2 j/ E
10028837  |. |74 2B       |je short xcEngine.10028864- P% b4 y7 f: s9 W4 T; i
10028839  |. |D94424 14   |fld dword ptr ss:[esp+14]
3 S8 q2 X7 P5 ^% x" ^1002883D  |. |D8D3        |fcom st(3)
; H9 U# g, _5 q% r1002883F  |. |DFE0        |fstsw ax) P! u7 m3 ^; q$ B" A! J0 m
10028841  |. |F6C4 41     |test ah,41
* G7 x; h$ I8 a/ b7 J6 M  ~10028844  |. |7A 04       |jpe short xcEngine.1002884A
/ e' D: c2 l* C# g2 w10028846  |. |DDD8        |fstp st' Q$ Y" V8 J- [: F) o
10028848  |. |EB 1A       |jmp short xcEngine.10028864
9 U& ?1 H4 X$ P$ w9 B6 h$ _" F1002884A  |> |D9C9        |fxch st(1)3 d$ B- l& J6 b6 |: t8 b
1002884C  |. |D8D3        |fcom st(3)2 V+ ?8 M6 {* L5 e' o" n) P. u
1002884E  |. |DFE0        |fstsw ax
. w6 Q; ~* O: p* g- R, y10028850  |. |F6C4 05     |test ah,5& y  P7 q  g! S$ I
10028853  |. |7A 04       |jpe short xcEngine.10028859; U* F: l: n4 ?6 ~# R+ [4 |
10028855  |. |DDD9        |fstp st(1)4 q& E0 l; h* c% K2 V. Z: i
10028857  |. |EB 0B       |jmp short xcEngine.10028864
8 u. l7 [% V' c, G5 w+ x10028859  |> |D9C9        |fxch st(1)! h+ w9 [; h$ r; q* [' U! R
1002885B  |. |D8DC        |fcomp st(4)4 j* o# G$ ]) `. o% @
1002885D  |. |DFE0        |fstsw ax
: D- y2 |1 `# E; n& [  T' v' K1002885F  |. |F6C4 41     |test ah,41( z7 F! }6 J7 [/ P0 X2 t
10028862  |. |75 05       |jnz short xcEngine.100288694 ~: x, a% w4 S  j
10028864  |> |B9 01000000 |mov ecx,14 O5 c5 o7 R# v2 d
10028869  |> |85C9        |test ecx,ecx3 W! |- A$ f, o/ a: O" ~
1002886B  |. |8B4424 18   |mov eax,dword ptr ss:[esp+18]
: }" G0 C/ G4 h! Z1002886F  |. |D940 14     |fld dword ptr ds:[eax+14]
: |# a0 }# Z, q  v8 E8 z10028872  |. |DECA        |fmulp st(2),st: ~9 X6 U9 U  Q5 a# [
10028874  |. |DEC1        |faddp st(1),st
* N9 P. I, v3 B: h9 I/ y' \: Z0 \( D4 O10028876  |. |D95C24 0C   |fstp dword ptr ss:[esp+C]2 B& i* h8 h7 ^; L9 I2 H
1002887A  |. |75 05       |jnz short xcEngine.10028881
# z& a3 ^2 T" M8 p1002887C  |. |834424 10 0>|add dword ptr ss:[esp+10],1
, o- c. H6 K5 \/ E( Z& G( w0 h10028881  |> |83C2 02     |add edx,2
( X# L3 z; Y: w. V  X) W; p: j10028884  |. |83EF 01     |sub edi,1
# o: Z6 i( T8 O: _8 X# W10028887  |.^\\0F85 7AFFFF>\\jnz xcEngine.10028807- y; l# g. i. B
由于算法采用了浮点数指令,本人不太懂,边学习边研究中。。。。。。。。。
回复 支持 反对

使用道具 举报

8#
发表于 2010-4-1 11:13 | 只看该作者
加油!UNICODE码内核的游戏?" X1 t% X% _2 m7 v
看来汉化有希望啊。
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

回 8楼(shane007) 的帖子

找到了内存中字库的地址,可在下面这个位置下断,, O2 z: L# Y3 v; X( x5 e7 C) w! v3 _' n
. S. ~& Y  }$ I( r
02A0EA5C  |. |8D0487      ||lea eax,dword ptr ds:[edi+eax*4]                     ;  eax存放的就是字库的地址
" L6 [/ U7 ]) z& \. r  ~; t这个字库不是点阵的,经过修改,字符的形状可发生变化,应该是矢量字库
回复 支持 反对

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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