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

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

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

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

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

关于静物2的分析

00403CE0  |> /3B96 10110000    /cmp edx,dword ptr ds:[esi+1110]
4 `  n: Y: C) E2 l: m/ j1 u" o) U# ]00403CE6  |. |1BC9             |sbb ecx,ecx
, W+ r6 O& `( v: X& E7 [00403CE8  |. |23D1             |and edx,ecx
, l) |5 |. k1 F* E- u. w00403CEA  |. |8B8E 0C110000    |mov ecx,dword ptr ds:[esi+110C]" v; Z, [  Y2 x6 {: a9 _( {
00403CF0  |. |8A0C0A           |mov cl,byte ptr ds:[edx+ecx]  @7 b6 ^2 E; e, n2 b/ Z
00403CF3  |. |3008             |xor byte ptr ds:[eax],cl                   ;  这个循环就是异或算法
/ c0 C- Y4 {( d" K3 |3 ^00403CF5  |. |83C2 01          |add edx,1
. T3 {; h5 h* y! u00403CF8  |. |83C0 01          |add eax,1
, I1 r% Q) g, X. r' m00403CFB  |. |83EF 01          |sub edi,1
. c7 v+ J, x7 y/ {00403CFE  |.^\75 E0            \jnz short SL2.00403CE0
- `4 t% Q  l2 X' X" I
, E: {( x: e/ f& G) ]
& B; b: P2 L5 b0 \, \00401A42  |.  8D4C24 18        lea ecx,dword ptr ss:[esp+18]
9 s# H1 t9 H8 ?2 y00401A46  |.  51               push ecx2 I- p: Y2 W- s
00401A47  |.  8D4C24 24        lea ecx,dword ptr ss:[esp+24]  y6 q1 k8 }/ R0 c2 [# ?, C
00401A4B  |.  C68424 58110000 >mov byte ptr ss:[esp+1158],1- Z6 v3 y, P) T# w
00401A53  |.  C687 08010000 00 mov byte ptr ds:[edi+108],0
! |2 X/ B+ \% O5 ^* @00401A5A  |.  E8 51240000      call SL2.00403EB0                           ;  读取字体函数的开始四个字节9 X6 J$ }8 c/ }$ J
00401A5F  |.  817C24 18 474D47>cmp dword ptr ss:[esp+18],42474D47          ;  此处可判断出开始的四个字节应该是魔幻数8 n3 a3 R+ k1 R0 t* F
+0 魔幻数9 a) p) m8 s6 a
+4 段数,
0 x, N! b+ o$ y, }下面开始是每段的头部
) c. p% B: I9 ?( ]+ P+46EE 正文! n2 e( W. P+ D

6 Q, g3 U$ z) p0203DDE0  2F 45 58 54 44 41 54 41 53 46 4F 4E 54 2F 41 52  /EXTDATASFONT/AR
4 x1 [( \" t# E. h: {2 I0203DDF0  49 41 4C 20 31 31 2E 45 4E 00                    IAL 11.EN.
6 B! P8 @# l( t+ L2 H) b, N1 \8 W: D$ i' o$ Y* L/ w
0203DEE0              75 16 00 00 (EE 46) 00 00 2F 45 58 54      ..頕../EXT
( h& h8 `# z$ E+ A$ S. s* X0203DEF0  44 41 54 41 53 46 4F 4E 54 2F 41 52 49 41 4C 20  DATASFONT/ARIAL$ [* x; H# O5 ~0 g( ~
0203DF00  31 32 2E 45 4E 00                                12.EN.
" a" s1 \$ z) t! T- d" D8 F# a6 r5 ?( P) e- f( [
上面表中的数据除了括号中的(EE 46),其余全部与解包后文件数据一致,
: l6 ?- v- P6 n) t, s6 a: ~1675是这个段的长度,46EE是这个在文件中的偏移,每段偏移值的算法如下:) y; ?; U4 p, N9 x( L

% O0 u4 G* n% _, s00401AE0  |> /899401 08010000  /mov dword ptr ds:[ecx+eax+108],edx         ;  edx=46ee
- O6 g- z- x$ i6 t) z  `0 w00401AE7  |. |8B06             |mov eax,dword ptr ds:[esi]                 ;  [esi]存放读取字符的地址' A! p/ X2 \- S
00401AE9  |. |039401 04010000  |add edx,dword ptr ds:[ecx+eax+104]
3 N- j5 A, j. k: m9 D/ j; d00401AF0  |. |83C3 01          |add ebx,1- [8 Q5 o7 N4 x3 a* }: |; k
00401AF3  |. |81C1 0C010000    |add ecx,10C
! c" Y+ _7 l- X+ A9 {00401AF9  |. |3B5C24 14        |cmp ebx,dword ptr ss:[esp+14]              ;  [esp+14]=1C2# T7 E0 E1 z4 S3 a1 c7 @8 q! h
00401AFD  |.^\72 E1            \jb short SL2.00401AE0
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

沙发
发表于 2010-3-28 11:32 | 只看该作者
首先对楼主的大力支持表示非常感谢!
# z* ^3 L$ _* G0 h: l0 ?* I想问一下,通过以上分析,能得出什么阶段性的结论吗?
回复 支持 反对

使用道具 举报

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

使用道具 举报

地板
 楼主| 发表于 2010-3-28 12:06 | 只看该作者
Sl2fnt.dat文件格式分析如下:
2 B. b( p, @' ~) T: e0 Z# R+0 474D4742  这个魔幻数2 v# i' B. @9 T* W' i$ j
! j# \+ V1 N, V* r) `5 Y
+4 C2010000  表示有01C2个文件% e; i2 h0 |9 u8 O% [
) Y3 G+ X6 D7 Y  u4 Y
+8 2F4558544441544153464F4E542F415249414C2031312E454E000 ?! m! `3 \" p6 k6 j# F
/EXTDATASFONT/ARIAL 11.EN.u
1 ~/ I" U- P+ {这个应该是文件头部,ARIAL表示字体,EN表示英语 11表示字号
4 W$ C$ e& v% w) a0 {, ^6 p+ C5 x" Z
3 d; _4 l( M! x3 N   751600 表示这个文件的大小
+ m( @* _4 M0 m& y8 d! Z9 y% \. W. h2 o! b
每个文件的偏移由上文中的最后那个函数得出/ e7 j- ]1 t+ R
. s; l# W7 ~) U) \0 W

) T1 g: q2 |2 g2 j5 I4 o! @4 W+46EE 此处开始是每个文件的正文$ ?2 Q& _3 T3 O% D$ K! t/ @
8 w/ N1 c, z1 f; P  K
如上面我举的这个例子,文件正文内容起始地址+46EE,
6 p/ m# s. A8 Y1 V6 r; L- x结束地址为+(46EE+1675)
回复 支持 反对

使用道具 举报

5#
发表于 2010-3-28 12:11 | 只看该作者
这个其实不用分析,这个dat是个包文件,已经有解包器了啊。
. L( {1 l7 T/ S) ^! D需要分析的是里面解出来的字体文件。字体文件的magic number是XCPK.
; M) Q' t" ^/ n- m; r( F* u0 B
4 v# `2 O$ C4 j+ }" C8 q4 _我想知道XCPK文件的结构。
回复 支持 反对

