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

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

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

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

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

关于静物2的分析

00403CE0  |> /3B96 10110000    /cmp edx,dword ptr ds:[esi+1110]
& ^+ I1 N9 X' k00403CE6  |. |1BC9             |sbb ecx,ecx: Z2 G. @) _/ }. X9 J3 W+ m8 S: z
00403CE8  |. |23D1             |and edx,ecx3 T7 T$ V' R% W
00403CEA  |. |8B8E 0C110000    |mov ecx,dword ptr ds:[esi+110C]& J& @' q+ a1 F/ ?0 u1 @; z
00403CF0  |. |8A0C0A           |mov cl,byte ptr ds:[edx+ecx]
6 I  c# Y. S" @& t00403CF3  |. |3008             |xor byte ptr ds:[eax],cl                   ;  这个循环就是异或算法. W. ^; N  k/ {0 y. g2 V* J- ^
00403CF5  |. |83C2 01          |add edx,1
; e3 l/ Z& w+ u  R$ g- e00403CF8  |. |83C0 01          |add eax,1
" F% Z* P+ z  @5 H( u1 Z00403CFB  |. |83EF 01          |sub edi,1
: X7 O+ u+ X7 U- W! E+ ~  S00403CFE  |.^\75 E0            \jnz short SL2.00403CE0
$ y6 f4 q% n9 A) r8 j# _7 {: M: p2 e. W' y

+ G4 ]! p1 E6 p) b  f7 C/ u) ?7 F( p# g00401A42  |.  8D4C24 18        lea ecx,dword ptr ss:[esp+18]% O& H/ T9 D- \% X# Q) g
00401A46  |.  51               push ecx
( ~5 e# D% L; ?& u9 i* k! L$ u00401A47  |.  8D4C24 24        lea ecx,dword ptr ss:[esp+24]
" W. r1 G+ a$ L00401A4B  |.  C68424 58110000 >mov byte ptr ss:[esp+1158],1. X1 V% I3 X" e: ]) X, Z2 C' ]
00401A53  |.  C687 08010000 00 mov byte ptr ds:[edi+108],0
# F5 N, c8 i2 n# \2 W9 {. Y/ a00401A5A  |.  E8 51240000      call SL2.00403EB0                           ;  读取字体函数的开始四个字节
: s8 n4 n6 v; y00401A5F  |.  817C24 18 474D47>cmp dword ptr ss:[esp+18],42474D47          ;  此处可判断出开始的四个字节应该是魔幻数0 o. e- K- t; P8 w
+0 魔幻数1 s& \9 I8 c# q0 r
+4 段数,
2 V6 |% M* e; a* R( E# n# ]2 |& R) l下面开始是每段的头部' k' ~% s: t% q7 {5 ^
+46EE 正文
* m  \6 g* Q' i) O* ]/ v) b
0 X' x- O  _# v! v1 L; _0203DDE0  2F 45 58 54 44 41 54 41 53 46 4F 4E 54 2F 41 52  /EXTDATASFONT/AR
6 x3 L1 b0 b# g+ d0203DDF0  49 41 4C 20 31 31 2E 45 4E 00                    IAL 11.EN.! |+ L9 Z* P+ E' W4 h1 G
% S. H/ ?7 J! s) f, e3 i. ~3 M
0203DEE0              75 16 00 00 (EE 46) 00 00 2F 45 58 54      ..頕../EXT) D+ d8 G  u+ b. Y1 `
0203DEF0  44 41 54 41 53 46 4F 4E 54 2F 41 52 49 41 4C 20  DATASFONT/ARIAL
# \* }. U7 [) ^3 n3 k0203DF00  31 32 2E 45 4E 00                                12.EN.
5 s) [2 B, C; V. l# @
; E, D1 A  n# d, C7 x1 G0 z6 r上面表中的数据除了括号中的(EE 46),其余全部与解包后文件数据一致,0 ^. U( m/ K  p' R0 C' n
1675是这个段的长度,46EE是这个在文件中的偏移,每段偏移值的算法如下:) H7 e3 _: f' s
# F9 A6 m  `: Z! e" W' A5 q( e
00401AE0  |> /899401 08010000  /mov dword ptr ds:[ecx+eax+108],edx         ;  edx=46ee
4 R* y- Y( v% O5 y00401AE7  |. |8B06             |mov eax,dword ptr ds:[esi]                 ;  [esi]存放读取字符的地址
4 `: E" d7 H. y$ p: b, E! @6 f, W00401AE9  |. |039401 04010000  |add edx,dword ptr ds:[ecx+eax+104]
; R3 X$ g: e& z, A  a$ S! I00401AF0  |. |83C3 01          |add ebx,1$ }- r7 ]$ M  @, V0 S: T, B0 Q
00401AF3  |. |81C1 0C010000    |add ecx,10C4 ^& j4 v) ~8 D" J2 V4 V& Y
00401AF9  |. |3B5C24 14        |cmp ebx,dword ptr ss:[esp+14]              ;  [esp+14]=1C2
* h2 q& u8 x: L3 h/ H00401AFD  |.^\72 E1            \jb short SL2.00401AE0
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

沙发
发表于 2010-3-28 11:32 | 只看该作者
首先对楼主的大力支持表示非常感谢!) K1 P  h+ a% J% [
想问一下,通过以上分析,能得出什么阶段性的结论吗?
回复 支持 反对

使用道具 举报

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

使用道具 举报

地板
 楼主| 发表于 2010-3-28 12:06 | 只看该作者
Sl2fnt.dat文件格式分析如下:
4 s, _- g! W! g8 _+0 474D4742  这个魔幻数
& h- o% [* `# i3 S( E
3 J9 ?+ g  a# [' i1 I+4 C2010000  表示有01C2个文件
- q) e* g' V2 Y1 {3 f9 |( R6 j+ S$ u* k1 `+ E$ H
+8 2F4558544441544153464F4E542F415249414C2031312E454E00
4 x! l! N2 [; q! h; T4 x/EXTDATASFONT/ARIAL 11.EN.u: X6 m1 Q2 ^& z
这个应该是文件头部,ARIAL表示字体,EN表示英语 11表示字号9 Z' S% N: `3 o1 S. I' j2 z* J1 q

' S5 d; s0 i% n/ g5 M0 l+ N   751600 表示这个文件的大小% a  S- T/ k; ~$ ^

& P9 |6 o6 @) D  V5 z每个文件的偏移由上文中的最后那个函数得出
# Y$ p8 X- i5 D6 V9 v1 Z( r) h6 c! J! }" Z) F% N0 b* D
9 G8 U5 y: g+ Y9 f: k: r! N( k$ P
+46EE 此处开始是每个文件的正文
( Y  s5 s" F( g( ?# C$ o2 W% F" j# z$ i" D: h
如上面我举的这个例子,文件正文内容起始地址+46EE,2 h* B$ _) Y) }
结束地址为+(46EE+1675)
回复 支持 反对

