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

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

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

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

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

关于静物2的分析

00403CE0  |> /3B96 10110000    /cmp edx,dword ptr ds:[esi+1110]* s3 Z+ U, K! p8 |5 p
00403CE6  |. |1BC9             |sbb ecx,ecx
0 w' q3 R9 O2 d: _00403CE8  |. |23D1             |and edx,ecx
" s& Q5 x. L1 y, m2 e: j) [00403CEA  |. |8B8E 0C110000    |mov ecx,dword ptr ds:[esi+110C]
/ [2 n7 s5 q3 q3 n5 P! a00403CF0  |. |8A0C0A           |mov cl,byte ptr ds:[edx+ecx]: e; B6 m# q& Y% i* \- ~, D
00403CF3  |. |3008             |xor byte ptr ds:[eax],cl                   ;  这个循环就是异或算法/ U% K9 {. Q5 x& R. q6 X; c* d
00403CF5  |. |83C2 01          |add edx,1+ K. y$ d& D$ F! y* T
00403CF8  |. |83C0 01          |add eax,1
0 O  V6 o; ?7 U1 q00403CFB  |. |83EF 01          |sub edi,18 N0 e- z7 m! B
00403CFE  |.^\75 E0            \jnz short SL2.00403CE0
$ v' D0 w4 `0 h* n5 ]
8 m. |+ g' t, V2 V
: {4 w' T* E: @: U00401A42  |.  8D4C24 18        lea ecx,dword ptr ss:[esp+18]
* ]; ?/ C$ n+ H7 r9 ^2 X00401A46  |.  51               push ecx
/ F$ L; m2 |, c, p( p7 Y. ^; Z5 d00401A47  |.  8D4C24 24        lea ecx,dword ptr ss:[esp+24]! k- {$ x" S2 G! S: t1 P
00401A4B  |.  C68424 58110000 >mov byte ptr ss:[esp+1158],1+ z/ A. M: {/ d  H; [
00401A53  |.  C687 08010000 00 mov byte ptr ds:[edi+108],0
6 a& [) g) W1 l1 O7 X$ p, [* S9 c00401A5A  |.  E8 51240000      call SL2.00403EB0                           ;  读取字体函数的开始四个字节
6 |3 ?' y8 G6 o+ V00401A5F  |.  817C24 18 474D47>cmp dword ptr ss:[esp+18],42474D47          ;  此处可判断出开始的四个字节应该是魔幻数
$ W3 E# v( `9 ?2 {$ |+0 魔幻数+ e1 l5 y: V7 A; l+ S7 E
+4 段数,
2 |! p4 o0 l3 K" @下面开始是每段的头部- K* |8 u5 p4 ~1 E6 Q/ h$ f
+46EE 正文
4 E  W, h+ Y8 X* ?# W  R2 k1 ?& x, ~+ j
0203DDE0  2F 45 58 54 44 41 54 41 53 46 4F 4E 54 2F 41 52  /EXTDATASFONT/AR# o6 L) W. H. l8 Z
0203DDF0  49 41 4C 20 31 31 2E 45 4E 00                    IAL 11.EN.# m+ z9 J' y) ^- [* m1 v3 `
+ T9 f5 D: z; ?; O2 m
0203DEE0              75 16 00 00 (EE 46) 00 00 2F 45 58 54      ..頕../EXT! r# [3 I0 Q7 `9 e4 c
0203DEF0  44 41 54 41 53 46 4F 4E 54 2F 41 52 49 41 4C 20  DATASFONT/ARIAL# s4 \; f' V# j' D! G( |
0203DF00  31 32 2E 45 4E 00                                12.EN.9 z$ G  T" f" q# a

& ]. d! ]4 V* z4 c上面表中的数据除了括号中的(EE 46),其余全部与解包后文件数据一致,
5 H9 }& o! F* d; y1 m( ]1675是这个段的长度,46EE是这个在文件中的偏移,每段偏移值的算法如下:& E0 k; H  l. R. [

% R! p5 L$ P# y9 `( i8 A00401AE0  |> /899401 08010000  /mov dword ptr ds:[ecx+eax+108],edx         ;  edx=46ee6 ]+ y5 Z# g2 j! ~* L7 r
00401AE7  |. |8B06             |mov eax,dword ptr ds:[esi]                 ;  [esi]存放读取字符的地址/ h3 @4 _' Z2 O1 m
00401AE9  |. |039401 04010000  |add edx,dword ptr ds:[ecx+eax+104]
; J# |! v" Q2 K5 L" \$ K00401AF0  |. |83C3 01          |add ebx,1& j$ ~4 a4 B4 x6 W
00401AF3  |. |81C1 0C010000    |add ecx,10C
3 ]/ W) G8 ~  ]8 w! I, Y) Z00401AF9  |. |3B5C24 14        |cmp ebx,dword ptr ss:[esp+14]              ;  [esp+14]=1C2
9 n7 g' O8 q6 ~. Y$ u6 T! N& \00401AFD  |.^\72 E1            \jb short SL2.00401AE0
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

