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

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

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

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

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

关于静物2的分析

00403CE0  |> /3B96 10110000    /cmp edx,dword ptr ds:[esi+1110]
! R+ v: {/ a0 l; O00403CE6  |. |1BC9             |sbb ecx,ecx, a3 S. e0 Q7 T, H6 a# \
00403CE8  |. |23D1             |and edx,ecx) i$ L/ l6 A5 S% {
00403CEA  |. |8B8E 0C110000    |mov ecx,dword ptr ds:[esi+110C]
  f  z" I1 ~+ K. y3 f) r, k00403CF0  |. |8A0C0A           |mov cl,byte ptr ds:[edx+ecx]
& f. O2 t9 L3 s00403CF3  |. |3008             |xor byte ptr ds:[eax],cl                   ;  这个循环就是异或算法
; F1 U6 y- S. A# g' i' q7 G00403CF5  |. |83C2 01          |add edx,1% \6 x, N& `7 q: e4 K
00403CF8  |. |83C0 01          |add eax,1
- w6 }- {. [3 \- M/ h2 _  \# J8 D3 l00403CFB  |. |83EF 01          |sub edi,13 D5 r. b) K1 w6 T, l* w1 U
00403CFE  |.^\75 E0            \jnz short SL2.00403CE0
2 h. v5 E5 K6 s8 o* K
* q# k' d( p' Y$ t$ ?: a. M  _: e! R/ `+ J$ X2 H9 a/ S
00401A42  |.  8D4C24 18        lea ecx,dword ptr ss:[esp+18]# }/ Z: @# m3 O0 q8 q1 {
00401A46  |.  51               push ecx  m2 q+ v4 x2 @5 }, y* s
00401A47  |.  8D4C24 24        lea ecx,dword ptr ss:[esp+24]
7 S. R: u, q! R0 t: S00401A4B  |.  C68424 58110000 >mov byte ptr ss:[esp+1158],1$ i+ A2 t/ M' v- t
00401A53  |.  C687 08010000 00 mov byte ptr ds:[edi+108],01 Z& O' f4 e2 v" T
00401A5A  |.  E8 51240000      call SL2.00403EB0                           ;  读取字体函数的开始四个字节
: Y5 j4 }, Z: D- G( j" l4 x00401A5F  |.  817C24 18 474D47>cmp dword ptr ss:[esp+18],42474D47          ;  此处可判断出开始的四个字节应该是魔幻数
( P& L; j5 s2 H; z: D0 Y# \" f% H+0 魔幻数
% }1 m! L: O9 W9 A! o7 T+4 段数,
7 q& z0 x" P8 ]/ f% N! Q下面开始是每段的头部! [1 @+ O: g4 P8 S- I7 }
+46EE 正文
/ W! Z# v7 _# m& `" `1 `
/ D7 t8 e( ?4 d1 I: s% Q/ T# A0203DDE0  2F 45 58 54 44 41 54 41 53 46 4F 4E 54 2F 41 52  /EXTDATASFONT/AR! A9 \. t. ?2 I8 A$ Q+ P. N
0203DDF0  49 41 4C 20 31 31 2E 45 4E 00                    IAL 11.EN.8 e7 ?) k$ z& {( M1 r; ^
9 Z7 ]5 L1 \0 W' h; Y/ y
0203DEE0              75 16 00 00 (EE 46) 00 00 2F 45 58 54      ..頕../EXT
+ R# j* c- C. B* E/ n0203DEF0  44 41 54 41 53 46 4F 4E 54 2F 41 52 49 41 4C 20  DATASFONT/ARIAL
% {2 g4 ]  r& o  C8 g0203DF00  31 32 2E 45 4E 00                                12.EN.
* X* D; }. B" h+ m+ ^$ ^; j- q$ A$ h! y1 ?
上面表中的数据除了括号中的(EE 46),其余全部与解包后文件数据一致,( }9 n8 H# U2 Y% S5 ^$ b
1675是这个段的长度,46EE是这个在文件中的偏移,每段偏移值的算法如下:
  Z8 L  k$ @2 s# Z" a- }. }
9 T, i- C9 r% ]1 ]2 d7 \, b00401AE0  |> /899401 08010000  /mov dword ptr ds:[ecx+eax+108],edx         ;  edx=46ee
3 c& k1 u; l4 K$ Y8 A00401AE7  |. |8B06             |mov eax,dword ptr ds:[esi]                 ;  [esi]存放读取字符的地址
0 f: C# J7 w1 K& g# x00401AE9  |. |039401 04010000  |add edx,dword ptr ds:[ecx+eax+104]/ f* W2 ^9 a8 x  O( G9 S
00401AF0  |. |83C3 01          |add ebx,1% M4 w( t* @/ h; J0 c
00401AF3  |. |81C1 0C010000    |add ecx,10C# i: d8 U0 Q3 s2 `- ^+ T* T
00401AF9  |. |3B5C24 14        |cmp ebx,dword ptr ss:[esp+14]              ;  [esp+14]=1C25 u. Z% C' N. G) X
00401AFD  |.^\72 E1            \jb short SL2.00401AE0
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

沙发
发表于 2010-3-28 11:32 | 只看该作者
首先对楼主的大力支持表示非常感谢!
4 @% G8 `1 P# F/ U想问一下,通过以上分析,能得出什么阶段性的结论吗?
回复 支持 反对

使用道具 举报

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

使用道具 举报

地板
 楼主| 发表于 2010-3-28 12:06 | 只看该作者
Sl2fnt.dat文件格式分析如下:
' N1 S  _0 ?! I/ {; s5 l2 q: U8 T0 [+0 474D4742  这个魔幻数
) H6 @6 E8 N" w# e* Y- m
# z8 {  `* ?( y+4 C2010000  表示有01C2个文件
# @' d, o& w' e; o# p/ a
0 P2 p7 [  _" H) r& m+8 2F4558544441544153464F4E542F415249414C2031312E454E00
& ]1 L; ^' q* S1 U/EXTDATASFONT/ARIAL 11.EN.u1 D2 f  f4 y/ w# k3 Z& r0 P( y
这个应该是文件头部,ARIAL表示字体,EN表示英语 11表示字号
, Q; [4 Z  T' @; L% Z& {9 r8 K- E) I  E, d3 e! U- u: x
   751600 表示这个文件的大小
0 C3 n; N1 h1 _6 x8 ^& D& ^% e. V/ B; |* _* |
每个文件的偏移由上文中的最后那个函数得出) u+ E0 |: s6 \  I; _& U

2 p/ D0 D4 h+ q1 B7 g
! r+ }, e# \0 v  L8 b; ~# I3 h+46EE 此处开始是每个文件的正文
( ^" f& f' y. D$ ?8 G$ M2 \7 T5 }" S) K
. |8 j3 r" }3 F* A% q* r如上面我举的这个例子,文件正文内容起始地址+46EE,7 M6 m' a9 w% }# K6 \
结束地址为+(46EE+1675)
回复 支持 反对

使用道具 举报

5#
发表于 2010-3-28 12:11 | 只看该作者
这个其实不用分析,这个dat是个包文件,已经有解包器了啊。5 }8 r- G+ r7 T; X; A6 W
需要分析的是里面解出来的字体文件。字体文件的magic number是XCPK.+ s& w/ w  C( x
6 W# V6 A+ ]$ N. L
我想知道XCPK文件的结构。
回复 支持 反对

使用道具 举报

6#
发表于 2010-3-28 12:16 | 只看该作者
http://aluigi.altervista.org/papers.htm6 s. `: H6 ^$ y8 J: b& t4 m$ z9 b5 j

6 R  n9 W7 F$ Z8 h这里有stilllife2 dat文件解包器,配合quickbms使用
回复 支持 反对

使用道具 举报

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

回 楼主(jinxin8866) 的帖子

写屏函数:/ h1 T$ P! s. K/ B
02A0EA4C  |> /8B00        |/mov eax,dword ptr ds:[eax]# l. C/ A( c4 F  }0 F. k  v
02A0EA4E  |. |0FB70450    ||movzx eax,word ptr ds:[eax+edx*2]                    ;  [eax+edx*2]存放字符的UNICODE码
3 q/ O8 b+ }& [3 D  P# x' h02A0EA52  |. |8B7C24 14   ||mov edi,dword ptr ss:[esp+14]
7 m$ i& o  y9 K' Y5 I02A0EA56  |. |8B7F 2C     ||mov edi,dword ptr ds:[edi+2C]
4 A9 ?. P- n/ ?1 ~" x) [02A0EA59  |. |8D04C0      ||lea eax,dword ptr ds:[eax+eax*8]: V+ Y& h# L3 L1 u
02A0EA5C  |. |8D0487      ||lea eax,dword ptr ds:[edi+eax*4]                     ;  eax存放字符编码表
" s0 v' b& m! o0 T每个字符码表占24(16进制)个字节  H0 Z/ A; j  r- E( W1 L& @
02A0EA5F  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]
; ?" o- [: O0 N3 ~02A0EA63  |. |8D7C39 14   ||lea edi,dword ptr ds:[ecx+edi+14]                    ;  edi就是显存地址
+ k# g3 B0 W( D; C02A0EA67  |. |D940 04     ||fld dword ptr ds:[eax+4]5 a- G7 U6 L$ i6 e  [0 ?" K$ z
02A0EA6A  |. |83C2 01     ||add edx,1                                              字符个数加一
* T3 B) o' d7 h: ]# }+ ]* o' F02A0EA6D  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]
0 F5 C9 Q% q; `02A0EA71  |. |D900        ||fld dword ptr ds:[eax]* X0 X% z' A# N* S
02A0EA73  |. |D91F        ||fstp dword ptr ds:[edi]                              ;  edi就是显存地址
8 ^3 G1 T6 m' t' K+ O" L5 G1 B" ]每个字符占1C个字节,最后的四个字节都是一样的,可以认为是结束标志7 t- U9 T  A& D7 d
02A0EA75  |. |D94424 30   ||fld dword ptr ss:[esp+30]6 u" K! `" w1 e$ E7 k
02A0EA79  |. |D95F 04     ||fstp dword ptr ds:[edi+4]
4 @: H0 G' m+ D- B# I02A0EA7C  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]& U9 w3 ], ~$ u
02A0EA80  |. |D940 04     ||fld dword ptr ds:[eax+4]
( @- u5 Y! e% d# {8 Y1 }, \. q02A0EA83  |. |8D7C39 30   ||lea edi,dword ptr ds:[ecx+edi+30]
! }7 I3 r1 y/ e9 X4 S* }/ n02A0EA87  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]
, _+ d* y+ t' ]) v" x, V) P2 c02A0EA8B  |. |D940 08     ||fld dword ptr ds:[eax+8]
2 G) g: ?# B# b02A0EA8E  |. |D91F        ||fstp dword ptr ds:[edi]
- O' ~" n' o, c. d8 N* D02A0EA90  |. |D94424 30   ||fld dword ptr ss:[esp+30]
4 R4 f# U8 k8 [; v6 J) \/ R02A0EA94  |. |D95F 04     ||fstp dword ptr ds:[edi+4]$ ?5 X5 M# V8 r
02A0EA97  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]+ D9 s3 w9 h8 {7 e
02A0EA9B  |. |D940 0C     ||fld dword ptr ds:[eax+C]
3 ]. h: [! w$ ?02A0EA9E  |. |8D7C39 4C   ||lea edi,dword ptr ds:[ecx+edi+4C]
/ x% R0 q4 v5 h( I02A0EAA2  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]
+ v0 A  F0 ]! V: z) f: q9 t* @02A0EAA6  |. |D900        ||fld dword ptr ds:[eax]# Q  Z9 _% G% V( M+ b$ U/ j2 R+ _" A' x
02A0EAA8  |. |D91F        ||fstp dword ptr ds:[edi]
; K) V2 Y6 S, G; u4 g02A0EAAA  |. |D94424 30   ||fld dword ptr ss:[esp+30]+ X& s! P/ a5 a
02A0EAAE  |. |D95F 04     ||fstp dword ptr ds:[edi+4]# }" I! X6 I7 ], y0 n
02A0EAB1  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]
5 R9 q1 Y$ y0 e9 m7 @/ h2 ]& Q02A0EAB5  |. |D940 0C     ||fld dword ptr ds:[eax+C]
2 _9 H, J3 {$ c1 p! C. e02A0EAB8  |. |8D7C39 68   ||lea edi,dword ptr ds:[ecx+edi+68]9 G0 a& l5 J1 G! n
02A0EABC  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]
. Z! ~$ t5 V& X* `, }( s/ q3 N4 L02A0EAC0  |. |83C1 70     ||add ecx,704 q2 A& D* I! y9 g0 q# b4 D
02A0EAC3  |. |D940 08     ||fld dword ptr ds:[eax+8]
- X5 j2 s5 W+ f9 \' z02A0EAC6  |. |D91F        ||fstp dword ptr ds:[edi]
! A+ _- ^% G8 `9 ]  n02A0EAC8  |. |D94424 30   ||fld dword ptr ss:[esp+30]
+ `! u1 Z0 k' G0 B1 U  G( }" n02A0EACC  |. |D95F 04     ||fstp dword ptr ds:[edi+4]- k$ ]  K+ k" X' x$ s7 m
02A0EACF  |. |8B46 58     ||mov eax,dword ptr ds:[esi+58]
3 O+ y! B6 Q; T. g4 F" X02A0EAD2  |. |03C3        ||add eax,ebx
' j. A1 Z9 s- S$ `8 D02A0EAD4  |. |3B50 08     ||cmp edx,dword ptr ds:[eax+8]/ W8 n8 W6 L/ R5 U  b
02A0EAD7  |.^\\0F8C 6FFFFF>|\\jl xcDxShad.02A0EA4C
6 B, g  r" Z& T6 s: g6 Q9 o! h/ o1 R" n. Q5 ?, r: X: Q0 B: j
本游戏字符编码采用UNICODE,+ ?! X( M. u) q6 H  o: \2 r
对字符码表的操作:
. l; X3 d9 ?- S10028807  |> /0FB702      /movzx eax,word ptr ds:[edx]        读字符的UNICODE码% E2 ~5 s. V3 Y# `" }) {
1002880A  |. |8D04C0      |lea eax,dword ptr ds:[eax+eax*8]" J* M0 Y6 G# m8 |2 z& Y$ [
1002880D  |. |8D0483      |lea eax,dword ptr ds:[ebx+eax*4]   根据UNICODE码求得字符码表的地址
6 S/ R/ \+ d7 f, ]# d8 c10028810  |. |33C9        |xor ecx,ecx
4 f8 H8 b3 @/ F7 E4 _6 A1 o/ Z' `10028812  |. |DB40 20     |fild dword ptr ds:[eax+20]3 h% o6 w8 _# I- t: z6 D3 I
10028815  |. |D95C24 14   |fstp dword ptr ss:[esp+14]9 k' t  S4 P  y8 e# Q, s4 f
10028819  |. |D94424 14   |fld dword ptr ss:[esp+14]
" Z4 @1 n# L( A0 \1 x1002881D  |. |D9C0        |fld st
# R, O) g. \, ^( x. p* L& J1002881F  |. |D84E 14     |fmul dword ptr ds:[esi+14]* P$ J! w! k: z7 {
10028822  |. |D94424 0C   |fld dword ptr ss:[esp+C], S. p0 J& ~6 |1 \, H
10028826  |. |D9C0        |fld st
7 d* \, _0 G7 D& o, {1 l10028828  |. |DEC2        |faddp st(2),st
5 C2 J5 G3 i0 x$ i2 p3 p1002882A  |. |D9C9        |fxch st(1)) R8 j  P5 o  j: f+ T
1002882C  |. |D95C24 14   |fstp dword ptr ss:[esp+14]1 ]1 n) b+ e0 }* Z' y
10028830  |. |D8D3        |fcom st(3)
" S8 q9 f) Y/ n9 _10028832  |. |DFE0        |fstsw ax6 A6 e) O* k9 ]6 b# x
10028834  |. |F6C4 01     |test ah,1
% O, S, P, Z7 S* M+ A: g+ Y10028837  |. |74 2B       |je short xcEngine.10028864! W2 |% S, g; N# r( k
10028839  |. |D94424 14   |fld dword ptr ss:[esp+14]
) D1 S( L. P1 {8 D+ Q5 \1002883D  |. |D8D3        |fcom st(3)
) h4 y. K5 I, G& i1002883F  |. |DFE0        |fstsw ax, ^/ K  Z' N0 _* f+ y2 t4 h: X$ B
10028841  |. |F6C4 41     |test ah,41
1 _) a. K) n4 _8 j6 @' t10028844  |. |7A 04       |jpe short xcEngine.1002884A# b; B, n" v1 r, Z3 o) A  r: \
10028846  |. |DDD8        |fstp st: m. h' O! ~" `
10028848  |. |EB 1A       |jmp short xcEngine.10028864# p0 Z. w* L- H& m9 Z3 N; v. n' V
1002884A  |> |D9C9        |fxch st(1)
3 W2 ?# x8 `& F" X2 c: Y5 D1002884C  |. |D8D3        |fcom st(3)8 `& L3 {% s5 C0 E
1002884E  |. |DFE0        |fstsw ax9 H5 d" E+ c5 v1 S* R# X
10028850  |. |F6C4 05     |test ah,58 J. |" l& F2 J
10028853  |. |7A 04       |jpe short xcEngine.100288599 l' Z& @# @; Z0 i; P
10028855  |. |DDD9        |fstp st(1); F( C0 d# M7 i% e9 ^
10028857  |. |EB 0B       |jmp short xcEngine.100288649 G" T$ o9 K$ D- ^* ~
10028859  |> |D9C9        |fxch st(1)
' N6 L% r& g3 d  Q- m1002885B  |. |D8DC        |fcomp st(4)- A! ?2 I& C( \2 A6 {  }& D+ G
1002885D  |. |DFE0        |fstsw ax
  i- [7 E$ {) f& B4 V  A1002885F  |. |F6C4 41     |test ah,41
) ~, S  U2 Z% P1 ]10028862  |. |75 05       |jnz short xcEngine.10028869" I, ?1 b4 k6 ]/ V6 @# V, Z
10028864  |> |B9 01000000 |mov ecx,1
, @+ b0 m4 K, R: C10028869  |> |85C9        |test ecx,ecx8 a( V# ~* [; m! ?1 B" o
1002886B  |. |8B4424 18   |mov eax,dword ptr ss:[esp+18]8 n) ~7 F0 V9 F( a
1002886F  |. |D940 14     |fld dword ptr ds:[eax+14]5 O8 Y$ Q, M* p) Y0 _1 Q
10028872  |. |DECA        |fmulp st(2),st
0 @' A4 P) |1 D7 ^- d. f2 l10028874  |. |DEC1        |faddp st(1),st
0 z5 ]4 x/ O( z; B1 W5 a% x2 h10028876  |. |D95C24 0C   |fstp dword ptr ss:[esp+C]) [/ M3 K5 Z6 [* o7 G2 }# |
1002887A  |. |75 05       |jnz short xcEngine.100288813 V8 u% j0 }* k! b9 M: P
1002887C  |. |834424 10 0>|add dword ptr ss:[esp+10],1
8 W6 ]" m# E: j  R- e10028881  |> |83C2 02     |add edx,2
. G: }" M. _/ i( r0 y$ }7 e* U10028884  |. |83EF 01     |sub edi,1
  q" K6 ?4 w9 y) D5 @10028887  |.^\\0F85 7AFFFF>\\jnz xcEngine.10028807
1 d, a' k$ \% H: Q; j由于算法采用了浮点数指令,本人不太懂,边学习边研究中。。。。。。。。。
回复 支持 反对

使用道具 举报

8#
发表于 2010-4-1 11:13 | 只看该作者
加油!UNICODE码内核的游戏?
7 |, C# K: a0 B看来汉化有希望啊。
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

回 8楼(shane007) 的帖子

找到了内存中字库的地址,可在下面这个位置下断,0 [$ C% t; j7 V" a6 z
; m0 F  ~9 {" O: J: U& I
02A0EA5C  |. |8D0487      ||lea eax,dword ptr ds:[edi+eax*4]                     ;  eax存放的就是字库的地址
9 T4 r- d: z  S2 P$ x这个字库不是点阵的,经过修改,字符的形状可发生变化,应该是矢量字库
回复 支持 反对

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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