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

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

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

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

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

关于静物2的分析

00403CE0  |> /3B96 10110000    /cmp edx,dword ptr ds:[esi+1110]
, Z1 u2 ?7 A; j$ z3 K& x7 o00403CE6  |. |1BC9             |sbb ecx,ecx4 m! J; ^$ Y6 f, x/ x9 V( p
00403CE8  |. |23D1             |and edx,ecx
: X1 V% C5 S5 ?8 Q' S5 Y8 U00403CEA  |. |8B8E 0C110000    |mov ecx,dword ptr ds:[esi+110C]
8 |4 N8 a8 U. l& h% v. y# Y00403CF0  |. |8A0C0A           |mov cl,byte ptr ds:[edx+ecx]
  z0 Z; g& X# U& i) P2 t00403CF3  |. |3008             |xor byte ptr ds:[eax],cl                   ;  这个循环就是异或算法
/ I' P; N+ b; Z" d! Q" y6 i  T00403CF5  |. |83C2 01          |add edx,14 [# p4 ^3 }+ |1 {
00403CF8  |. |83C0 01          |add eax,1
# o. r' [8 g: }. _+ V9 ]00403CFB  |. |83EF 01          |sub edi,1
# {$ ]# A+ G' {# [00403CFE  |.^\75 E0            \jnz short SL2.00403CE01 T' o! r8 Q# d) Q9 Y' ?, q

4 E- D2 {# n  [% T' h! ~" c; p7 v4 U! p- _2 t* U
00401A42  |.  8D4C24 18        lea ecx,dword ptr ss:[esp+18]
/ B" [( {5 q, c6 V1 _+ I6 F00401A46  |.  51               push ecx
: A( O" E/ V5 o, T" T. i00401A47  |.  8D4C24 24        lea ecx,dword ptr ss:[esp+24]" p$ v2 ]# p1 \
00401A4B  |.  C68424 58110000 >mov byte ptr ss:[esp+1158],13 u1 M0 |) ?1 u- B, B6 s
00401A53  |.  C687 08010000 00 mov byte ptr ds:[edi+108],0: F+ ]9 o$ W. p/ Q
00401A5A  |.  E8 51240000      call SL2.00403EB0                           ;  读取字体函数的开始四个字节: b+ l# X0 A" ^8 f' O9 n2 f% d
00401A5F  |.  817C24 18 474D47>cmp dword ptr ss:[esp+18],42474D47          ;  此处可判断出开始的四个字节应该是魔幻数/ y( f) W) ?0 d- R
+0 魔幻数& f% r) }2 `  W0 Z# i# s1 f& \
+4 段数,
) l' k+ c. I2 i$ H: t& J# q下面开始是每段的头部9 j' ?- D) D7 e9 N* l! N
+46EE 正文5 c" |7 m+ Z% v1 T

& R! ~, V& k: Y$ @( N% e5 _0203DDE0  2F 45 58 54 44 41 54 41 53 46 4F 4E 54 2F 41 52  /EXTDATASFONT/AR
; s8 O# |3 F: M" A, U0203DDF0  49 41 4C 20 31 31 2E 45 4E 00                    IAL 11.EN.' e1 \  }6 m0 b$ g
' C3 o: W* v; O% F
0203DEE0              75 16 00 00 (EE 46) 00 00 2F 45 58 54      ..頕../EXT
& X2 _6 d  y. z3 Q" D0203DEF0  44 41 54 41 53 46 4F 4E 54 2F 41 52 49 41 4C 20  DATASFONT/ARIAL7 w* w1 m! L6 i8 p' t
0203DF00  31 32 2E 45 4E 00                                12.EN.! @+ c; j1 m: D* ^" _) Z. Y; u' |6 N

+ `, i8 L/ K- h7 i$ C7 M上面表中的数据除了括号中的(EE 46),其余全部与解包后文件数据一致,8 _# }# F* U( Q! E
1675是这个段的长度,46EE是这个在文件中的偏移,每段偏移值的算法如下:+ |6 l" U' ]3 @/ p2 o/ y* [
! Y8 [  F' H" X7 h/ l
00401AE0  |> /899401 08010000  /mov dword ptr ds:[ecx+eax+108],edx         ;  edx=46ee, v) z% M! x, f. N/ I( T
00401AE7  |. |8B06             |mov eax,dword ptr ds:[esi]                 ;  [esi]存放读取字符的地址1 q$ t" v4 V. ?  j0 ?$ u
00401AE9  |. |039401 04010000  |add edx,dword ptr ds:[ecx+eax+104]
  o6 i/ }& Q- X00401AF0  |. |83C3 01          |add ebx,1' ]7 a' n, }1 Q9 G+ d
