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

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

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

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

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

关于静物2的分析

00403CE0  |> /3B96 10110000    /cmp edx,dword ptr ds:[esi+1110]7 m# E& M( C, z; ?, J( e
00403CE6  |. |1BC9             |sbb ecx,ecx
) o/ R+ n1 j- k) [0 U( }6 j; h00403CE8  |. |23D1             |and edx,ecx
* J# s$ f4 _1 l# h" y' }- o/ y00403CEA  |. |8B8E 0C110000    |mov ecx,dword ptr ds:[esi+110C]1 q7 f; W6 M6 o4 j
00403CF0  |. |8A0C0A           |mov cl,byte ptr ds:[edx+ecx]: m6 |: D2 D9 [3 y* E
00403CF3  |. |3008             |xor byte ptr ds:[eax],cl                   ;  这个循环就是异或算法
* W, g& S- R8 E; u# f; r! @; N00403CF5  |. |83C2 01          |add edx,1* B; K' ~- W% U+ g
00403CF8  |. |83C0 01          |add eax,1( {4 L* Q1 Y7 R! ^& G1 S- V
00403CFB  |. |83EF 01          |sub edi,17 ^, K+ Y( m5 A8 q4 V3 q" G
00403CFE  |.^\75 E0            \jnz short SL2.00403CE0
; k4 b& D# F( X) _/ Q" a1 Q4 z) f4 X: \( i
7 ?5 {/ F( w- K
00401A42  |.  8D4C24 18        lea ecx,dword ptr ss:[esp+18]0 x* v0 T; W" o4 H$ E2 U. Z/ t) w
00401A46  |.  51               push ecx& L6 L: w/ P1 |
00401A47  |.  8D4C24 24        lea ecx,dword ptr ss:[esp+24]
) a2 o3 m0 U; _! B00401A4B  |.  C68424 58110000 >mov byte ptr ss:[esp+1158],1
! Z" s' u9 y+ f4 P7 i00401A53  |.  C687 08010000 00 mov byte ptr ds:[edi+108],0
+ h  m: K& U; E& m00401A5A  |.  E8 51240000      call SL2.00403EB0                           ;  读取字体函数的开始四个字节
- `* b7 Y& Z0 x: i: Y7 v00401A5F  |.  817C24 18 474D47>cmp dword ptr ss:[esp+18],42474D47          ;  此处可判断出开始的四个字节应该是魔幻数
) W; H7 A  q/ z3 q5 B, i+0 魔幻数
" ?9 `1 W+ X) C3 L+4 段数,3 V  V* n% h2 Q, f
下面开始是每段的头部; C  ]& }9 S7 X
+46EE 正文
2 R% ]+ N2 Y* s4 e8 j. S' r' ~7 a
1 B6 y' I, R$ v+ j% B0203DDE0  2F 45 58 54 44 41 54 41 53 46 4F 4E 54 2F 41 52  /EXTDATASFONT/AR
; @& ^' \/ p7 M% y( @+ e: b1 z; N0203DDF0  49 41 4C 20 31 31 2E 45 4E 00                    IAL 11.EN.
' W, X" v* X4 O, D, P' ]1 x& [
0 Z; W+ }2 L, ^+ A2 g5 I0203DEE0              75 16 00 00 (EE 46) 00 00 2F 45 58 54      ..頕../EXT. c; }" s5 N% `" I5 b/ z
0203DEF0  44 41 54 41 53 46 4F 4E 54 2F 41 52 49 41 4C 20  DATASFONT/ARIAL
/ ^! Y2 F' [: C! t& g3 _0203DF00  31 32 2E 45 4E 00                                12.EN.  h, I+ ^/ \7 a$ c  f) w" c* l