使用道具 举报

6#
发表于 2010-3-28 12:16 | 只看该作者
http://aluigi.altervista.org/papers.htm
, I! N( ]+ J: h5 Y) Y7 H: p' K
) b  o# w9 m5 h* z7 E- c这里有stilllife2 dat文件解包器,配合quickbms使用
回复 支持 反对

使用道具 举报

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

回 楼主(jinxin8866) 的帖子

写屏函数:" O6 h1 O5 z* B* I/ c
02A0EA4C  |> /8B00        |/mov eax,dword ptr ds:[eax]
+ I: G1 N" @! f( z4 m02A0EA4E  |. |0FB70450    ||movzx eax,word ptr ds:[eax+edx*2]                    ;  [eax+edx*2]存放字符的UNICODE码
+ m/ F! U$ u+ F" \! t. n. d02A0EA52  |. |8B7C24 14   ||mov edi,dword ptr ss:[esp+14]
5 R: r- Z- ~+ s02A0EA56  |. |8B7F 2C     ||mov edi,dword ptr ds:[edi+2C]4 q, e0 v- @) T: A8 J5 M+ k
02A0EA59  |. |8D04C0      ||lea eax,dword ptr ds:[eax+eax*8]
+ L. b' j2 ]9 t02A0EA5C  |. |8D0487      ||lea eax,dword ptr ds:[edi+eax*4]                     ;  eax存放字符编码表% f9 q8 B) }- Q* i: |! _
每个字符码表占24(16进制)个字节
* F( Y2 L3 c8 j7 o3 ^02A0EA5F  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]3 ^4 {5 \2 r4 q/ S+ x  e
02A0EA63  |. |8D7C39 14   ||lea edi,dword ptr ds:[ecx+edi+14]                    ;  edi就是显存地址
* o5 S) N6 G+ E# I5 J2 R6 p# y+ ]02A0EA67  |. |D940 04     ||fld dword ptr ds:[eax+4]
5 `9 @! \& p8 Y02A0EA6A  |. |83C2 01     ||add edx,1                                              字符个数加一
* j( H- m- ?" _9 ^- y02A0EA6D  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]
. U' r4 {! @, q/ o8 X% {02A0EA71  |. |D900        ||fld dword ptr ds:[eax]- Y/ c3 N7 p1 H4 u' Y) P. c" X
02A0EA73  |. |D91F        ||fstp dword ptr ds:[edi]                              ;  edi就是显存地址
! c. T* t4 u7 r# ]" {每个字符占1C个字节,最后的四个字节都是一样的,可以认为是结束标志
$ H* q9 [$ G* R' r* `02A0EA75  |. |D94424 30   ||fld dword ptr ss:[esp+30]
% W8 y. p+ x" F/ z5 w02A0EA79  |. |D95F 04     ||fstp dword ptr ds:[edi+4]
& `  C- y7 S8 c6 e9 Q5 L02A0EA7C  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]3 X0 @3 Q: i; ~' z& k
02A0EA80  |. |D940 04     ||fld dword ptr ds:[eax+4]
6 b( S# [/ z& K  U6 @02A0EA83  |. |8D7C39 30   ||lea edi,dword ptr ds:[ecx+edi+30]# w+ Q" L7 w2 A; G5 ~
02A0EA87  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]
" G' Q3 x  F/ ~( F$ g7 P02A0EA8B  |. |D940 08     ||fld dword ptr ds:[eax+8]
7 Y7 y% k5 A1 z/ H02A0EA8E  |. |D91F        ||fstp dword ptr ds:[edi]
( k+ m* i' C$ r( U* I02A0EA90  |. |D94424 30   ||fld dword ptr ss:[esp+30]# [! w& ^( @. ^' c: h1 A
02A0EA94  |. |D95F 04     ||fstp dword ptr ds:[edi+4]
9 V( v. O) Z  ?  H+ ~) O02A0EA97  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]. E; A2 S- h) a
02A0EA9B  |. |D940 0C     ||fld dword ptr ds:[eax+C]$ V! ~! L0 g  Z% ~
02A0EA9E  |. |8D7C39 4C   ||lea edi,dword ptr ds:[ecx+edi+4C]- S0 q* e2 P% ~
02A0EAA2  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]4 P( b3 k  m7 t; y
02A0EAA6  |. |D900        ||fld dword ptr ds:[eax]0 {: \7 A! v& l7 B
02A0EAA8  |. |D91F        ||fstp dword ptr ds:[edi]6 {8 F! _* n1 v9 a9 y
02A0EAAA  |. |D94424 30   ||fld dword ptr ss:[esp+30]
& A& S% r. d) N2 Y& ]02A0EAAE  |. |D95F 04     ||fstp dword ptr ds:[edi+4]8 Y9 ]  y: Q) A6 `6 E, e
02A0EAB1  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]
8 M# A  p- I$ N8 a6 S& o02A0EAB5  |. |D940 0C     ||fld dword ptr ds:[eax+C]' l3 {  E7 `& B& R0 k" T* P2 B
02A0EAB8  |. |8D7C39 68   ||lea edi,dword ptr ds:[ecx+edi+68]
4 K* w: M! Y4 @: |& a. U* H02A0EABC  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]
5 Y" h4 ?: H2 n3 w0 p$ P/ i02A0EAC0  |. |83C1 70     ||add ecx,70
) x7 A, O0 ~, `. |. \. E02A0EAC3  |. |D940 08     ||fld dword ptr ds:[eax+8]
! F- ]' P3 h( W02A0EAC6  |. |D91F        ||fstp dword ptr ds:[edi]+ {8 n9 t( u6 H) E6 Z5 t/ @
02A0EAC8  |. |D94424 30   ||fld dword ptr ss:[esp+30]0 q. o% v" U- d% [! N, A
02A0EACC  |. |D95F 04     ||fstp dword ptr ds:[edi+4]
0 A: r+ S" c0 l3 R1 s( `3 v3 M02A0EACF  |. |8B46 58     ||mov eax,dword ptr ds:[esi+58]/ Y$ o4 p9 E. \, i* [2 v- ?
02A0EAD2  |. |03C3        ||add eax,ebx
2 t, _; k! K% M2 V02A0EAD4  |. |3B50 08     ||cmp edx,dword ptr ds:[eax+8]
$ Q) L. l) B  o, }02A0EAD7  |.^\\0F8C 6FFFFF>|\\jl xcDxShad.02A0EA4C
: M0 m* `; l  p3 e/ y1 j+ [6 a6 y. K- `# @" w
本游戏字符编码采用UNICODE,
' n6 D( Q' U! W, O. D对字符码表的操作:- O1 H4 }- z: P% g) T1 j
10028807  |> /0FB702      /movzx eax,word ptr ds:[edx]        读字符的UNICODE码: j- I" \5 j. E0 n- K  r
1002880A  |. |8D04C0      |lea eax,dword ptr ds:[eax+eax*8]+ `1 I- Z% t& g
1002880D  |. |8D0483      |lea eax,dword ptr ds:[ebx+eax*4]   根据UNICODE码求得字符码表的地址
2 e- f$ Z& b# r9 i  [2 I10028810  |. |33C9        |xor ecx,ecx# j$ Q$ A) n/ _# r% d. T; g; h
10028812  |. |DB40 20     |fild dword ptr ds:[eax+20]( i7 {) n9 M# r
10028815  |. |D95C24 14   |fstp dword ptr ss:[esp+14]2 j; v+ ~1 F2 z( ?
10028819  |. |D94424 14   |fld dword ptr ss:[esp+14]. A5 p; y; H2 V& B
1002881D  |. |D9C0        |fld st
6 L: z5 x7 C3 V  w& W- ]! A# Z1002881F  |. |D84E 14     |fmul dword ptr ds:[esi+14]4 L  k# Y4 u3 }3 C
10028822  |. |D94424 0C   |fld dword ptr ss:[esp+C]
" n) k# R4 V: f" m9 {10028826  |. |D9C0        |fld st
, K, V$ {3 n; r3 {" s- ]8 T10028828  |. |DEC2        |faddp st(2),st. }4 [' B( o1 P/ s: d
1002882A  |. |D9C9        |fxch st(1)
& g. ]4 c" f6 X' p1002882C  |. |D95C24 14   |fstp dword ptr ss:[esp+14]* }. j, ?8 q* o) q
10028830  |. |D8D3        |fcom st(3)
) }5 V  a( a' P10028832  |. |DFE0        |fstsw ax
0 q5 _* _* A5 I/ F: M10028834  |. |F6C4 01     |test ah,15 ~! H& h5 I2 L- G5 Q, I
10028837  |. |74 2B       |je short xcEngine.10028864
+ j" X/ X! N! P, Y$ X10028839  |. |D94424 14   |fld dword ptr ss:[esp+14]1 k3 S7 b7 e# P8 j7 H+ _) v. ]
1002883D  |. |D8D3        |fcom st(3)
7 h* W2 E% F5 E2 V1002883F  |. |DFE0        |fstsw ax! p1 V% Q, H3 W' i
10028841  |. |F6C4 41     |test ah,41+ D0 t) x( Y) {& h% o7 i
10028844  |. |7A 04       |jpe short xcEngine.1002884A, r) Q! E1 W; l& q. G
10028846  |. |DDD8        |fstp st
( t4 A2 G6 y" @5 t8 I3 O! Q  t10028848  |. |EB 1A       |jmp short xcEngine.10028864
) O& X, h4 g- ]! y& F0 T1002884A  |> |D9C9        |fxch st(1)# c1 h$ P! _0 u( f  u: x& I
1002884C  |. |D8D3        |fcom st(3)
: r; F  B1 ?# N$ K1002884E  |. |DFE0        |fstsw ax
% T, L* s; l: t5 s1 L, k9 X5 R10028850  |. |F6C4 05     |test ah,5
  E2 `" |& U: g* o9 b% M9 }$ g10028853  |. |7A 04       |jpe short xcEngine.10028859