使用道具 举报

5#
发表于 2010-3-28 12:11 | 只看该作者
这个其实不用分析,这个dat是个包文件,已经有解包器了啊。1 u; h- M' {" Q! h$ Y+ ^2 K- ~
需要分析的是里面解出来的字体文件。字体文件的magic number是XCPK.1 n+ i, S8 O  g' J: f& q

3 R' \# F; t8 W% X0 y9 D我想知道XCPK文件的结构。
回复 支持 反对

使用道具 举报

6#
发表于 2010-3-28 12:16 | 只看该作者
http://aluigi.altervista.org/papers.htm
0 j& Z, D! W2 v8 ?* `9 `4 M* \
) L) p1 ]( c: x$ ?这里有stilllife2 dat文件解包器,配合quickbms使用
回复 支持 反对

使用道具 举报

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

回 楼主(jinxin8866) 的帖子

写屏函数:
% W& O. D$ L/ }0 ]! b02A0EA4C  |> /8B00        |/mov eax,dword ptr ds:[eax]7 M6 W; g8 a3 K( d
02A0EA4E  |. |0FB70450    ||movzx eax,word ptr ds:[eax+edx*2]                    ;  [eax+edx*2]存放字符的UNICODE码. s: w8 ~' C! r' @: O3 Y
02A0EA52  |. |8B7C24 14   ||mov edi,dword ptr ss:[esp+14]4 @7 J) K) t- B% C' V5 h
02A0EA56  |. |8B7F 2C     ||mov edi,dword ptr ds:[edi+2C]
" }8 i7 z+ ]$ Y( d, {1 o02A0EA59  |. |8D04C0      ||lea eax,dword ptr ds:[eax+eax*8]5 ]" i2 b; V/ @0 N9 b9 x
02A0EA5C  |. |8D0487      ||lea eax,dword ptr ds:[edi+eax*4]                     ;  eax存放字符编码表- {) S3 Y/ o8 M
每个字符码表占24(16进制)个字节
& V9 W) n  G' U; [& p0 S( k02A0EA5F  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]. p# N8 A4 o8 ?+ ?% o: }7 S/ }
02A0EA63  |. |8D7C39 14   ||lea edi,dword ptr ds:[ecx+edi+14]                    ;  edi就是显存地址
# J$ \2 Q: x7 K% O  s5 g' [02A0EA67  |. |D940 04     ||fld dword ptr ds:[eax+4]+ ?/ e2 H1 ]* U- P, B! O5 Y
02A0EA6A  |. |83C2 01     ||add edx,1                                              字符个数加一
" O8 ^! G. u  A& G. h  l. Z02A0EA6D  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]7 W' M: M( S7 I$ s' y6 M: H. d& `
02A0EA71  |. |D900        ||fld dword ptr ds:[eax]3 o* l; j( \' R/ Y8 g
02A0EA73  |. |D91F        ||fstp dword ptr ds:[edi]                              ;  edi就是显存地址) ]) f: P% h9 G! Z6 e
每个字符占1C个字节,最后的四个字节都是一样的,可以认为是结束标志
) T3 Z3 d$ H) ~% |02A0EA75  |. |D94424 30   ||fld dword ptr ss:[esp+30]4 y$ w, u3 W, p- V
02A0EA79  |. |D95F 04     ||fstp dword ptr ds:[edi+4]
7 r9 v; A6 p1 _$ |/ ~% N7 s02A0EA7C  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]
+ e: e) r+ H$ [+ D$ S. K02A0EA80  |. |D940 04     ||fld dword ptr ds:[eax+4]; T- k- u/ K6 Z
02A0EA83  |. |8D7C39 30   ||lea edi,dword ptr ds:[ecx+edi+30]
  g, h! a9 }( Q# L- ^3 r02A0EA87  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]
2 w) y, V( S; F( K) A; M, l02A0EA8B  |. |D940 08     ||fld dword ptr ds:[eax+8]
; b! H( @. y2 a1 p$ e02A0EA8E  |. |D91F        ||fstp dword ptr ds:[edi]
9 v. V( H* L, t" d  o4 B+ F3 c! `02A0EA90  |. |D94424 30   ||fld dword ptr ss:[esp+30]
# E" U  i- W% J1 O02A0EA94  |. |D95F 04     ||fstp dword ptr ds:[edi+4]6 j! m4 ~$ g  I) E% ^8 H
02A0EA97  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]! I3 S+ m! }3 {6 t9 N9 M$ y
02A0EA9B  |. |D940 0C     ||fld dword ptr ds:[eax+C]
( `3 X; J# K* C$ ?# A/ v02A0EA9E  |. |8D7C39 4C   ||lea edi,dword ptr ds:[ecx+edi+4C]
4 t" t) u6 s. T# t1 f" E02A0EAA2  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]& N: u% \2 p) y
02A0EAA6  |. |D900        ||fld dword ptr ds:[eax]/ I9 ^: v* D+ q8 _! o7 D
02A0EAA8  |. |D91F        ||fstp dword ptr ds:[edi]
) {9 I4 s* G  p3 C3 ~02A0EAAA  |. |D94424 30   ||fld dword ptr ss:[esp+30]( J' i) L+ r, U' L( p# u8 I9 q+ a$ E
02A0EAAE  |. |D95F 04     ||fstp dword ptr ds:[edi+4]) ]7 ~, C- {5 B. P1 u
02A0EAB1  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]! |( L) c5 |" X
02A0EAB5  |. |D940 0C     ||fld dword ptr ds:[eax+C]5 S; l2 W* w5 h5 F+ q! y2 w- Z  l9 U
02A0EAB8  |. |8D7C39 68   ||lea edi,dword ptr ds:[ecx+edi+68]; C: {- Q( ^4 ?+ N! i
02A0EABC  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]! e) R- \5 r+ O$ N1 U, w
02A0EAC0  |. |83C1 70     ||add ecx,70
" s! ]1 N3 J) J+ D& g/ U02A0EAC3  |. |D940 08     ||fld dword ptr ds:[eax+8]
, E" ]* ?$ l' }3 O' r6 W' l02A0EAC6  |. |D91F        ||fstp dword ptr ds:[edi]
/ ]2 ?' T9 d7 _  P: X02A0EAC8  |. |D94424 30   ||fld dword ptr ss:[esp+30]
3 ~% I: q1 H3 I8 l  p- Z2 Z  g02A0EACC  |. |D95F 04     ||fstp dword ptr ds:[edi+4]+ n" Z# d4 B7 ?) B: W' U, s9 N3 Z6 r
02A0EACF  |. |8B46 58     ||mov eax,dword ptr ds:[esi+58]
7 g, y  d& N% q2 V+ f02A0EAD2  |. |03C3        ||add eax,ebx
% s, }) D8 @# F5 y02A0EAD4  |. |3B50 08     ||cmp edx,dword ptr ds:[eax+8]& a# {7 H2 g; @( O  p
02A0EAD7  |.^\\0F8C 6FFFFF>|\\jl xcDxShad.02A0EA4C$ ~! K" N9 ?% e
8 q5 t" M2 q4 P; D4 n' T% j
本游戏字符编码采用UNICODE,
: |4 m  h# x0 m& U* I0 A对字符码表的操作:! x- }. I; C; S* B3 o
10028807  |> /0FB702      /movzx eax,word ptr ds:[edx]        读字符的UNICODE码
" r" U5 n0 q2 g4 v7 ~. I1002880A  |. |8D04C0      |lea eax,dword ptr ds:[eax+eax*8]' \+ [$ e# i: I" x
1002880D  |. |8D0483      |lea eax,dword ptr ds:[ebx+eax*4]   根据UNICODE码求得字符码表的地址
7 J4 I. N* v' B6 }3 `10028810  |. |33C9        |xor ecx,ecx
! N/ x/ f" u% J) A  Q! l, X10028812  |. |DB40 20     |fild dword ptr ds:[eax+20]1 J0 T+ a9 f4 @1 \7 p! o
10028815  |. |D95C24 14   |fstp dword ptr ss:[esp+14]
1 f* x, u( ]4 @# U/ c10028819  |. |D94424 14   |fld dword ptr ss:[esp+14]
8 E7 l) }+ ^( C. b7 J1002881D  |. |D9C0        |fld st
* u. u6 C$ a3 L: ~1002881F  |. |D84E 14     |fmul dword ptr ds:[esi+14]
1 e6 K, Y6 C! j/ B10028822  |. |D94424 0C   |fld dword ptr ss:[esp+C]
/ h1 f) {' U( J9 g4 H. J  O10028826  |. |D9C0        |fld st) j  V$ {9 L+ h, O7 z/ J4 h( `
10028828  |. |DEC2        |faddp st(2),st
3 ^/ B/ ^# Y4 H2 f; y1002882A  |. |D9C9        |fxch st(1)
0 F+ ~9 @% H: Y& O4 S1002882C  |. |D95C24 14   |fstp dword ptr ss:[esp+14]$ D7 `2 Y& ~& u, _" K- x, A( J
10028830  |. |D8D3        |fcom st(3)
% s) [7 S* Z7 k4 r8 [10028832  |. |DFE0        |fstsw ax
5 F+ l3 g) A. I: N) r4 |10028834  |. |F6C4 01     |test ah,1
) ~4 j/ ^! E2 ~3 H& N2 E10028837  |. |74 2B       |je short xcEngine.10028864% @4 w( y9 C1 K1 A' O1 [
10028839  |. |D94424 14   |fld dword ptr ss:[esp+14]
2 \: t% G7 `* a4 k1002883D  |. |D8D3        |fcom st(3): x. c1 e; f) _' k6 Z8 n0 ?
1002883F  |. |DFE0        |fstsw ax
$ e7 A& B1 j0 r; _10028841  |. |F6C4 41     |test ah,41
3 Y0 \3 u. C, v) z4 B' `10028844  |. |7A 04       |jpe short xcEngine.1002884A8 |" T, C+ h/ r6 h( U& i3 F' l
10028846  |. |DDD8        |fstp st5 X( ~. Z* R7 a7 m5 [6 G4 y
10028848  |. |EB 1A       |jmp short xcEngine.10028864( t1 c( `! F# @" e
1002884A  |> |D9C9        |fxch st(1). [( d. f+ V( G" D# `6 c  w
1002884C  |. |D8D3        |fcom st(3)
) `. O0 A1 O/ }0 G6 G4 v1002884E  |. |DFE0        |fstsw ax
- Y' U4 d" J; u) q10028850  |. |F6C4 05     |test ah,5
$ K+ ~% ]1 R' |8 L4 S+ @10028853  |. |7A 04       |jpe short xcEngine.10028859
( D% T5 p8 P& D7 E) {10028855  |. |DDD9        |fstp st(1)
3 o9 o7 x" O) u& O0 l7 N- }10028857  |. |EB 0B       |jmp short xcEngine.100288642 C) n1 C' }) x4 r3 h9 ~0 h" e# |
10028859  |> |D9C9        |fxch st(1)
. i2 |5 q9 Q/ `0 M1002885B  |. |D8DC        |fcomp st(4)
; m- z- U. K9 h+ r7 e% Y' [: [) F1002885D  |. |DFE0        |fstsw ax: B, @2 r: R& e0 F( J7 v
1002885F  |. |F6C4 41     |test ah,41
9 m9 v' L3 {. f- d' ^. U10028862  |. |75 05       |jnz short xcEngine.10028869
" w2 D: ?6 ~% A! \5 c5 P3 A5 c10028864  |> |B9 01000000 |mov ecx,1' C- Z  E. @: i7 d# @% L
10028869  |> |85C9        |test ecx,ecx6 n5 t( ?6 G  p2 X: N8 _
1002886B  |. |8B4424 18   |mov eax,dword ptr ss:[esp+18]
: M5 [% t# j6 g5 t( Y3 v1002886F  |. |D940 14     |fld dword ptr ds:[eax+14]
, D. _. F, J& W- A8 ?4 ?( J9 l10028872  |. |DECA        |fmulp st(2),st
. x  V. a0 J% l+ m7 Q! y10028874  |. |DEC1        |faddp st(1),st
; ]/ n- n7 V6 @" Y+ E: ]10028876  |. |D95C24 0C   |fstp dword ptr ss:[esp+C]9 _* M8 _2 O3 G! ^9 R
1002887A  |. |75 05       |jnz short xcEngine.10028881* c2 y! J0 s" p. v1 I
1002887C  |. |834424 10 0>|add dword ptr ss:[esp+10],13 ~; G/ H. t. e; ~; c# d+ E
10028881  |> |83C2 02     |add edx,2
3 v' N! Z/ `' E8 @. h' D10028884  |. |83EF 01     |sub edi,1
0 k. R+ z2 w0 O& O4 g* j10028887  |.^\\0F85 7AFFFF>\\jnz xcEngine.10028807
% v9 i6 ^. K/ f$ Q% b由于算法采用了浮点数指令,本人不太懂,边学习边研究中。。。。。。。。。
回复 支持 反对

使用道具 举报

8#
发表于 2010-4-1 11:13 | 只看该作者
加油!UNICODE码内核的游戏?/ \7 t3 V6 r9 Z' O) R8 Y
看来汉化有希望啊。
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

回 8楼(shane007) 的帖子

找到了内存中字库的地址,可在下面这个位置下断,
1 y  [* A7 U' z2 j, ?; S3 X/ ]. S* a, W' {
02A0EA5C  |. |8D0487      ||lea eax,dword ptr ds:[edi+eax*4]                     ;  eax存放的就是字库的地址. |' h* V$ B+ |- l
这个字库不是点阵的,经过修改,字符的形状可发生变化,应该是矢量字库
回复 支持 反对

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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