3 O1 l$ o  h1 [$ f上面表中的数据除了括号中的(EE 46),其余全部与解包后文件数据一致,
6 _( n5 j7 V) N' [9 g1675是这个段的长度,46EE是这个在文件中的偏移,每段偏移值的算法如下:
/ \- Q2 m& o& V' d" G# k1 H
4 Z, V- p3 H* T( X7 _00401AE0  |> /899401 08010000  /mov dword ptr ds:[ecx+eax+108],edx         ;  edx=46ee
9 Y% K9 A6 _) ]4 \5 A% ?00401AE7  |. |8B06             |mov eax,dword ptr ds:[esi]                 ;  [esi]存放读取字符的地址6 ]5 K$ n: q9 E8 }1 i7 x
00401AE9  |. |039401 04010000  |add edx,dword ptr ds:[ecx+eax+104]2 z: v' C# f9 w7 d
00401AF0  |. |83C3 01          |add ebx,1
7 k. T# }' G1 F& {9 i00401AF3  |. |81C1 0C010000    |add ecx,10C
" B" J; R" U6 j/ i, Z' @00401AF9  |. |3B5C24 14        |cmp ebx,dword ptr ss:[esp+14]              ;  [esp+14]=1C2
# L3 z+ e4 ?8 G, `# h% B00401AFD  |.^\72 E1            \jb short SL2.00401AE0
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

沙发
发表于 2010-3-28 11:32 | 只看该作者
首先对楼主的大力支持表示非常感谢!" S# O8 p) v+ b5 S, G+ E5 x
想问一下,通过以上分析,能得出什么阶段性的结论吗?
回复 支持 反对

使用道具 举报

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

使用道具 举报

地板
 楼主| 发表于 2010-3-28 12:06 | 只看该作者
Sl2fnt.dat文件格式分析如下:
; |. K( [$ D+ g1 o& _4 t  z+0 474D4742  这个魔幻数
+ H+ g7 c& p- U: b$ o0 q# V4 I) Q7 \
+4 C2010000  表示有01C2个文件
1 L3 \6 y" Y; E2 O5 O7 H9 \
4 i; B0 M6 q; E) J+8 2F4558544441544153464F4E542F415249414C2031312E454E00" g8 O% d3 }0 h$ C: l
/EXTDATASFONT/ARIAL 11.EN.u* r9 U: h! `8 E& [
这个应该是文件头部,ARIAL表示字体,EN表示英语 11表示字号
( \6 H( D2 h! a/ y2 F
9 t3 U! a7 n6 D) M' |   751600 表示这个文件的大小: d5 f+ D/ F; h/ v
5 W; W. V5 F5 y# |; m8 }
每个文件的偏移由上文中的最后那个函数得出& v' W8 F& L, p3 ?6 n  p. Q

0 S1 u- b# V3 S; F8 v: ~$ I
% A9 A% @/ h- _( ~! d  Y( y+46EE 此处开始是每个文件的正文. l$ C/ X- e6 u( U! C7 t& h/ k

2 g3 @( D2 s9 P& [# S) p4 Y; w6 n如上面我举的这个例子,文件正文内容起始地址+46EE,
1 w& s7 S/ _5 R, ~结束地址为+(46EE+1675)
回复 支持 反对

使用道具 举报

5#
发表于 2010-3-28 12:11 | 只看该作者
这个其实不用分析,这个dat是个包文件,已经有解包器了啊。
0 k4 `" q3 R+ |, i需要分析的是里面解出来的字体文件。字体文件的magic number是XCPK.9 y' ]5 i) D% n/ L' e

* c/ v  }* T3 N我想知道XCPK文件的结构。
回复 支持 反对

使用道具 举报

6#
发表于 2010-3-28 12:16 | 只看该作者
http://aluigi.altervista.org/papers.htm
% _+ ]  A2 l) D  k
% w8 O# p, B) x  v这里有stilllife2 dat文件解包器,配合quickbms使用
回复 支持 反对

使用道具 举报

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

回 楼主(jinxin8866) 的帖子