9 a8 {7 ~4 J7 }3 U% i10028855  |. |DDD9        |fstp st(1)0 m3 w2 d$ U3 h' A4 R  q5 M1 B
10028857  |. |EB 0B       |jmp short xcEngine.10028864
. i7 Y# e7 N% ^) k4 N# P10028859  |> |D9C9        |fxch st(1)
! T  l) A, j/ j# ^- H5 y/ C1002885B  |. |D8DC        |fcomp st(4)
$ B$ h$ {" h6 x0 C; J9 g1002885D  |. |DFE0        |fstsw ax
) q7 |6 Z% S: {( M, K1002885F  |. |F6C4 41     |test ah,41
7 j: n! L) q0 M$ m  j10028862  |. |75 05       |jnz short xcEngine.10028869
. \& l) }4 i* n; f, D10028864  |> |B9 01000000 |mov ecx,1
2 t4 X$ z5 Z) {/ [$ t6 s10028869  |> |85C9        |test ecx,ecx" K9 {& ~6 H7 ?9 r; |
1002886B  |. |8B4424 18   |mov eax,dword ptr ss:[esp+18]+ F) P) I: Z( G6 x3 i* g
1002886F  |. |D940 14     |fld dword ptr ds:[eax+14]+ }& J4 }: [3 }. W* k/ C# T
10028872  |. |DECA        |fmulp st(2),st
4 y9 G) i) N- e! {! n) q) @10028874  |. |DEC1        |faddp st(1),st
5 Z' q" j8 r5 R- g7 o: {10028876  |. |D95C24 0C   |fstp dword ptr ss:[esp+C]3 L8 q: C/ j# C3 q9 |
1002887A  |. |75 05       |jnz short xcEngine.100288810 H; m8 @/ M/ h7 m- B
1002887C  |. |834424 10 0>|add dword ptr ss:[esp+10],1
. V! T; j5 e+ ^# \/ Y0 F+ y10028881  |> |83C2 02     |add edx,2
6 G0 m9 M  M; w4 u1 f8 k  {. V: u$ a7 A10028884  |. |83EF 01     |sub edi,1
& F$ t7 q7 u, ~$ T+ m2 Q10028887  |.^\\0F85 7AFFFF>\\jnz xcEngine.10028807
, `5 j6 y* E1 W+ M4 K由于算法采用了浮点数指令,本人不太懂,边学习边研究中。。。。。。。。。
回复 支持 反对

使用道具 举报

8#
发表于 2010-4-1 11:13 | 只看该作者
加油!UNICODE码内核的游戏?
# x- S7 x+ L% v' l. C& a- v* M看来汉化有希望啊。
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

回 8楼(shane007) 的帖子

找到了内存中字库的地址,可在下面这个位置下断,
! Q: q$ z6 Q, d( \0 Q" z+ X* ^9 c7 D6 D% q
02A0EA5C  |. |8D0487      ||lea eax,dword ptr ds:[edi+eax*4]                     ;  eax存放的就是字库的地址
& C/ ~( t7 k8 ~: j6 |这个字库不是点阵的,经过修改,字符的形状可发生变化,应该是矢量字库
回复 支持 反对

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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