00401AF3  |. |81C1 0C010000    |add ecx,10C
1 I) c* l2 M- g. o00401AF9  |. |3B5C24 14        |cmp ebx,dword ptr ss:[esp+14]              ;  [esp+14]=1C2
. B8 j5 G/ [1 `/ t! A2 m4 @00401AFD  |.^\72 E1            \jb short SL2.00401AE0
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

沙发
发表于 2010-3-28 11:32 | 只看该作者
首先对楼主的大力支持表示非常感谢!' q& t& V" t% e7 ~$ s/ P
想问一下,通过以上分析,能得出什么阶段性的结论吗?
回复 支持 反对

使用道具 举报

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

使用道具 举报

地板
 楼主| 发表于 2010-3-28 12:06 | 只看该作者
Sl2fnt.dat文件格式分析如下:
& l: k5 N* O* D0 X, V, g+0 474D4742  这个魔幻数
% m5 e; `4 ~& ^. Q1 k
+ s- ?) c3 l* h, `+4 C2010000  表示有01C2个文件
( {7 a: o9 h5 n# B8 m# x- D$ `) H8 P1 ^( U% u; h3 Y
+8 2F4558544441544153464F4E542F415249414C2031312E454E00
' ?6 }5 l# M7 u7 R- M. a/EXTDATASFONT/ARIAL 11.EN.u
" c1 \' o+ q. Y4 K+ o这个应该是文件头部,ARIAL表示字体,EN表示英语 11表示字号
" S- k: L5 v) K' h+ i* D! v4 v! L3 @
   751600 表示这个文件的大小
( l0 l- x6 ?! g% u" V$ E" C/ O2 Q
每个文件的偏移由上文中的最后那个函数得出& b$ Q1 d: Q: L! \( f

( T# a0 F6 q& ?) p9 z3 @6 h$ z
) t" Z! |: F$ x& j3 D/ ~% I1 ^7 X+46EE 此处开始是每个文件的正文
& f; R; E% Q, [+ b4 X0 f8 J4 R/ S" }* y, y( P* {" n/ x' s3 G
如上面我举的这个例子,文件正文内容起始地址+46EE,
# X! C! T- _6 t. X8 b( }6 Q9 s结束地址为+(46EE+1675)
回复 支持 反对

使用道具 举报

5#
发表于 2010-3-28 12:11 | 只看该作者
这个其实不用分析,这个dat是个包文件,已经有解包器了啊。5 i6 B+ A/ F! X9 z: o4 _, M* s  b6 K
需要分析的是里面解出来的字体文件。字体文件的magic number是XCPK.- g# }9 Z+ m  {- a) P

: |+ W: T9 R* i$ @# m+ t& l0 j我想知道XCPK文件的结构。
回复 支持 反对

使用道具 举报

6#
发表于 2010-3-28 12:16 | 只看该作者
http://aluigi.altervista.org/papers.htm
4 c) m- H. U0 e1 D" V5 V
7 Y' s8 {/ I5 }7 G. s这里有stilllife2 dat文件解包器,配合quickbms使用
回复 支持 反对

使用道具 举报

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

回 楼主(jinxin8866) 的帖子

写屏函数:
2 x, I5 p. X) q1 r" R/ A02A0EA4C  |> /8B00        |/mov eax,dword ptr ds:[eax]
" T9 l9 I( J+ e; q2 k# n02A0EA4E  |. |0FB70450    ||movzx eax,word ptr ds:[eax+edx*2]                    ;  [eax+edx*2]存放字符的UNICODE码
. K( D. m& n. ?02A0EA52  |. |8B7C24 14   ||mov edi,dword ptr ss:[esp+14]- i  Z( e* O( N4 ?. V. {! w9 f* v
02A0EA56  |. |8B7F 2C     ||mov edi,dword ptr ds:[edi+2C]
, |5 h$ l. c" t' g02A0EA59  |. |8D04C0      ||lea eax,dword ptr ds:[eax+eax*8]5 F7 I9 f1 Q: X, L4 v
02A0EA5C  |. |8D0487      ||lea eax,dword ptr ds:[edi+eax*4]                     ;  eax存放字符编码表5 m2 M; L- H9 [* d0 V
每个字符码表占24(16进制)个字节
8 x) E, S+ A" I" k8 `; H8 F6 z02A0EA5F  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]
" W; |% E0 Z( B1 e. g02A0EA63  |. |8D7C39 14   ||lea edi,dword ptr ds:[ecx+edi+14]                    ;  edi就是显存地址
/ W% D0 G$ p3 @+ W* s1 S02A0EA67  |. |D940 04     ||fld dword ptr ds:[eax+4]
/ O2 s8 J& O2 w6 T7 ?02A0EA6A  |. |83C2 01     ||add edx,1                                              字符个数加一
# S: ^; C- R" |6 V02A0EA6D  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]
; D% b$ |- S* k: S" W3 N/ V02A0EA71  |. |D900        ||fld dword ptr ds:[eax]
  [4 s( q7 [, s# c- H- ?' @& Z02A0EA73  |. |D91F        ||fstp dword ptr ds:[edi]                              ;  edi就是显存地址
% p3 {7 P$ W3 K, o; O' @# h每个字符占1C个字节,最后的四个字节都是一样的,可以认为是结束标志9 ^) i1 r0 W9 u% c7 T$ W/ F! s, b
02A0EA75  |. |D94424 30   ||fld dword ptr ss:[esp+30]
/ H; ]: z+ K' B6 F+ x; e02A0EA79  |. |D95F 04     ||fstp dword ptr ds:[edi+4]
& i% M2 Q' N3 A( T# l/ J- m02A0EA7C  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]# x9 O! O1 V2 _) m) W1 |5 a! M
02A0EA80  |. |D940 04     ||fld dword ptr ds:[eax+4]
0 S1 Y! S3 v6 `& Y02A0EA83  |. |8D7C39 30   ||lea edi,dword ptr ds:[ecx+edi+30]
8 Y& i) i7 v9 j02A0EA87  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]
- K+ h  ]7 L. y4 `$ x& C6 L1 S/ z5 N02A0EA8B  |. |D940 08     ||fld dword ptr ds:[eax+8]
2 x2 v1 [9 H* h3 O2 z02A0EA8E  |. |D91F        ||fstp dword ptr ds:[edi]2 S' n  }3 u0 p' t1 b' y' z
02A0EA90  |. |D94424 30   ||fld dword ptr ss:[esp+30]
0 D( i! E7 E* w" H% u& Q02A0EA94  |. |D95F 04     ||fstp dword ptr ds:[edi+4]1 |) w* i: C" \: A# }
02A0EA97  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]
8 q! Y) h* v. j) w5 J02A0EA9B  |. |D940 0C     ||fld dword ptr ds:[eax+C]
4 r1 s9 B6 r" K4 S( ~02A0EA9E  |. |8D7C39 4C   ||lea edi,dword ptr ds:[ecx+edi+4C]4 w" h# u- y2 m6 v
02A0EAA2  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]: S0 ~" B3 g2 {( O
02A0EAA6  |. |D900        ||fld dword ptr ds:[eax]
! S/ S; \& g8 t2 N9 J" t) H) l8 ]- ^02A0EAA8  |. |D91F        ||fstp dword ptr ds:[edi]
6 ^/ Z2 I6 P2 [$ G; a1 u02A0EAAA  |. |D94424 30   ||fld dword ptr ss:[esp+30]. F2 x" V7 R8 t# [( q
02A0EAAE  |. |D95F 04     ||fstp dword ptr ds:[edi+4]
1 S7 P* X$ u) e" c! A. x02A0EAB1  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]% u$ W( Y' O/ _- L
02A0EAB5  |. |D940 0C     ||fld dword ptr ds:[eax+C]. t6 b2 v$ o' W5 n6 p3 Q
02A0EAB8  |. |8D7C39 68   ||lea edi,dword ptr ds:[ecx+edi+68]# d. o. Y* B% b6 p
02A0EABC  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]
7 n* C+ V' P8 n( L3 v  ~& S02A0EAC0  |. |83C1 70     ||add ecx,70
: c! Y8 D% R9 i3 a: |  q% O) O9 L' z02A0EAC3  |. |D940 08     ||fld dword ptr ds:[eax+8]
+ j2 }' }5 v( H9 F' a) P02A0EAC6  |. |D91F        ||fstp dword ptr ds:[edi]
5 o2 t' k1 H7 A! B5 A' D. N) b7 F4 I7 x02A0EAC8  |. |D94424 30   ||fld dword ptr ss:[esp+30]. i+ ~2 L; D/ `0 x
02A0EACC  |. |D95F 04     ||fstp dword ptr ds:[edi+4]1 @( ~2 h2 d1 w+ F0 Z
02A0EACF  |. |8B46 58     ||mov eax,dword ptr ds:[esi+58]
7 Z* H- H: R0 T4 w- ]02A0EAD2  |. |03C3        ||add eax,ebx& c* y& Z2 _: N4 Q$ W" g
02A0EAD4  |. |3B50 08     ||cmp edx,dword ptr ds:[eax+8]/ v2 n: s9 \" p; D7 w5 M- Z
02A0EAD7  |.^\\0F8C 6FFFFF>|\\jl xcDxShad.02A0EA4C
3 X; P0 t1 t8 M" X# E
( N  j# V. |5 W8 b! X1 s本游戏字符编码采用UNICODE," U4 c8 C1 `$ H$ d$ p- t1 E
对字符码表的操作:
; A2 W4 e# B3 O9 L10028807  |> /0FB702      /movzx eax,word ptr ds:[edx]        读字符的UNICODE码
2 Z* \+ M9 j, k; g& ?" J# O1002880A  |. |8D04C0      |lea eax,dword ptr ds:[eax+eax*8]: m( U1 y% f$ t, P- C6 ^7 f
1002880D  |. |8D0483      |lea eax,dword ptr ds:[ebx+eax*4]   根据UNICODE码求得字符码表的地址
( w8 @! l7 y* L10028810  |. |33C9        |xor ecx,ecx# m" G. g5 I% d, A- ^/ O5 i
10028812  |. |DB40 20     |fild dword ptr ds:[eax+20]
! m3 ^8 U. {0 H) o2 ?10028815  |. |D95C24 14   |fstp dword ptr ss:[esp+14]
" t6 i/ W  W& k8 o" s* o7 Q) n; z10028819  |. |D94424 14   |fld dword ptr ss:[esp+14]7 ~8 ]- `% x1 j' Z. Z) z+ o
1002881D  |. |D9C0        |fld st  Z" ~! u  {5 m$ U5 a/ q9 w# i
1002881F  |. |D84E 14     |fmul dword ptr ds:[esi+14]
. S* X5 t1 `0 X, y3 S' {' r10028822  |. |D94424 0C   |fld dword ptr ss:[esp+C]$ A" Z1 q8 ?% Q2 K0 O
10028826  |. |D9C0        |fld st" z) L. s& g5 B' d; e/ ^% o! I
10028828  |. |DEC2        |faddp st(2),st( [5 p  j' {6 `  E
1002882A  |. |D9C9        |fxch st(1)" x9 `) E* G. b
1002882C  |. |D95C24 14   |fstp dword ptr ss:[esp+14]  ?. t% z5 K# f" m* O1 ]9 n
10028830  |. |D8D3        |fcom st(3)
+ n* t* b* y9 [10028832  |. |DFE0        |fstsw ax
& o, ]' q% z# x: Q( |; V10028834  |. |F6C4 01     |test ah,1: A6 ~. I9 \. h1 o
10028837  |. |74 2B       |je short xcEngine.10028864
3 G% o. r3 C8 I' M10028839  |. |D94424 14   |fld dword ptr ss:[esp+14]
3 y+ Y5 e: @$ C+ ^( g4 v1 K1002883D  |. |D8D3        |fcom st(3)
; ]( g0 s: B4 O' R- g' n1002883F  |. |DFE0        |fstsw ax( Z: P! m& q, ^8 j+ L
10028841  |. |F6C4 41     |test ah,41. J# k# H% J- U. i7 y
10028844  |. |7A 04       |jpe short xcEngine.1002884A- }: ~8 |9 w( D' q$ }) S
10028846  |. |DDD8        |fstp st, L0 F4 Q" l/ ?/ I: J. U0 s
10028848  |. |EB 1A       |jmp short xcEngine.10028864
4 @5 I& l+ b7 |: o# \1002884A  |> |D9C9        |fxch st(1)& D8 N5 k: X9 F. Z9 J/ ~6 [1 @
1002884C  |. |D8D3        |fcom st(3)3 a, f6 }3 v4 v, ^% e+ q2 c5 p: j
1002884E  |. |DFE0        |fstsw ax5 P2 I3 q' n) `( j. J8 W
10028850  |. |F6C4 05     |test ah,58 f% R5 E, f7 M- e
10028853  |. |7A 04       |jpe short xcEngine.100288594 |+ g& W2 {$ E+ z- @9 j
10028855  |. |DDD9        |fstp st(1)
, o1 a$ d/ b! S10028857  |. |EB 0B       |jmp short xcEngine.10028864& M( M6 m# C8 W: i  Q- J& g( K
10028859  |> |D9C9        |fxch st(1)* B) q, F& P: i
1002885B  |. |D8DC        |fcomp st(4)" ~2 T% @: k- F9 L+ |$ B# v9 m
1002885D  |. |DFE0        |fstsw ax/ T, F1 B9 Y5 m. a) ^/ |
1002885F  |. |F6C4 41     |test ah,418 e+ X9 F* Y  ^, {9 y  s. p
10028862  |. |75 05       |jnz short xcEngine.10028869
' n: E( N$ D/ T3 Q  T; {  O10028864  |> |B9 01000000 |mov ecx,1& Q: ^1 n+ g8 v) \
10028869  |> |85C9        |test ecx,ecx
/ t) w  ^9 Z+ P, G; J1002886B  |. |8B4424 18   |mov eax,dword ptr ss:[esp+18]
9 c9 T) q7 G; r8 k2 v9 R1002886F  |. |D940 14     |fld dword ptr ds:[eax+14]: d4 S- J- N: ?$ g+ z0 U. O7 f
10028872  |. |DECA        |fmulp st(2),st% _$ ~! c0 g. l
10028874  |. |DEC1        |faddp st(1),st+ A6 o5 [, a, m- {& Y
10028876  |. |D95C24 0C   |fstp dword ptr ss:[esp+C]
1 O, i3 N0 u4 H* ^3 X1002887A  |. |75 05       |jnz short xcEngine.10028881" v4 h; V/ v3 `4 ]( A0 R1 }0 B) X
1002887C  |. |834424 10 0>|add dword ptr ss:[esp+10],1
+ K2 h* Y: s/ U8 d+ Z8 H7 s) C10028881  |> |83C2 02     |add edx,2
* j+ u* D3 a" a3 b" L  B( ]) V; l10028884  |. |83EF 01     |sub edi,1
+ F, C3 Q: W/ f5 @6 P+ a# W. P4 K+ x2 f( }10028887  |.^\\0F85 7AFFFF>\\jnz xcEngine.10028807& J1 ?, L% {& S$ }3 b2 ?4 H, l
由于算法采用了浮点数指令,本人不太懂,边学习边研究中。。。。。。。。。
回复 支持 反对

使用道具 举报

8#
发表于 2010-4-1 11:13 | 只看该作者
加油!UNICODE码内核的游戏?
8 \( ?2 K9 p" x, i看来汉化有希望啊。
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

回 8楼(shane007) 的帖子

找到了内存中字库的地址,可在下面这个位置下断,, V1 {: }% z0 [

3 Y3 p2 {: p. @$ o2 E/ `02A0EA5C  |. |8D0487      ||lea eax,dword ptr ds:[edi+eax*4]                     ;  eax存放的就是字库的地址: w- X. i' b# t8 m
这个字库不是点阵的,经过修改,字符的形状可发生变化,应该是矢量字库
回复 支持 反对

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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