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

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

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

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

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

关于静物2的分析

00403CE0  |> /3B96 10110000    /cmp edx,dword ptr ds:[esi+1110]
% e- @+ b, D7 p& [# a* D& E1 ~- c; Z' S00403CE6  |. |1BC9             |sbb ecx,ecx
' M# B# F7 O/ H& [. N" k/ \; B" S00403CE8  |. |23D1             |and edx,ecx
  W. k  t5 I5 K* e* |00403CEA  |. |8B8E 0C110000    |mov ecx,dword ptr ds:[esi+110C]" N. W) n" c6 G% u$ C1 y1 z8 Z* L
00403CF0  |. |8A0C0A           |mov cl,byte ptr ds:[edx+ecx]! m" p( Q% p* z5 V$ R8 E
00403CF3  |. |3008             |xor byte ptr ds:[eax],cl                   ;  这个循环就是异或算法5 _( }. E* K0 ~" W
00403CF5  |. |83C2 01          |add edx,1
+ A2 N* V5 G" p2 A; a( _& D# A00403CF8  |. |83C0 01          |add eax,13 {2 N7 j! {( l% T! s3 H
00403CFB  |. |83EF 01          |sub edi,1
+ Y- J: _* e" n) \5 r0 s; ]9 B00403CFE  |.^\75 E0            \jnz short SL2.00403CE0
  A4 ?4 C6 l3 [- y; X; |1 E. }- d* @; U# w% i) @6 _/ C  l

! |/ Q8 S( _  d+ ~6 }, D& Q00401A42  |.  8D4C24 18        lea ecx,dword ptr ss:[esp+18]3 T7 F5 q+ c, @  H
00401A46  |.  51               push ecx
* g: |7 w) }) ]  y00401A47  |.  8D4C24 24        lea ecx,dword ptr ss:[esp+24]
( \; H7 Z$ b% n- G00401A4B  |.  C68424 58110000 >mov byte ptr ss:[esp+1158],1! z# ?! w, X* y$ I7 |; i
00401A53  |.  C687 08010000 00 mov byte ptr ds:[edi+108],0
' x$ g- l5 m( H00401A5A  |.  E8 51240000      call SL2.00403EB0                           ;  读取字体函数的开始四个字节
8 E4 y3 _% n- M00401A5F  |.  817C24 18 474D47>cmp dword ptr ss:[esp+18],42474D47          ;  此处可判断出开始的四个字节应该是魔幻数
& t$ X' Y- J' S* N, x/ x: A  ^( Q+0 魔幻数+ w8 ]% p$ t5 n) C/ W7 Z
+4 段数,1 ?" Y: _# H. ]) i) b' a/ @* h- U
下面开始是每段的头部( y) W4 ^8 X: m& m
+46EE 正文7 S2 j4 D4 N1 ^2 C8 [) s* J/ y
6 t- A6 Y$ U, J" ~" J. k% ~
0203DDE0  2F 45 58 54 44 41 54 41 53 46 4F 4E 54 2F 41 52  /EXTDATASFONT/AR: `: u/ h" B: |4 z
0203DDF0  49 41 4C 20 31 31 2E 45 4E 00                    IAL 11.EN.5 i8 S$ m8 Q. l. _  K5 ^2 S0 {
, Q6 D$ j# G# r) X$ O% J
0203DEE0              75 16 00 00 (EE 46) 00 00 2F 45 58 54      ..頕../EXT3 ]6 r1 ^* [( c5 ~+ P  H  {4 I
0203DEF0  44 41 54 41 53 46 4F 4E 54 2F 41 52 49 41 4C 20  DATASFONT/ARIAL; m2 m! |2 _- `' f" {$ G2 J
0203DF00  31 32 2E 45 4E 00                                12.EN.& a0 o* G2 d9 t$ k$ b0 w& d8 a
7 j+ R# U1 A+ y) [; z: H
上面表中的数据除了括号中的(EE 46),其余全部与解包后文件数据一致,3 i5 X; G+ t5 ]+ P& W# r
1675是这个段的长度,46EE是这个在文件中的偏移,每段偏移值的算法如下:
. X( ~* N8 A2 B+ L# r+ q- O( z+ d" N5 ]9 {2 M9 N8 t
00401AE0  |> /899401 08010000  /mov dword ptr ds:[ecx+eax+108],edx         ;  edx=46ee" J' v0 ~; u' c) i3 G, d: ]: o
00401AE7  |. |8B06             |mov eax,dword ptr ds:[esi]                 ;  [esi]存放读取字符的地址
0 C2 f" o  y, ^. N  j' t: L00401AE9  |. |039401 04010000  |add edx,dword ptr ds:[ecx+eax+104]1 v: x- ^2 O! w3 v
00401AF0  |. |83C3 01          |add ebx,19 \2 ?# I, ~2 F! U
00401AF3  |. |81C1 0C010000    |add ecx,10C
6 `& x. }6 {7 l2 `1 ~, E& p3 P00401AF9  |. |3B5C24 14        |cmp ebx,dword ptr ss:[esp+14]              ;  [esp+14]=1C2
) T  S/ N& c( H4 u6 d5 E/ Q% ?00401AFD  |.^\72 E1            \jb short SL2.00401AE0
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

沙发
发表于 2010-3-28 11:32 | 只看该作者
首先对楼主的大力支持表示非常感谢!8 G7 L3 I5 b  W8 W2 @
想问一下,通过以上分析,能得出什么阶段性的结论吗?
回复 支持 反对

使用道具 举报

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

使用道具 举报

地板
 楼主| 发表于 2010-3-28 12:06 | 只看该作者
Sl2fnt.dat文件格式分析如下:
4 Y% a- h+ p8 T. i6 Q$ G+ Z6 q* c. m+0 474D4742  这个魔幻数* T; o8 b" F" K% H( G

+ e2 G: s& P; N5 R# V, L' n" c5 E9 y+4 C2010000  表示有01C2个文件
3 V5 E  n' d3 |, S6 O# C3 Y
" D; Z# r$ ?' C" j( P+8 2F4558544441544153464F4E542F415249414C2031312E454E00
6 }# R7 J/ w. |; C1 u; V$ ~) L/EXTDATASFONT/ARIAL 11.EN.u) `! U* a- e8 Q2 k; k6 y3 Z
这个应该是文件头部,ARIAL表示字体,EN表示英语 11表示字号# [5 z; ^0 k: |& i

3 N) c  ^/ f% Q' ^7 H   751600 表示这个文件的大小
( Z0 R7 P" a. b5 n5 S
! q) Y' C0 {# N) z* i  M每个文件的偏移由上文中的最后那个函数得出/ h# f1 L) p  _5 d

( O. G! H$ u& d) Q/ Y2 q, _7 J( Y
4 v+ n: l# z# K) U+46EE 此处开始是每个文件的正文$ x0 m% E- Q3 _' D8 G% A9 O
, B; d6 G1 o4 A5 X2 B+ @
如上面我举的这个例子,文件正文内容起始地址+46EE,
) d: t- l9 E0 I结束地址为+(46EE+1675)
回复 支持 反对

使用道具 举报

5#
发表于 2010-3-28 12:11 | 只看该作者
这个其实不用分析,这个dat是个包文件,已经有解包器了啊。. V: G: n) `. `$ j( m" ^7 I
需要分析的是里面解出来的字体文件。字体文件的magic number是XCPK.
- R. |8 K* Y3 W% \+ K( C0 u
% a  ?0 \4 D7 U, W6 |我想知道XCPK文件的结构。
回复 支持 反对

使用道具 举报

6#
发表于 2010-3-28 12:16 | 只看该作者
http://aluigi.altervista.org/papers.htm
1 }4 W: ?7 }2 f5 M& C5 R  a  o1 \7 L/ @2 G
这里有stilllife2 dat文件解包器,配合quickbms使用
回复 支持 反对