写屏函数:' c" B2 [# s: Z4 [, [+ w+ ~
02A0EA4C  |> /8B00        |/mov eax,dword ptr ds:[eax]2 S  I' e+ n: M9 Z) B
02A0EA4E  |. |0FB70450    ||movzx eax,word ptr ds:[eax+edx*2]                    ;  [eax+edx*2]存放字符的UNICODE码
. |* k5 I. z$ ^- w. v1 [2 `02A0EA52  |. |8B7C24 14   ||mov edi,dword ptr ss:[esp+14]
9 |+ i( ~- m3 d+ ~7 [' d02A0EA56  |. |8B7F 2C     ||mov edi,dword ptr ds:[edi+2C]
; j% h/ x2 X, h( K02A0EA59  |. |8D04C0      ||lea eax,dword ptr ds:[eax+eax*8]8 P8 I% u  Y, j% c& F& t5 i/ a- ]
02A0EA5C  |. |8D0487      ||lea eax,dword ptr ds:[edi+eax*4]                     ;  eax存放字符编码表
1 w) r9 h6 Z% J# c3 s9 M每个字符码表占24(16进制)个字节
8 q1 Z4 E. s1 b8 O02A0EA5F  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]+ z4 }+ p+ b& v. h- E
02A0EA63  |. |8D7C39 14   ||lea edi,dword ptr ds:[ecx+edi+14]                    ;  edi就是显存地址
3 T8 M8 z3 v: A% u7 V02A0EA67  |. |D940 04     ||fld dword ptr ds:[eax+4]
" L1 L# Y1 x/ ]; F02A0EA6A  |. |83C2 01     ||add edx,1                                              字符个数加一
# f9 h2 L3 ~4 t7 h  ?02A0EA6D  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]6 ~: n4 R6 E; G' H7 r
02A0EA71  |. |D900        ||fld dword ptr ds:[eax]. A% Z* J" V  j' a. k2 q
02A0EA73  |. |D91F        ||fstp dword ptr ds:[edi]                              ;  edi就是显存地址
% \, ]$ P$ Y& j/ k  k! A5 ^! H每个字符占1C个字节,最后的四个字节都是一样的,可以认为是结束标志* @- k- q+ X7 y9 ?+ f9 ^: k
02A0EA75  |. |D94424 30   ||fld dword ptr ss:[esp+30]* i2 b3 W1 s. i) w" C6 V- B
02A0EA79  |. |D95F 04     ||fstp dword ptr ds:[edi+4]& ^  C  U. U" R& g5 p
02A0EA7C  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]
! \7 K. U  _9 E6 H02A0EA80  |. |D940 04     ||fld dword ptr ds:[eax+4]6 @6 d* L; R/ l" o8 t6 h
02A0EA83  |. |8D7C39 30   ||lea edi,dword ptr ds:[ecx+edi+30]2 V0 b* g/ ^: L' }
02A0EA87  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]; D& M+ U5 B4 k( }
02A0EA8B  |. |D940 08     ||fld dword ptr ds:[eax+8]
6 P  S# _; s+ g- @$ O: t' k02A0EA8E  |. |D91F        ||fstp dword ptr ds:[edi]' `9 c- p6 b  E& S+ o9 E3 ]
02A0EA90  |. |D94424 30   ||fld dword ptr ss:[esp+30]7 p% s" }# y7 _4 b- I2 |
02A0EA94  |. |D95F 04     ||fstp dword ptr ds:[edi+4]
- ?; z7 g* H; U' J1 f02A0EA97  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]
+ R8 D3 M$ N4 i  F5 t) ~02A0EA9B  |. |D940 0C     ||fld dword ptr ds:[eax+C]; g; W7 }& h3 r7 T% g! s
02A0EA9E  |. |8D7C39 4C   ||lea edi,dword ptr ds:[ecx+edi+4C]5 w2 \3 }: x5 H5 ]# q9 c
02A0EAA2  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]* k, e- O) ~. g# V
02A0EAA6  |. |D900        ||fld dword ptr ds:[eax]
- s( O7 g. @. `0 b; N( k02A0EAA8  |. |D91F        ||fstp dword ptr ds:[edi]: l  E0 I  Q& c" U* x7 a
02A0EAAA  |. |D94424 30   ||fld dword ptr ss:[esp+30]# q- S9 A" A- T
02A0EAAE  |. |D95F 04     ||fstp dword ptr ds:[edi+4]8 D- b2 q& N5 `  b4 o
02A0EAB1  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]
9 j6 m4 B# @$ i. u7 R/ l( F+ D02A0EAB5  |. |D940 0C     ||fld dword ptr ds:[eax+C]' O3 I: v7 w4 M2 r1 f6 y2 b
02A0EAB8  |. |8D7C39 68   ||lea edi,dword ptr ds:[ecx+edi+68]9 ~7 r' I5 Q: X4 N* o& \
02A0EABC  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]. U; ]3 r/ {$ T" K% A/ q7 }
02A0EAC0  |. |83C1 70     ||add ecx,708 k' v5 i$ u& N
02A0EAC3  |. |D940 08     ||fld dword ptr ds:[eax+8]
  w- g, V1 b4 {# @% V) B, r, x, M5 D02A0EAC6  |. |D91F        ||fstp dword ptr ds:[edi]$ }% O! `* q! `( H  Q7 W& ^
02A0EAC8  |. |D94424 30   ||fld dword ptr ss:[esp+30], f+ D, N% J1 Y' F' n0 V( u1 L
02A0EACC  |. |D95F 04     ||fstp dword ptr ds:[edi+4]
/ h; F3 Y6 h& h5 x6 V$ z, q02A0EACF  |. |8B46 58     ||mov eax,dword ptr ds:[esi+58]7 P3 v& F1 K: t3 k, {' g! x% V
02A0EAD2  |. |03C3        ||add eax,ebx
2 b! u, R: w- P. Q( f/ B02A0EAD4  |. |3B50 08     ||cmp edx,dword ptr ds:[eax+8]
7 c3 `/ p8 e, V1 D' o- ^02A0EAD7  |.^\\0F8C 6FFFFF>|\\jl xcDxShad.02A0EA4C# r, ]  X! b; p$ J5 J
6 v8 Q: _* e5 R, q4 v
本游戏字符编码采用UNICODE,
' V9 b5 B& C! W2 n2 e对字符码表的操作:! P$ N$ U) @' g- j! x
10028807  |> /0FB702      /movzx eax,word ptr ds:[edx]        读字符的UNICODE码
- {5 N- \4 N) p6 N1002880A  |. |8D04C0      |lea eax,dword ptr ds:[eax+eax*8]
0 o8 d' x1 e, E. H1002880D  |. |8D0483      |lea eax,dword ptr ds:[ebx+eax*4]   根据UNICODE码求得字符码表的地址
8 {+ t. [; E+ x" J& e- i; |! a10028810  |. |33C9        |xor ecx,ecx
2 Z. A" `+ A# X3 D+ Q6 E10028812  |. |DB40 20     |fild dword ptr ds:[eax+20]- V1 g8 s4 B  ?6 j
10028815  |. |D95C24 14   |fstp dword ptr ss:[esp+14]7 A4 P6 E. X: S0 @5 y! P9 {8 d
10028819  |. |D94424 14   |fld dword ptr ss:[esp+14]
/ `8 T; {# [' l* ^! r; t( q1002881D  |. |D9C0        |fld st
: k  h6 L6 G3 l8 ~1002881F  |. |D84E 14     |fmul dword ptr ds:[esi+14]
; \2 z% u3 ~# _  T6 ?& \10028822  |. |D94424 0C   |fld dword ptr ss:[esp+C]
3 Y" U( M& h; w) r; \% {1 N* Q10028826  |. |D9C0        |fld st
1 ^. e% c' }. v7 G6 o10028828  |. |DEC2        |faddp st(2),st- `* G3 w7 Y" _  b1 W2 Y
1002882A  |. |D9C9        |fxch st(1)6 I2 Z- c& r, t
1002882C  |. |D95C24 14   |fstp dword ptr ss:[esp+14]
6 p& P+ r6 O' k# M9 I* R, N( e10028830  |. |D8D3        |fcom st(3)7 H# C% |, N2 _9 {
10028832  |. |DFE0        |fstsw ax
2 Y/ N$ @. g( O" \6 Q10028834  |. |F6C4 01     |test ah,1
1 j4 t- ~4 N, Q/ G! w2 I10028837  |. |74 2B       |je short xcEngine.100288649 S5 t) H) B4 I# b5 p; K4 b
10028839  |. |D94424 14   |fld dword ptr ss:[esp+14]
# q/ P. K1 `: ?5 ]8 k) Q' `, M1002883D  |. |D8D3        |fcom st(3)  g- k. A- ~/ e- B0 B* t
1002883F  |. |DFE0        |fstsw ax
" }$ @  ^( a! B+ o: B/ v10028841  |. |F6C4 41     |test ah,415 R1 }0 d# E0 p) i
10028844  |. |7A 04       |jpe short xcEngine.1002884A
. N+ K$ V7 D- J" ~9 |  l" X10028846  |. |DDD8        |fstp st/ e6 f& Y1 Q7 ~  O1 _) [
10028848  |. |EB 1A       |jmp short xcEngine.10028864
0 n" `9 j) n: d  ?& B) s) J1002884A  |> |D9C9        |fxch st(1)8 s2 U; q) I! h# R/ u1 z- `, K
1002884C  |. |D8D3        |fcom st(3)
& i6 \! Z$ m- p4 m  U/ U& O1002884E  |. |DFE0        |fstsw ax4 s  N( @/ Q6 r! T1 I: D7 D
10028850  |. |F6C4 05     |test ah,5
  p( r( }6 F& B: n10028853  |. |7A 04       |jpe short xcEngine.10028859
. z6 o" A  q" [& ?; D2 v10028855  |. |DDD9        |fstp st(1)2 o7 e( L2 ~0 D! |" J% M! H; a
10028857  |. |EB 0B       |jmp short xcEngine.10028864
! E3 o  _9 Y2 g2 v: x2 g10028859  |> |D9C9        |fxch st(1)
- E2 g) W2 \7 r2 c% a% ?1002885B  |. |D8DC        |fcomp st(4)4 Q' Z  v1 ~2 F  r0 q% L
1002885D  |. |DFE0        |fstsw ax
, D/ A2 T" h6 J' W1002885F  |. |F6C4 41     |test ah,418 k0 N2 J/ e7 q" P/ B8 w( G& W
10028862  |. |75 05       |jnz short xcEngine.10028869
7 |, Q$ d5 o; j3 g8 @2 y10028864  |> |B9 01000000 |mov ecx,1
- J8 P+ v7 B& @  p# C3 N, }3 p! E10028869  |> |85C9        |test ecx,ecx: h6 G- {7 l0 s5 p) C( |* ]9 ^
1002886B  |. |8B4424 18   |mov eax,dword ptr ss:[esp+18]
9 h; C) L8 G. H8 t2 W$ Z1002886F  |. |D940 14     |fld dword ptr ds:[eax+14]) T" ]( K; }5 e4 w/ i- Y
10028872  |. |DECA        |fmulp st(2),st: q& f0 K. ]# S! P3 l
10028874  |. |DEC1        |faddp st(1),st
1 \! u# P' }  `' d, A8 g# o10028876  |. |D95C24 0C   |fstp dword ptr ss:[esp+C]$ j) _0 {# {/ x& V* z6 |* ^: a( Y% b  ^
1002887A  |. |75 05       |jnz short xcEngine.10028881
2 a) Q+ X/ X9 G% `! f1002887C  |. |834424 10 0>|add dword ptr ss:[esp+10],1
: l' B, |2 f. ^. z. i' V: X' H, t0 z# U10028881  |> |83C2 02     |add edx,2
! u3 q3 n6 o$ K8 }* r6 `, n8 q$ Z9 M10028884  |. |83EF 01     |sub edi,1
* O7 i+ U6 s  A* h# u6 x10028887  |.^\\0F85 7AFFFF>\\jnz xcEngine.10028807' q  l* |# K3 `# [5 k
由于算法采用了浮点数指令,本人不太懂,边学习边研究中。。。。。。。。。
回复 支持 反对

使用道具 举报

8#
发表于 2010-4-1 11:13 | 只看该作者
加油!UNICODE码内核的游戏?
3 h# \5 e- a( ]. J5 p) G/ Z. a6 M看来汉化有希望啊。
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

回 8楼(shane007) 的帖子

找到了内存中字库的地址,可在下面这个位置下断,8 I% l$ H+ l' `
& t* j4 S) r( N' _2 L7 h% K
02A0EA5C  |. |8D0487      ||lea eax,dword ptr ds:[edi+eax*4]                     ;  eax存放的就是字库的地址* \& ]: B, Y- ]3 E
这个字库不是点阵的,经过修改,字符的形状可发生变化,应该是矢量字库
回复 支持 反对

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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