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

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

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

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

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

关于静物2的分析

00403CE0  |> /3B96 10110000    /cmp edx,dword ptr ds:[esi+1110]/ b4 D/ p& t9 o1 c+ l3 P
00403CE6  |. |1BC9             |sbb ecx,ecx( ~: f/ G1 k) C1 N" r# H+ |
00403CE8  |. |23D1             |and edx,ecx
4 p0 X2 U  X$ |* Z" N00403CEA  |. |8B8E 0C110000    |mov ecx,dword ptr ds:[esi+110C]
* V" `5 d. G* g( V' S2 S00403CF0  |. |8A0C0A           |mov cl,byte ptr ds:[edx+ecx]! w& o$ M* k& N) g- A
00403CF3  |. |3008             |xor byte ptr ds:[eax],cl                   ;  这个循环就是异或算法
! h  _( x' ?; J00403CF5  |. |83C2 01          |add edx,1$ ~4 @4 v; h, m0 m+ Y5 G3 S6 Q
00403CF8  |. |83C0 01          |add eax,1
8 n3 d6 d7 n7 J# U" \00403CFB  |. |83EF 01          |sub edi,1
1 a2 x' {4 _& p+ M7 O00403CFE  |.^\75 E0            \jnz short SL2.00403CE0
* m8 c, `+ ?1 `' a" _/ S8 P
6 Q: f9 H/ Y- c
8 \+ @. C( y7 C# {00401A42  |.  8D4C24 18        lea ecx,dword ptr ss:[esp+18]
+ s! d/ S2 u% `) f1 q00401A46  |.  51               push ecx) \: M) I# k) @4 U
00401A47  |.  8D4C24 24        lea ecx,dword ptr ss:[esp+24]
5 M6 G9 M# e: C9 P00401A4B  |.  C68424 58110000 >mov byte ptr ss:[esp+1158],1
2 F# J: J2 i3 L$ S1 H* ~00401A53  |.  C687 08010000 00 mov byte ptr ds:[edi+108],0# e2 u0 E& R: ]0 a4 N0 v& {8 J! h
00401A5A  |.  E8 51240000      call SL2.00403EB0                           ;  读取字体函数的开始四个字节
5 ~# z% O- ~% `00401A5F  |.  817C24 18 474D47>cmp dword ptr ss:[esp+18],42474D47          ;  此处可判断出开始的四个字节应该是魔幻数
3 K, b" r5 b! ?! L% e7 |5 o+0 魔幻数" E: B4 Z/ n- o! d6 ^* X' T
+4 段数,
! [! O; G$ J) ^- }2 ?8 A+ `' H' \下面开始是每段的头部
0 d  ?5 s  X, ?2 N  B+ y  h+46EE 正文
' X& \4 B) v! A6 p. h
( K6 B: ]& Q' X' v0203DDE0  2F 45 58 54 44 41 54 41 53 46 4F 4E 54 2F 41 52  /EXTDATASFONT/AR
7 N2 q8 q$ M! c7 d$ O( _0 v5 v5 O0203DDF0  49 41 4C 20 31 31 2E 45 4E 00                    IAL 11.EN.0 l0 T2 F* `6 C! y& b

8 x$ t; L1 R* ]. F0203DEE0              75 16 00 00 (EE 46) 00 00 2F 45 58 54      ..頕../EXT5 z# j# u  G9 f/ I. S" }
0203DEF0  44 41 54 41 53 46 4F 4E 54 2F 41 52 49 41 4C 20  DATASFONT/ARIAL
! Y9 B2 I. X0 A3 R5 p0203DF00  31 32 2E 45 4E 00                                12.EN.
) k6 q4 p7 @- ]. E& N6 s4 X+ @; B; U* R
上面表中的数据除了括号中的(EE 46),其余全部与解包后文件数据一致,
8 i) q7 _# J. L6 X1675是这个段的长度,46EE是这个在文件中的偏移,每段偏移值的算法如下:) X7 s* C+ `/ ^2 {( k
- [- [7 P: s, M/ h* R  A
00401AE0  |> /899401 08010000  /mov dword ptr ds:[ecx+eax+108],edx         ;  edx=46ee* Q( o1 P! i9 S, P1 P  a; h
00401AE7  |. |8B06             |mov eax,dword ptr ds:[esi]                 ;  [esi]存放读取字符的地址( |# X5 o9 h3 G4 t* ~, b: ?( x8 ^
00401AE9  |. |039401 04010000  |add edx,dword ptr ds:[ecx+eax+104]
) ]% ~5 {! N' T7 E( C00401AF0  |. |83C3 01          |add ebx,1# [/ Y7 H& z) M) \5 G
00401AF3  |. |81C1 0C010000    |add ecx,10C
6 k. f. Z6 X( F# D00401AF9  |. |3B5C24 14        |cmp ebx,dword ptr ss:[esp+14]              ;  [esp+14]=1C2
2 v: z, ^0 w& D+ h7 _$ [' L/ i00401AFD  |.^\72 E1            \jb short SL2.00401AE0
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

沙发
发表于 2010-3-28 11:32 | 只看该作者
首先对楼主的大力支持表示非常感谢!" ^/ w; c7 o4 {$ k# Z4 d
想问一下,通过以上分析,能得出什么阶段性的结论吗?
回复 支持 反对

使用道具 举报

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

使用道具 举报

地板
 楼主| 发表于 2010-3-28 12:06 | 只看该作者
Sl2fnt.dat文件格式分析如下:
. Y, i( ?# \1 z+ L+0 474D4742  这个魔幻数
& v: R+ V" O1 q& A- _  X6 J* X" F. V5 p7 r
+4 C2010000  表示有01C2个文件" K2 |+ ]. D) Y( i* ]: c# z

- R% Q% E; X+ q+8 2F4558544441544153464F4E542F415249414C2031312E454E00* C$ M  P8 P1 b6 }6 t: T
/EXTDATASFONT/ARIAL 11.EN.u: R' [0 _" x/ m5 X  v
这个应该是文件头部,ARIAL表示字体,EN表示英语 11表示字号
) h7 Q0 u6 ]7 m8 m. R2 w
/ f, _- Y' y0 x4 o1 M! c   751600 表示这个文件的大小
) j6 _* O) c: x; J+ ~: V( z+ V: B" J9 J% V6 X4 M
每个文件的偏移由上文中的最后那个函数得出1 T7 E" @) E% `

; m$ s- r$ h8 b" R8 Y* j7 K8 Y& L, _7 x% T/ q$ \( k" h6 V3 z, |
+46EE 此处开始是每个文件的正文& m! `8 @; X. G

1 y  f/ N  f; R5 m" \" x如上面我举的这个例子,文件正文内容起始地址+46EE,
4 D% d* k4 w' X! C结束地址为+(46EE+1675)
回复 支持 反对

使用道具 举报

5#
发表于 2010-3-28 12:11 | 只看该作者
这个其实不用分析,这个dat是个包文件,已经有解包器了啊。
3 U; F& f4 X$ J. ]需要分析的是里面解出来的字体文件。字体文件的magic number是XCPK.
7 m& F" M$ [/ v' e  W# d& F7 N) j, [6 [7 D# M! b
我想知道XCPK文件的结构。
回复 支持 反对

使用道具 举报

6#
发表于 2010-3-28 12:16 | 只看该作者
http://aluigi.altervista.org/papers.htm7 z6 k* N8 l6 m8 b% H" d

3 a3 d' F: U' n- ^这里有stilllife2 dat文件解包器,配合quickbms使用
回复 支持 反对

使用道具 举报

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

回 楼主(jinxin8866) 的帖子

写屏函数:
4 Z1 r5 E) X5 `( Z3 s02A0EA4C  |> /8B00        |/mov eax,dword ptr ds:[eax], N) o, {6 W! p+ X/ r/ |: O
02A0EA4E  |. |0FB70450    ||movzx eax,word ptr ds:[eax+edx*2]                    ;  [eax+edx*2]存放字符的UNICODE码2 j4 s/ A. A9 G# U" K" s4 e, O
02A0EA52  |. |8B7C24 14   ||mov edi,dword ptr ss:[esp+14]' V3 V9 n. R, |- E
02A0EA56  |. |8B7F 2C     ||mov edi,dword ptr ds:[edi+2C]
2 Y7 n4 [& K3 K8 _02A0EA59  |. |8D04C0      ||lea eax,dword ptr ds:[eax+eax*8]
5 ]- b9 j, r! e' z) [% I02A0EA5C  |. |8D0487      ||lea eax,dword ptr ds:[edi+eax*4]                     ;  eax存放字符编码表. l$ i, q2 `* |8 B6 j4 h
每个字符码表占24(16进制)个字节9 \! d- A: c$ A: L5 `2 f7 G4 T8 Y
02A0EA5F  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]# O) \) M" o+ v& ?: u; K' k
02A0EA63  |. |8D7C39 14   ||lea edi,dword ptr ds:[ecx+edi+14]                    ;  edi就是显存地址
0 p. v. b8 ^7 A0 I/ }02A0EA67  |. |D940 04     ||fld dword ptr ds:[eax+4]/ f: p" ^2 @: }# e* ]
02A0EA6A  |. |83C2 01     ||add edx,1                                              字符个数加一' U0 B; N8 w6 Y4 C5 Q& O
02A0EA6D  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]9 c6 o& o4 W8 n6 ^9 c3 f: ]( B* |/ A8 S
02A0EA71  |. |D900        ||fld dword ptr ds:[eax]& Z! q7 J  x; [, r0 M
02A0EA73  |. |D91F        ||fstp dword ptr ds:[edi]                              ;  edi就是显存地址
' Y- \9 H. n1 _2 k每个字符占1C个字节,最后的四个字节都是一样的,可以认为是结束标志
2 A7 G  `0 \; m9 z02A0EA75  |. |D94424 30   ||fld dword ptr ss:[esp+30]
* c2 i& r0 ^% z5 c# w" i& N02A0EA79  |. |D95F 04     ||fstp dword ptr ds:[edi+4]
: S5 C! D- _* V- ]02A0EA7C  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]
8 W  `6 b4 [/ z# p5 v' ^3 L4 Q: r, Q02A0EA80  |. |D940 04     ||fld dword ptr ds:[eax+4]- I6 c- t, n* D; ~( H
02A0EA83  |. |8D7C39 30   ||lea edi,dword ptr ds:[ecx+edi+30]
- b% h& f8 u5 V- u2 v2 {02A0EA87  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]
6 X0 L8 }1 M0 k1 A# n02A0EA8B  |. |D940 08     ||fld dword ptr ds:[eax+8]
( }8 V2 Y$ Y* c02A0EA8E  |. |D91F        ||fstp dword ptr ds:[edi]
  R" {! G' I( S; q* ^* V& O02A0EA90  |. |D94424 30   ||fld dword ptr ss:[esp+30]
7 x+ ^8 q5 Y* v  T* L02A0EA94  |. |D95F 04     ||fstp dword ptr ds:[edi+4]6 T! t* `- `. \' j8 ]: S
02A0EA97  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]
9 M( y- V! L: h" ^4 o02A0EA9B  |. |D940 0C     ||fld dword ptr ds:[eax+C]
- U+ o! `+ v; M2 w- S5 i02A0EA9E  |. |8D7C39 4C   ||lea edi,dword ptr ds:[ecx+edi+4C]) v* l' d2 N5 v! e
02A0EAA2  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]
2 [+ D% [5 B. o# y9 R02A0EAA6  |. |D900        ||fld dword ptr ds:[eax]8 E; Q8 d% M7 I7 l. ~+ R
02A0EAA8  |. |D91F        ||fstp dword ptr ds:[edi]/ L8 [  L: M' p; D( Z0 |
02A0EAAA  |. |D94424 30   ||fld dword ptr ss:[esp+30]
) l8 z8 U7 I% A* f1 i1 d02A0EAAE  |. |D95F 04     ||fstp dword ptr ds:[edi+4]( V& }0 O6 A1 Q# t8 _8 B! G: ?
02A0EAB1  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]# x4 r6 w1 c3 w# F" d; S
02A0EAB5  |. |D940 0C     ||fld dword ptr ds:[eax+C]
# h" Y8 }$ m/ w2 i02A0EAB8  |. |8D7C39 68   ||lea edi,dword ptr ds:[ecx+edi+68]
+ @  {) \4 L  l8 v* C; i, d7 @% i02A0EABC  |. |D95C24 30   ||fstp dword ptr ss:[esp+30], ^- U' W4 \' g/ I) ~% V, ?
02A0EAC0  |. |83C1 70     ||add ecx,70
+ @3 O, V9 t% M6 D$ {02A0EAC3  |. |D940 08     ||fld dword ptr ds:[eax+8]* |6 _+ V9 ?% ^. I  s
02A0EAC6  |. |D91F        ||fstp dword ptr ds:[edi]
' I5 Q9 D8 ?8 p6 ]2 Z02A0EAC8  |. |D94424 30   ||fld dword ptr ss:[esp+30]
1 d" R0 C4 e. }02A0EACC  |. |D95F 04     ||fstp dword ptr ds:[edi+4]5 e8 `, W+ v/ S! ?( |
02A0EACF  |. |8B46 58     ||mov eax,dword ptr ds:[esi+58]$ x( i; i/ t1 w/ |% Y+ H
02A0EAD2  |. |03C3        ||add eax,ebx
  T2 F& H! ?; A: B02A0EAD4  |. |3B50 08     ||cmp edx,dword ptr ds:[eax+8]
' F, ~5 i) d, ^- c! _02A0EAD7  |.^\\0F8C 6FFFFF>|\\jl xcDxShad.02A0EA4C! y  g1 @8 }( X: ?0 j

/ g2 M' X8 _9 A% ^' h1 O本游戏字符编码采用UNICODE,
' A% |! _" W0 V8 r2 _6 K对字符码表的操作:
6 ^; s! Z9 @$ x6 q10028807  |> /0FB702      /movzx eax,word ptr ds:[edx]        读字符的UNICODE码
1 u1 C) ]. @) o2 g' s; s1002880A  |. |8D04C0      |lea eax,dword ptr ds:[eax+eax*8]3 P& ^" @9 T- X7 i; [. j) I
1002880D  |. |8D0483      |lea eax,dword ptr ds:[ebx+eax*4]   根据UNICODE码求得字符码表的地址
; m2 |9 q- W7 x, ?1 ]4 C10028810  |. |33C9        |xor ecx,ecx# D% [4 K+ l# o
10028812  |. |DB40 20     |fild dword ptr ds:[eax+20]* C5 Q6 x' b' S/ P: W% l
10028815  |. |D95C24 14   |fstp dword ptr ss:[esp+14]
' R: u) O  k7 C" }6 [! q8 P: ?, @10028819  |. |D94424 14   |fld dword ptr ss:[esp+14]
  Q* l, g( e5 Z1 ^2 O6 q1002881D  |. |D9C0        |fld st( r2 w% y6 v) o- u# m* B! w3 h
1002881F  |. |D84E 14     |fmul dword ptr ds:[esi+14]
) b2 `) `  H* ?" }% ?/ M* n10028822  |. |D94424 0C   |fld dword ptr ss:[esp+C]
$ P' i1 B) X5 B% e- o" u6 `10028826  |. |D9C0        |fld st
% [3 s8 g% O7 L5 U10028828  |. |DEC2        |faddp st(2),st! y( W# o1 w- R! L8 m6 u
1002882A  |. |D9C9        |fxch st(1)
9 l1 L9 f. k- m  I: `1002882C  |. |D95C24 14   |fstp dword ptr ss:[esp+14]
8 X$ Q& L  A2 I% A9 P* ~9 X10028830  |. |D8D3        |fcom st(3)
$ H5 N! f. d8 F& I& m: a5 a8 X! R10028832  |. |DFE0        |fstsw ax
, X0 K4 J/ C& G8 W% u0 N4 c% ]  l10028834  |. |F6C4 01     |test ah,1
, ]% ]  ]/ l; h1 J) F0 a1 `10028837  |. |74 2B       |je short xcEngine.100288649 B$ Y+ l$ j: {$ A' m
10028839  |. |D94424 14   |fld dword ptr ss:[esp+14]* r$ G  q) L, n
1002883D  |. |D8D3        |fcom st(3)( w4 Y3 G3 g3 O/ n& M$ F, q, g
1002883F  |. |DFE0        |fstsw ax; B8 P& t0 n6 C3 _
10028841  |. |F6C4 41     |test ah,41$ S0 j5 ?6 O/ O
10028844  |. |7A 04       |jpe short xcEngine.1002884A0 v; \2 I/ s; }1 L* M# R
10028846  |. |DDD8        |fstp st' g) O2 n* b" x( e: q* z6 K
10028848  |. |EB 1A       |jmp short xcEngine.10028864
5 i4 ~; D. _( ~8 {/ |1002884A  |> |D9C9        |fxch st(1)' |) }8 [( V2 k* O# d9 ^! C; V
1002884C  |. |D8D3        |fcom st(3)& r! @* L# `  e/ \3 E
1002884E  |. |DFE0        |fstsw ax! z6 F; J; @6 Z) g+ Z. N$ Z. s# J
10028850  |. |F6C4 05     |test ah,5
( m% U" N( j2 U: q7 W7 Z7 V1 t10028853  |. |7A 04       |jpe short xcEngine.10028859. C0 F$ U3 h* z1 q
10028855  |. |DDD9        |fstp st(1)9 S8 I; Z! ~( x# [0 P' l) z' X+ t4 w0 ]& Y
10028857  |. |EB 0B       |jmp short xcEngine.10028864
& X$ @9 @! |8 p+ }+ w+ |0 L6 [10028859  |> |D9C9        |fxch st(1)6 X" \7 @& O. \( f6 Z$ h! |( e$ q
1002885B  |. |D8DC        |fcomp st(4)
8 l* \' d8 [" b3 m2 V/ X3 u7 ]1002885D  |. |DFE0        |fstsw ax6 J- P/ V* ?7 z, r& {  t
1002885F  |. |F6C4 41     |test ah,411 A- _1 i) @" o) f% C
10028862  |. |75 05       |jnz short xcEngine.10028869
7 n: ?% s# ^1 \1 G# k0 _/ j10028864  |> |B9 01000000 |mov ecx,1
5 {& z: m% |9 \4 c' a10028869  |> |85C9        |test ecx,ecx/ h7 ]* n) s4 x/ ~% o' ^& k
1002886B  |. |8B4424 18   |mov eax,dword ptr ss:[esp+18]
% U. G4 N8 l. c/ @1002886F  |. |D940 14     |fld dword ptr ds:[eax+14]
8 W) }/ i5 C% Y: l/ Y5 V/ E6 k10028872  |. |DECA        |fmulp st(2),st
+ D) F8 `' C9 J7 @+ a1 y/ {10028874  |. |DEC1        |faddp st(1),st
2 f% |  V& A0 Z7 C. E10028876  |. |D95C24 0C   |fstp dword ptr ss:[esp+C]6 E# H" U% Z! X9 m8 y, A! Y
1002887A  |. |75 05       |jnz short xcEngine.10028881' D0 g6 O! T- V) k; q. a1 ~9 P
1002887C  |. |834424 10 0>|add dword ptr ss:[esp+10],1" u% {9 ^1 [" y2 T- z
10028881  |> |83C2 02     |add edx,2
" f- H7 f; E# |, Q. z3 |  a- Y10028884  |. |83EF 01     |sub edi,18 u, O) I: ~5 x- i6 o; {$ i
10028887  |.^\\0F85 7AFFFF>\\jnz xcEngine.10028807# h: Z- l" N* ~# W4 Y
由于算法采用了浮点数指令,本人不太懂,边学习边研究中。。。。。。。。。
回复 支持 反对

使用道具 举报

8#
发表于 2010-4-1 11:13 | 只看该作者
加油!UNICODE码内核的游戏?2 s0 H# K# W$ `$ e1 U" A1 w* i& \
看来汉化有希望啊。
回复 支持 反对

使用道具 举报

9#
发表于 2010-4-1 11:17 | 只看该作者
只要知道游戏读取字符图片以后,以何种格式,放到哪个内存地址。& f" ^! J; W' t; L; d, z( B* m
即使我们无法解压字库,也可以通过内挂一个DLL,传入字符编码,把我们自己的字符图片写入对应的内存地址。从而达到汉化的目的。
回复 支持 反对

使用道具 举报

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

回 8楼(shane007) 的帖子

找到了内存中字库的地址,可在下面这个位置下断,
) q  E2 [1 w% [' W2 j+ z! d2 K% F
02A0EA5C  |. |8D0487      ||lea eax,dword ptr ds:[edi+eax*4]                     ;  eax存放的就是字库的地址
* X5 J6 m1 J5 t0 S这个字库不是点阵的,经过修改,字符的形状可发生变化,应该是矢量字库
回复 支持 反对

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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