使用道具 举报

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

回 楼主(jinxin8866) 的帖子

写屏函数:9 ~- b+ K5 T( P9 G  I7 h8 ^* c
02A0EA4C  |> /8B00        |/mov eax,dword ptr ds:[eax]/ |/ e" @! w8 ^' y" F7 s
02A0EA4E  |. |0FB70450    ||movzx eax,word ptr ds:[eax+edx*2]                    ;  [eax+edx*2]存放字符的UNICODE码
4 l+ O4 S9 y8 Q( W$ o7 W0 n02A0EA52  |. |8B7C24 14   ||mov edi,dword ptr ss:[esp+14]* e4 e6 c" k" }" w) c
02A0EA56  |. |8B7F 2C     ||mov edi,dword ptr ds:[edi+2C]
9 Q; R, H$ \% q02A0EA59  |. |8D04C0      ||lea eax,dword ptr ds:[eax+eax*8]
/ O5 ^: e7 B8 Q1 O02A0EA5C  |. |8D0487      ||lea eax,dword ptr ds:[edi+eax*4]                     ;  eax存放字符编码表) p, [/ O2 `% `, V6 T; F
每个字符码表占24(16进制)个字节
# d0 K  ^5 Q- g2 ]2 h$ @* p4 N02A0EA5F  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]8 z# ]/ N  J. ]
02A0EA63  |. |8D7C39 14   ||lea edi,dword ptr ds:[ecx+edi+14]                    ;  edi就是显存地址
( J0 a% s8 T% I5 r02A0EA67  |. |D940 04     ||fld dword ptr ds:[eax+4]3 \' d2 Q$ F  J" X% Y; U" O
02A0EA6A  |. |83C2 01     ||add edx,1                                              字符个数加一
5 \8 Q$ t3 \8 F2 A+ P02A0EA6D  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]  F& t$ @: B4 g! P
02A0EA71  |. |D900        ||fld dword ptr ds:[eax]
6 J0 d( c0 j6 ?) K4 Z9 Y0 F# S02A0EA73  |. |D91F        ||fstp dword ptr ds:[edi]                              ;  edi就是显存地址( d6 E1 F& x6 D; g- V
每个字符占1C个字节,最后的四个字节都是一样的,可以认为是结束标志9 {& S4 p) ~# u7 m+ ?5 h$ u& U
02A0EA75  |. |D94424 30   ||fld dword ptr ss:[esp+30]- M: g2 ^6 C6 f% ^$ U
02A0EA79  |. |D95F 04     ||fstp dword ptr ds:[edi+4]
/ F- V) O/ k$ K02A0EA7C  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]
' \% g3 x8 O4 n02A0EA80  |. |D940 04     ||fld dword ptr ds:[eax+4], X  Z& _0 \* m% m& O9 v7 T
02A0EA83  |. |8D7C39 30   ||lea edi,dword ptr ds:[ecx+edi+30]
4 _0 `) M0 z& _* N& q02A0EA87  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]6 r) ]1 x4 v0 ?7 V: x$ k. S2 u
02A0EA8B  |. |D940 08     ||fld dword ptr ds:[eax+8]5 w, S6 L# s5 Y$ F8 s
02A0EA8E  |. |D91F        ||fstp dword ptr ds:[edi]
& K$ z: `% n. m) _+ W02A0EA90  |. |D94424 30   ||fld dword ptr ss:[esp+30]
( w2 D& X0 J; H9 w0 y02A0EA94  |. |D95F 04     ||fstp dword ptr ds:[edi+4]- k) Z4 y/ @  M6 Q8 N
02A0EA97  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]
; R# n  o( b$ z1 q02A0EA9B  |. |D940 0C     ||fld dword ptr ds:[eax+C]
% L, j! m! [' s02A0EA9E  |. |8D7C39 4C   ||lea edi,dword ptr ds:[ecx+edi+4C]
! V- n5 F9 }* z; N& y0 \02A0EAA2  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]
3 `8 |4 R- F4 M! a, s3 f6 l02A0EAA6  |. |D900        ||fld dword ptr ds:[eax]2 J& e; q  w" _: B
02A0EAA8  |. |D91F        ||fstp dword ptr ds:[edi]
6 L6 g9 l/ x- H- k5 U* i/ R02A0EAAA  |. |D94424 30   ||fld dword ptr ss:[esp+30]
- ?  j  ]/ W/ S: O. V02A0EAAE  |. |D95F 04     ||fstp dword ptr ds:[edi+4]
8 B' [! T* N% s& }5 b8 P( r; n5 S02A0EAB1  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]2 N; H2 t5 D# A) f
02A0EAB5  |. |D940 0C     ||fld dword ptr ds:[eax+C]9 U1 j; P* }3 Z2 J4 l" c
02A0EAB8  |. |8D7C39 68   ||lea edi,dword ptr ds:[ecx+edi+68]8 I1 d& o/ _+ p7 R+ d5 ?: C/ I
02A0EABC  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]4 K. l: h5 T- y3 O* h
02A0EAC0  |. |83C1 70     ||add ecx,70+ z& c, ?. Q7 k# T8 e" L
02A0EAC3  |. |D940 08     ||fld dword ptr ds:[eax+8]5 V/ l, a, c6 L
02A0EAC6  |. |D91F        ||fstp dword ptr ds:[edi]
2 i8 U2 O3 w3 X8 r3 {02A0EAC8  |. |D94424 30   ||fld dword ptr ss:[esp+30]
8 D/ b+ ]4 I* c02A0EACC  |. |D95F 04     ||fstp dword ptr ds:[edi+4]
4 }3 k3 x1 j0 E% v+ M) K02A0EACF  |. |8B46 58     ||mov eax,dword ptr ds:[esi+58]7 B  a+ Y# w+ X; R$ _8 n4 Z
02A0EAD2  |. |03C3        ||add eax,ebx
! Y4 }9 {" W+ x3 v02A0EAD4  |. |3B50 08     ||cmp edx,dword ptr ds:[eax+8]- D/ j% E' [" J
02A0EAD7  |.^\\0F8C 6FFFFF>|\\jl xcDxShad.02A0EA4C0 E/ }8 ]2 x) E, ^5 E# e
* j) f. l1 ]. j
本游戏字符编码采用UNICODE,9 z8 Z  |0 _3 ~4 B. f. j6 b; ^
对字符码表的操作:
: |/ t0 M# k+ c  L" c2 G! e7 V8 h10028807  |> /0FB702      /movzx eax,word ptr ds:[edx]        读字符的UNICODE码
7 d( H5 ^9 L2 d* b" U1002880A  |. |8D04C0      |lea eax,dword ptr ds:[eax+eax*8]
  e! k+ P) o0 u* x- N1002880D  |. |8D0483      |lea eax,dword ptr ds:[ebx+eax*4]   根据UNICODE码求得字符码表的地址
$ v. h% K8 V! @0 c" `8 l10028810  |. |33C9        |xor ecx,ecx
$ E# E) p# p5 y9 {; {1 K10028812  |. |DB40 20     |fild dword ptr ds:[eax+20]) N' n- [4 l$ y5 ^
10028815  |. |D95C24 14   |fstp dword ptr ss:[esp+14]5 w# F0 T- b8 \9 A, q
10028819  |. |D94424 14   |fld dword ptr ss:[esp+14]
3 O0 [# k  V0 I0 U, D1002881D  |. |D9C0        |fld st
: X8 Y. D+ Z* R& Q+ N; d: n9 W: Y1002881F  |. |D84E 14     |fmul dword ptr ds:[esi+14]7 ?" ]! @; l( l6 P: k  u" _
10028822  |. |D94424 0C   |fld dword ptr ss:[esp+C]; g' Y- K: [1 ?: J
10028826  |. |D9C0        |fld st
# l3 C2 z. a. o, a+ P' j10028828  |. |DEC2        |faddp st(2),st% r: g8 l$ W) E
1002882A  |. |D9C9        |fxch st(1)
4 T, W- r1 S4 s6 g+ ~6 _# I1002882C  |. |D95C24 14   |fstp dword ptr ss:[esp+14]: u2 ~; e4 L% P2 f# l: G
10028830  |. |D8D3        |fcom st(3)
8 R) x( f; r$ d9 H10028832  |. |DFE0        |fstsw ax
5 m: i; T8 h  @/ A2 @* o# d10028834  |. |F6C4 01     |test ah,1
  _+ z) r/ {3 W$ Q10028837  |. |74 2B       |je short xcEngine.10028864
1 K, {* p: w+ a3 D9 a10028839  |. |D94424 14   |fld dword ptr ss:[esp+14]
( r* ^5 R" S3 _4 [1002883D  |. |D8D3        |fcom st(3)
* y7 E( V: ]6 T6 D% `1002883F  |. |DFE0        |fstsw ax* ?5 A! k( @: F3 k* r2 e
10028841  |. |F6C4 41     |test ah,413 F# b* b- t7 n- E% e
10028844  |. |7A 04       |jpe short xcEngine.1002884A& o0 D. U- U1 `+ h: |/ k
10028846  |. |DDD8        |fstp st
- Z: R) D1 {) R10028848  |. |EB 1A       |jmp short xcEngine.100288642 _9 b2 S0 [7 e, R  t  Q+ Q- y4 A
1002884A  |> |D9C9        |fxch st(1)- w7 J6 v; @9 [2 l" _: N
1002884C  |. |D8D3        |fcom st(3)
& o$ n: `0 a: d5 @/ a3 H5 h1002884E  |. |DFE0        |fstsw ax
; e3 N9 t4 g. T; x10028850  |. |F6C4 05     |test ah,5
! v# j1 u, F" s0 |5 \0 x10028853  |. |7A 04       |jpe short xcEngine.10028859
0 k+ H0 S6 J9 M" \10028855  |. |DDD9        |fstp st(1)9 s8 a" O4 |) W# F
10028857  |. |EB 0B       |jmp short xcEngine.10028864
9 d& _- j7 A6 H2 O# }0 L10028859  |> |D9C9        |fxch st(1)  p3 r4 G2 p, x4 i- C
1002885B  |. |D8DC        |fcomp st(4)
+ Z, H" {3 f( `+ f: ^9 R1002885D  |. |DFE0        |fstsw ax  ^) j: L% T. \* J5 J0 d) {
1002885F  |. |F6C4 41     |test ah,414 U) q: C% G9 [& m
10028862  |. |75 05       |jnz short xcEngine.10028869
7 X- e3 g' |. J2 k6 F/ Z: u, O- \10028864  |> |B9 01000000 |mov ecx,1
' H. M  a0 O( x( V10028869  |> |85C9        |test ecx,ecx1 P# V, O/ W- \
1002886B  |. |8B4424 18   |mov eax,dword ptr ss:[esp+18]4 S  K1 n/ I; p$ W. ]
1002886F  |. |D940 14     |fld dword ptr ds:[eax+14]
5 v8 W6 u" M7 q9 @; I7 G- r10028872  |. |DECA        |fmulp st(2),st& f5 q0 |, j  ~+ d0 C5 V3 b* ?" W
10028874  |. |DEC1        |faddp st(1),st* C  Q, b/ K% f$ H7 [9 Q/ X
10028876  |. |D95C24 0C   |fstp dword ptr ss:[esp+C]: E8 I& u3 i0 G" b
1002887A  |. |75 05       |jnz short xcEngine.10028881( I: }5 M: N# T5 Z/ r6 o
1002887C  |. |834424 10 0>|add dword ptr ss:[esp+10],1
* D/ z  S, x& r+ p10028881  |> |83C2 02     |add edx,2
9 b- R" \/ D4 @7 c' s10028884  |. |83EF 01     |sub edi,12 r, k' G1 K! W
10028887  |.^\\0F85 7AFFFF>\\jnz xcEngine.10028807
) M: Q( X7 v" W+ v. v由于算法采用了浮点数指令,本人不太懂,边学习边研究中。。。。。。。。。
回复 支持 反对

使用道具 举报

8#
发表于 2010-4-1 11:13 | 只看该作者
加油!UNICODE码内核的游戏?! E8 q; I1 w1 ?8 ?5 V$ }. B# N5 S
看来汉化有希望啊。
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

回 8楼(shane007) 的帖子

找到了内存中字库的地址,可在下面这个位置下断,3 }, y" N: b- u  v
3 j- V' C: w" g! f% m3 M+ Z
02A0EA5C  |. |8D0487      ||lea eax,dword ptr ds:[edi+eax*4]                     ;  eax存放的就是字库的地址
- Q- n$ z; w! `' {这个字库不是点阵的,经过修改,字符的形状可发生变化,应该是矢量字库
回复 支持 反对

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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