沙发
发表于 2010-3-28 11:32 | 只看该作者
首先对楼主的大力支持表示非常感谢!
7 c% u  {' z# g  R+ s0 E& z  v" t- W想问一下,通过以上分析,能得出什么阶段性的结论吗?
回复 支持 反对

使用道具 举报

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

使用道具 举报

地板
 楼主| 发表于 2010-3-28 12:06 | 只看该作者
Sl2fnt.dat文件格式分析如下:8 n! s1 f1 T* c0 X! L( U
+0 474D4742  这个魔幻数) Y# J0 a2 \/ c4 z: f

2 s4 S5 R/ M* z& o8 p+4 C2010000  表示有01C2个文件
, ?7 A* m1 r/ E' X+ e1 W. L2 R* X$ i3 J1 g3 q8 a
+8 2F4558544441544153464F4E542F415249414C2031312E454E00
9 s) v. c9 B7 w9 g5 G( u/EXTDATASFONT/ARIAL 11.EN.u/ q/ Z' F0 g3 L7 c, |3 e( x0 E1 m
这个应该是文件头部,ARIAL表示字体,EN表示英语 11表示字号# {; ^9 v. k; Q" P$ P3 \

  b) }/ N% ^7 |- R   751600 表示这个文件的大小
; K: e$ X: c5 m  S6 h/ }7 p, S- u; s) w, R; Y" v, _
每个文件的偏移由上文中的最后那个函数得出
$ d7 q+ d5 J, [+ P1 }; m2 B2 {9 s% s8 K6 u$ i- _7 y  m5 U; c7 t" i
3 v. U, t7 f* N$ t
+46EE 此处开始是每个文件的正文/ {- [- z1 g$ X2 P

' ^1 S. g9 k* k; ^如上面我举的这个例子,文件正文内容起始地址+46EE,
6 O, i2 y0 n2 Y& {. R! O结束地址为+(46EE+1675)
回复 支持 反对

使用道具 举报

5#
发表于 2010-3-28 12:11 | 只看该作者
这个其实不用分析,这个dat是个包文件,已经有解包器了啊。+ [5 p4 K# C9 S. t% g2 ]
需要分析的是里面解出来的字体文件。字体文件的magic number是XCPK.$ I7 h. f" s$ d. P2 \- a' t
4 ]7 m* u9 Q4 ?" Z4 E: A  e
我想知道XCPK文件的结构。
回复 支持 反对

使用道具 举报

6#
发表于 2010-3-28 12:16 | 只看该作者
http://aluigi.altervista.org/papers.htm6 K. ]7 ^  I( Q2 r) n

5 C( d! v4 R- A' Z, K这里有stilllife2 dat文件解包器,配合quickbms使用
回复 支持 反对

使用道具 举报

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

回 楼主(jinxin8866) 的帖子

写屏函数:* ]* ^( I/ e1 z7 \& w' y
02A0EA4C  |> /8B00        |/mov eax,dword ptr ds:[eax]
, Q6 f% L6 C4 m9 H9 @02A0EA4E  |. |0FB70450    ||movzx eax,word ptr ds:[eax+edx*2]                    ;  [eax+edx*2]存放字符的UNICODE码# e( L  _6 `3 p& @' |* F
02A0EA52  |. |8B7C24 14   ||mov edi,dword ptr ss:[esp+14]
" e2 _" Y! s' V; y02A0EA56  |. |8B7F 2C     ||mov edi,dword ptr ds:[edi+2C]
/ d0 `( `: ~5 |7 i2 z02A0EA59  |. |8D04C0      ||lea eax,dword ptr ds:[eax+eax*8]6 p& x- p6 }/ k! E# W
02A0EA5C  |. |8D0487      ||lea eax,dword ptr ds:[edi+eax*4]                     ;  eax存放字符编码表
, @8 V0 m8 L4 g2 D3 `: v8 \每个字符码表占24(16进制)个字节2 w: E9 q5 g' {; ]% }2 ~: [" a# c
02A0EA5F  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]1 X  d1 ^) s! H5 ]! x0 `
02A0EA63  |. |8D7C39 14   ||lea edi,dword ptr ds:[ecx+edi+14]                    ;  edi就是显存地址
+ G1 |* V! c/ S02A0EA67  |. |D940 04     ||fld dword ptr ds:[eax+4]
: G, X5 k9 {& R% p" j# P8 Q+ \& h02A0EA6A  |. |83C2 01     ||add edx,1                                              字符个数加一
8 ~8 j. S1 P" T6 S' v02A0EA6D  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]) M! `  ^9 {; I! q' A: L
02A0EA71  |. |D900        ||fld dword ptr ds:[eax]$ U9 N9 R) n2 a- `0 c/ q
02A0EA73  |. |D91F        ||fstp dword ptr ds:[edi]                              ;  edi就是显存地址
$ r+ h9 |2 H( ?- M1 t  \- l每个字符占1C个字节,最后的四个字节都是一样的,可以认为是结束标志
+ j* D5 Q  ]1 S6 S' N- Y+ }: b02A0EA75  |. |D94424 30   ||fld dword ptr ss:[esp+30]. V9 u) w- }2 B9 h9 H
02A0EA79  |. |D95F 04     ||fstp dword ptr ds:[edi+4]  U8 D8 @( H& R2 H5 ]3 j8 O$ M* A
02A0EA7C  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]
: l9 K9 i6 S* s; G02A0EA80  |. |D940 04     ||fld dword ptr ds:[eax+4]( ^  m+ g0 T' R; v
02A0EA83  |. |8D7C39 30   ||lea edi,dword ptr ds:[ecx+edi+30]
, z8 g7 u. J2 X$ S' x02A0EA87  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]
6 @! b0 |7 q; x1 E- D3 o: C! b02A0EA8B  |. |D940 08     ||fld dword ptr ds:[eax+8]' R+ p$ r- d6 n' ^! d
02A0EA8E  |. |D91F        ||fstp dword ptr ds:[edi]% I  \1 O2 ]  R* V' w# k
02A0EA90  |. |D94424 30   ||fld dword ptr ss:[esp+30]$ [- k$ n  p/ A0 h
02A0EA94  |. |D95F 04     ||fstp dword ptr ds:[edi+4]
! X% s! Q0 B& Q" ]02A0EA97  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]
  q8 N7 e( K3 x0 Q; O, E02A0EA9B  |. |D940 0C     ||fld dword ptr ds:[eax+C]
  ]0 \% S' z7 O' Z% k4 L, J02A0EA9E  |. |8D7C39 4C   ||lea edi,dword ptr ds:[ecx+edi+4C]
6 |. Y) F7 K2 B5 [; L9 [( Z# c" W5 s02A0EAA2  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]) m; `' i4 t9 T! n6 {/ _
02A0EAA6  |. |D900        ||fld dword ptr ds:[eax]7 S* K7 t2 [& y/ b, r5 S
02A0EAA8  |. |D91F        ||fstp dword ptr ds:[edi]. Y0 H) f7 r& J+ z
02A0EAAA  |. |D94424 30   ||fld dword ptr ss:[esp+30]0 ^3 d: T6 ]' \# @$ @& U# s
02A0EAAE  |. |D95F 04     ||fstp dword ptr ds:[edi+4]) m* k$ o' u5 G, X( A
02A0EAB1  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]- e  _8 p: L- K1 H0 M. i: x
02A0EAB5  |. |D940 0C     ||fld dword ptr ds:[eax+C]" f2 p8 m% b* m0 Y  k, I1 k! T6 S1 R0 }# }
02A0EAB8  |. |8D7C39 68   ||lea edi,dword ptr ds:[ecx+edi+68]
" Q# S4 i7 t+ ]8 \- `* c0 h02A0EABC  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]5 s. M$ e% q" L1 |5 `" X
02A0EAC0  |. |83C1 70     ||add ecx,70% T; g* |0 v6 Y
02A0EAC3  |. |D940 08     ||fld dword ptr ds:[eax+8]
) f/ k( e' p5 ~9 F02A0EAC6  |. |D91F        ||fstp dword ptr ds:[edi]
" U. H% k4 E0 h7 Q; ?, y+ m02A0EAC8  |. |D94424 30   ||fld dword ptr ss:[esp+30]5 b) G- T$ P4 h5 V- k
02A0EACC  |. |D95F 04     ||fstp dword ptr ds:[edi+4]
; t9 b+ F& e: m% L02A0EACF  |. |8B46 58     ||mov eax,dword ptr ds:[esi+58]
3 z6 [& Q4 n  W5 A* G8 j" G0 _$ T02A0EAD2  |. |03C3        ||add eax,ebx
) @+ V& ]: k# F' [0 M7 H/ S# v. X! h02A0EAD4  |. |3B50 08     ||cmp edx,dword ptr ds:[eax+8]
$ m+ w9 h+ Z9 `) d- s02A0EAD7  |.^\\0F8C 6FFFFF>|\\jl xcDxShad.02A0EA4C( o* m' o! n* T0 F+ [0 F3 j/ q
- _4 S/ U9 h9 ~
本游戏字符编码采用UNICODE,
/ \4 D6 V4 C! N对字符码表的操作:
, j% Y' x" @* v! B- l- v2 w: r10028807  |> /0FB702      /movzx eax,word ptr ds:[edx]        读字符的UNICODE码
2 J# s! H. N  K6 E- c1002880A  |. |8D04C0      |lea eax,dword ptr ds:[eax+eax*8]7 P& R' |4 w: u9 i( L
1002880D  |. |8D0483      |lea eax,dword ptr ds:[ebx+eax*4]   根据UNICODE码求得字符码表的地址, ]2 l0 z3 H8 \) t( ^8 C
10028810  |. |33C9        |xor ecx,ecx0 f' h/ X* t, J; t$ d, ~
10028812  |. |DB40 20     |fild dword ptr ds:[eax+20]1 ]2 Q8 `/ {6 X5 S1 P6 S3 \
10028815  |. |D95C24 14   |fstp dword ptr ss:[esp+14]
/ ~# }- _& N' d& m3 d+ T7 h10028819  |. |D94424 14   |fld dword ptr ss:[esp+14]. ]3 C6 y( E5 {5 f7 Q! b! v
1002881D  |. |D9C0        |fld st
9 e* Y$ k2 k  u- l) R. ?3 l) z1002881F  |. |D84E 14     |fmul dword ptr ds:[esi+14]- v) Q, ~& ~* Q9 E  X2 p" R
10028822  |. |D94424 0C   |fld dword ptr ss:[esp+C]
3 F4 A0 Q8 D+ v6 c; Q1 ~10028826  |. |D9C0        |fld st
2 }* ?' r+ @0 O  O' D( t$ M0 R* y10028828  |. |DEC2        |faddp st(2),st
( g3 J! f9 ?' O2 P) h1002882A  |. |D9C9        |fxch st(1)* p$ t5 \4 _1 u7 M
1002882C  |. |D95C24 14   |fstp dword ptr ss:[esp+14]
+ m7 ]6 \7 C! ?6 O& L1 S. R10028830  |. |D8D3        |fcom st(3)
  I4 Y# ?' L$ i8 {10028832  |. |DFE0        |fstsw ax
# ?8 I1 ^7 g2 _. H/ G0 C  q( p10028834  |. |F6C4 01     |test ah,1, x- c6 A' A* E7 y
10028837  |. |74 2B       |je short xcEngine.10028864! ?) F  c5 @2 g+ ^/ s% {, z
10028839  |. |D94424 14   |fld dword ptr ss:[esp+14]
) n- ~! ]3 ]' O: U1002883D  |. |D8D3        |fcom st(3)
' ]1 |3 Y# X5 D" d1002883F  |. |DFE0        |fstsw ax
' t2 @" ?8 Y. L% T2 i. ]: I: m10028841  |. |F6C4 41     |test ah,41
) X) i8 Q0 @! f5 Q1 m* N9 J2 J5 D10028844  |. |7A 04       |jpe short xcEngine.1002884A
* Z. `2 w2 Z8 i5 m( L10028846  |. |DDD8        |fstp st3 V3 S* g8 O1 A* |: c$ Q
10028848  |. |EB 1A       |jmp short xcEngine.10028864
# S5 \/ ^. w0 {* \# b1002884A  |> |D9C9        |fxch st(1)/ C6 ^* L' W( e, v$ b
1002884C  |. |D8D3        |fcom st(3)
: D# g. N" b8 n, r# t% b1002884E  |. |DFE0        |fstsw ax6 P" O. q. R/ j- G' @; v" |8 z
10028850  |. |F6C4 05     |test ah,5# O: z& T8 I7 {# ^% `
10028853  |. |7A 04       |jpe short xcEngine.10028859
. N/ J) x  T% h& K10028855  |. |DDD9        |fstp st(1)+ E' E4 V/ T9 n% `( |9 H7 h
10028857  |. |EB 0B       |jmp short xcEngine.10028864
; _/ @  \: a# d2 `! k" x10028859  |> |D9C9        |fxch st(1)
- A  a0 T( Z- @+ z1002885B  |. |D8DC        |fcomp st(4)
5 n. R3 G: |5 e$ t1002885D  |. |DFE0        |fstsw ax
3 o5 C- K1 I; ^1 a1002885F  |. |F6C4 41     |test ah,41( `; r0 d+ o" K0 a) T6 L
10028862  |. |75 05       |jnz short xcEngine.10028869
& j. y" M1 F4 ~) h0 c3 l# U8 w9 g+ p10028864  |> |B9 01000000 |mov ecx,1" y: \  E1 J8 C$ H1 S9 k
10028869  |> |85C9        |test ecx,ecx
$ m! m% c1 }# C# m1002886B  |. |8B4424 18   |mov eax,dword ptr ss:[esp+18]$ U% p# V- x- o9 C- |1 z0 T
1002886F  |. |D940 14     |fld dword ptr ds:[eax+14]: w+ G" J$ f5 t6 @
10028872  |. |DECA        |fmulp st(2),st
8 m+ H1 }" S0 A0 ~. B10028874  |. |DEC1        |faddp st(1),st
  B) D- l6 e2 {) H; ?10028876  |. |D95C24 0C   |fstp dword ptr ss:[esp+C]
- J8 v. k/ z+ `! T! m3 K1002887A  |. |75 05       |jnz short xcEngine.10028881
, v( ~+ U1 @5 z; f9 O8 s1002887C  |. |834424 10 0>|add dword ptr ss:[esp+10],1
4 Z/ `; }/ h8 {10028881  |> |83C2 02     |add edx,2
) Y. k# W( O+ y* B7 [; ^2 S. x10028884  |. |83EF 01     |sub edi,1* y1 i4 c. b5 L7 w' D
10028887  |.^\\0F85 7AFFFF>\\jnz xcEngine.100288079 Z% q( y3 x4 t+ @9 f. d+ c
由于算法采用了浮点数指令,本人不太懂,边学习边研究中。。。。。。。。。
回复 支持 反对

使用道具 举报

8#
发表于 2010-4-1 11:13 | 只看该作者
加油!UNICODE码内核的游戏?
9 g7 K! r7 q, T: T. `, U- N看来汉化有希望啊。
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

回 8楼(shane007) 的帖子

找到了内存中字库的地址,可在下面这个位置下断,7 p2 N7 @$ [+ M7 d4 J' R
* P7 q; X' a% n+ G" ?* u" v
02A0EA5C  |. |8D0487      ||lea eax,dword ptr ds:[edi+eax*4]                     ;  eax存放的就是字库的地址* s  z2 a. C8 p, N
这个字库不是点阵的,经过修改,字符的形状可发生变化,应该是矢量字库
回复 支持 反对

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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