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

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

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

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

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

关于静物2的分析

00403CE0  |> /3B96 10110000    /cmp edx,dword ptr ds:[esi+1110]
  O2 s) b& F+ h+ Q$ ^8 y00403CE6  |. |1BC9             |sbb ecx,ecx* a/ w  ]$ T% ?0 n" C
00403CE8  |. |23D1             |and edx,ecx% M: b7 k/ o$ _. ^/ ^
00403CEA  |. |8B8E 0C110000    |mov ecx,dword ptr ds:[esi+110C]+ A1 T- {% ~2 x1 c7 t1 A1 f
00403CF0  |. |8A0C0A           |mov cl,byte ptr ds:[edx+ecx]9 R% T( t! S$ N
00403CF3  |. |3008             |xor byte ptr ds:[eax],cl                   ;  这个循环就是异或算法1 N5 Y" n1 q5 X; `3 f
00403CF5  |. |83C2 01          |add edx,1/ D3 F( l4 k6 q0 U7 h' ~
00403CF8  |. |83C0 01          |add eax,1
7 ~1 K6 T  c7 @5 d00403CFB  |. |83EF 01          |sub edi,1
/ G7 U3 l8 X. a1 [00403CFE  |.^\75 E0            \jnz short SL2.00403CE0% O0 {8 C# b) ]3 u$ z. v/ i5 G' V

/ l, _+ w7 d! J" n& W6 |$ K* d, p, Z9 y& t
00401A42  |.  8D4C24 18        lea ecx,dword ptr ss:[esp+18]8 Q3 ~7 l: S3 h, y8 I
00401A46  |.  51               push ecx
" {2 L9 q" n8 h0 g0 u00401A47  |.  8D4C24 24        lea ecx,dword ptr ss:[esp+24]
$ c) x: U# e* n00401A4B  |.  C68424 58110000 >mov byte ptr ss:[esp+1158],1
4 o; [1 {' u. G7 n0 n00401A53  |.  C687 08010000 00 mov byte ptr ds:[edi+108],04 F. [* p* i* ~% n+ [4 V4 t
00401A5A  |.  E8 51240000      call SL2.00403EB0                           ;  读取字体函数的开始四个字节
4 c4 {! Q* r1 o. H00401A5F  |.  817C24 18 474D47>cmp dword ptr ss:[esp+18],42474D47          ;  此处可判断出开始的四个字节应该是魔幻数
' |3 J; J# K( O- g3 K* }3 @/ r+0 魔幻数
" |4 @& L# D2 O+4 段数,
0 j& u$ {- X  M下面开始是每段的头部
; s; X* [7 ?/ Z6 k& q0 z9 j" d) t+46EE 正文
- E& R* Z6 v8 p7 ?% k- s& \; [  V' J
0203DDE0  2F 45 58 54 44 41 54 41 53 46 4F 4E 54 2F 41 52  /EXTDATASFONT/AR
' H7 ]9 I7 h  c* g0203DDF0  49 41 4C 20 31 31 2E 45 4E 00                    IAL 11.EN.
- B7 K/ k1 ?( \% c7 l* G+ X1 q/ K# \' t+ z7 p. Y$ S
0203DEE0              75 16 00 00 (EE 46) 00 00 2F 45 58 54      ..頕../EXT
" r% c( K4 W, ^6 q( C; U% y1 v0203DEF0  44 41 54 41 53 46 4F 4E 54 2F 41 52 49 41 4C 20  DATASFONT/ARIAL
- y1 I- n" l; p. T2 p3 U8 `2 H0203DF00  31 32 2E 45 4E 00                                12.EN.
5 K5 J7 E3 B) ]: q* c, \; r/ O# e& k# C# Y
上面表中的数据除了括号中的(EE 46),其余全部与解包后文件数据一致,
; j+ x5 ~- r+ T( c1675是这个段的长度,46EE是这个在文件中的偏移,每段偏移值的算法如下:- k; I8 X- ?+ [: x+ }
! O0 _  {9 x  I( |) p" W0 A7 F) g
00401AE0  |> /899401 08010000  /mov dword ptr ds:[ecx+eax+108],edx         ;  edx=46ee# i2 X2 J3 f) C9 j6 v) V7 T
00401AE7  |. |8B06             |mov eax,dword ptr ds:[esi]                 ;  [esi]存放读取字符的地址) M: ~. {; H3 k8 S6 p
00401AE9  |. |039401 04010000  |add edx,dword ptr ds:[ecx+eax+104], l) U/ H$ P4 b+ i* Z. y$ O
00401AF0  |. |83C3 01          |add ebx,1
7 p& _( E( H/ [- F3 B9 s00401AF3  |. |81C1 0C010000    |add ecx,10C
7 X: H9 b% r5 l: L" [00401AF9  |. |3B5C24 14        |cmp ebx,dword ptr ss:[esp+14]              ;  [esp+14]=1C25 U9 |( K, [+ w: Z( v- i9 a
00401AFD  |.^\72 E1            \jb short SL2.00401AE0
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

沙发
发表于 2010-3-28 11:32 | 只看该作者
首先对楼主的大力支持表示非常感谢!
6 \% E! o! c; Q2 A) f% V& k0 ]想问一下,通过以上分析,能得出什么阶段性的结论吗?
回复 支持 反对

使用道具 举报

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

使用道具 举报

地板
 楼主| 发表于 2010-3-28 12:06 | 只看该作者
Sl2fnt.dat文件格式分析如下:
0 j  Y, f2 i2 z: [  D% ?$ n+0 474D4742  这个魔幻数
4 M8 Q( ~1 F& }4 M9 n* B3 p
! |' L4 H. T; @5 n' g+ z( p' T+4 C2010000  表示有01C2个文件# Z/ K8 O$ Q' T, J8 f
+ [( U7 B+ S; s/ ^- N
+8 2F4558544441544153464F4E542F415249414C2031312E454E00
8 X$ T0 Z- |& Y3 D% Q0 B8 ?; g/EXTDATASFONT/ARIAL 11.EN.u
; n8 F/ V4 m$ g# v/ ]这个应该是文件头部,ARIAL表示字体,EN表示英语 11表示字号
& l0 y9 P7 f9 o& @
: ^3 N, u1 z3 @9 J) y/ A1 z/ `$ B! e   751600 表示这个文件的大小
* r6 C5 i. O+ E  k% `
. r7 m2 B. ^) B5 ]& f每个文件的偏移由上文中的最后那个函数得出
. g& q+ J/ h- M9 T% ]; P3 X8 j+ x) b0 Q6 v0 R2 O

1 e. l5 \7 o2 _' @, y$ Y4 m" x+46EE 此处开始是每个文件的正文" e* b/ ^% f% k5 Z1 Y3 H" w
8 S. J3 ^7 h5 H( \; G' k+ B
如上面我举的这个例子,文件正文内容起始地址+46EE,
2 h3 B8 h( U/ l2 [# {/ M! L# Z结束地址为+(46EE+1675)
回复 支持 反对

使用道具 举报

5#
发表于 2010-3-28 12:11 | 只看该作者
这个其实不用分析,这个dat是个包文件,已经有解包器了啊。# w% ~3 b7 `& [% k
需要分析的是里面解出来的字体文件。字体文件的magic number是XCPK.. T0 ~; B1 o5 G9 N

; N0 y- L( `$ t: a7 ]我想知道XCPK文件的结构。
回复 支持 反对

使用道具 举报

6#
发表于 2010-3-28 12:16 | 只看该作者
http://aluigi.altervista.org/papers.htm
, r5 J. W0 e5 E0 w9 d
/ c1 ]; z1 l- b) L这里有stilllife2 dat文件解包器,配合quickbms使用
回复 支持 反对

使用道具 举报

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

回 楼主(jinxin8866) 的帖子

写屏函数:% ]) d! H! \, J7 T
02A0EA4C  |> /8B00        |/mov eax,dword ptr ds:[eax]
& y" u0 o+ E4 C$ C02A0EA4E  |. |0FB70450    ||movzx eax,word ptr ds:[eax+edx*2]                    ;  [eax+edx*2]存放字符的UNICODE码9 Y' ?; f' j% i9 M2 T; |* O
02A0EA52  |. |8B7C24 14   ||mov edi,dword ptr ss:[esp+14]- X) k" z* }) f) b- G6 l
02A0EA56  |. |8B7F 2C     ||mov edi,dword ptr ds:[edi+2C]" k/ ?" |  S. L5 k2 n, k
02A0EA59  |. |8D04C0      ||lea eax,dword ptr ds:[eax+eax*8]' M; F) a, f2 j6 M
02A0EA5C  |. |8D0487      ||lea eax,dword ptr ds:[edi+eax*4]                     ;  eax存放字符编码表2 a8 Y) \% s; }! |& K8 P9 [
每个字符码表占24(16进制)个字节
# w. n6 l# @, I1 I02A0EA5F  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]
; J1 p2 m( D5 P+ K7 a+ y) F02A0EA63  |. |8D7C39 14   ||lea edi,dword ptr ds:[ecx+edi+14]                    ;  edi就是显存地址  L) }0 T1 F9 @
02A0EA67  |. |D940 04     ||fld dword ptr ds:[eax+4]
# K- _& {7 v- E2 X  q) t02A0EA6A  |. |83C2 01     ||add edx,1                                              字符个数加一/ l$ y, w- j9 H( U
02A0EA6D  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]6 h/ j8 D+ e6 }" i) _+ O; ], [
02A0EA71  |. |D900        ||fld dword ptr ds:[eax]+ {* \+ i* i7 ]+ C7 ~+ w
02A0EA73  |. |D91F        ||fstp dword ptr ds:[edi]                              ;  edi就是显存地址
3 j3 J' d, e" j( k  V1 o每个字符占1C个字节,最后的四个字节都是一样的,可以认为是结束标志
8 N8 |, I$ {# h, R02A0EA75  |. |D94424 30   ||fld dword ptr ss:[esp+30]) j  h& K, |* v: L8 b6 F
02A0EA79  |. |D95F 04     ||fstp dword ptr ds:[edi+4]
  }5 Z' D" o* L02A0EA7C  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]( c% h1 r$ _1 u. v4 ~
02A0EA80  |. |D940 04     ||fld dword ptr ds:[eax+4]
2 D' k: B2 y% \7 e( k1 J; `02A0EA83  |. |8D7C39 30   ||lea edi,dword ptr ds:[ecx+edi+30]
" K, E8 N( m+ i- y, P% B0 W- ?* G02A0EA87  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]* `. ~! c5 G% w6 i; `* {2 X* ~" p
02A0EA8B  |. |D940 08     ||fld dword ptr ds:[eax+8]- W0 P. D$ J- I# _' ]5 T
02A0EA8E  |. |D91F        ||fstp dword ptr ds:[edi]! V$ ^/ _- m3 |7 ^
02A0EA90  |. |D94424 30   ||fld dword ptr ss:[esp+30]
+ ~; n; F, k/ |- I, ^1 a. f6 z02A0EA94  |. |D95F 04     ||fstp dword ptr ds:[edi+4]
) _  e; [- X5 F02A0EA97  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]
$ S- Y$ {0 Z7 v5 B  E2 I02A0EA9B  |. |D940 0C     ||fld dword ptr ds:[eax+C]
5 l9 h% t% A- X& H* U02A0EA9E  |. |8D7C39 4C   ||lea edi,dword ptr ds:[ecx+edi+4C]" @$ u. s0 c% z9 k5 @
02A0EAA2  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]( i8 }- u* b6 p- E
02A0EAA6  |. |D900        ||fld dword ptr ds:[eax]
7 u: q( O! K- W02A0EAA8  |. |D91F        ||fstp dword ptr ds:[edi]( U( `, `$ w# }  k
02A0EAAA  |. |D94424 30   ||fld dword ptr ss:[esp+30]+ K0 _$ c3 S& \6 I' c  r
02A0EAAE  |. |D95F 04     ||fstp dword ptr ds:[edi+4]+ |( k3 V; c' D: N3 j& h
02A0EAB1  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]
/ }4 x5 t2 H$ b$ `02A0EAB5  |. |D940 0C     ||fld dword ptr ds:[eax+C]& Y( r4 p5 O# X3 }+ E8 y
02A0EAB8  |. |8D7C39 68   ||lea edi,dword ptr ds:[ecx+edi+68]
! s! f( ^4 @7 _1 }" e% q02A0EABC  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]
- V: G$ o9 \2 q+ o02A0EAC0  |. |83C1 70     ||add ecx,70
' r) D: P1 K/ C02A0EAC3  |. |D940 08     ||fld dword ptr ds:[eax+8]
% w) Q/ C" G' |& S( N3 p7 l) m( V02A0EAC6  |. |D91F        ||fstp dword ptr ds:[edi]
% E  A* p. ]' W- K  n" G  t! x1 l02A0EAC8  |. |D94424 30   ||fld dword ptr ss:[esp+30]9 p1 b7 D& A7 b6 f1 s( C( U- P
02A0EACC  |. |D95F 04     ||fstp dword ptr ds:[edi+4]
% t- }' V5 R+ F& _02A0EACF  |. |8B46 58     ||mov eax,dword ptr ds:[esi+58]
7 X; V1 W/ P7 t& {02A0EAD2  |. |03C3        ||add eax,ebx2 X% h, q7 R. s; b) Z9 E! i; z
02A0EAD4  |. |3B50 08     ||cmp edx,dword ptr ds:[eax+8]
2 u* m, {& q4 Z( D5 k3 ^- Y3 s02A0EAD7  |.^\\0F8C 6FFFFF>|\\jl xcDxShad.02A0EA4C
1 a% ~0 f3 \; K
# I/ O) E- b8 I. I. b5 J本游戏字符编码采用UNICODE,
- [1 p. V9 s( ?( I. k! h6 C6 N& l对字符码表的操作:
9 p# n" l" A5 e- C9 f10028807  |> /0FB702      /movzx eax,word ptr ds:[edx]        读字符的UNICODE码* K( e3 f% E7 ^5 q
1002880A  |. |8D04C0      |lea eax,dword ptr ds:[eax+eax*8]
  K# Y0 n% c) H. K: q1002880D  |. |8D0483      |lea eax,dword ptr ds:[ebx+eax*4]   根据UNICODE码求得字符码表的地址. F5 W- ?: M: c" I- z; q: O
10028810  |. |33C9        |xor ecx,ecx
5 R+ ^6 B" z1 F4 Z) E10028812  |. |DB40 20     |fild dword ptr ds:[eax+20]" T# g" p2 r( {! _$ \
10028815  |. |D95C24 14   |fstp dword ptr ss:[esp+14]
( j" M& t- v9 V10028819  |. |D94424 14   |fld dword ptr ss:[esp+14]. t( h9 H9 x" }. G* v, c. i9 O1 }; j
1002881D  |. |D9C0        |fld st& e; |5 p" `8 a: R5 C7 d
1002881F  |. |D84E 14     |fmul dword ptr ds:[esi+14]
0 R. z" u. W7 b) N# m10028822  |. |D94424 0C   |fld dword ptr ss:[esp+C]
; `5 B8 w& Z( C: G" [10028826  |. |D9C0        |fld st
1 z3 Q( C* ~0 }10028828  |. |DEC2        |faddp st(2),st
* S2 ?1 y. m, G1002882A  |. |D9C9        |fxch st(1)
- T! W7 X2 A! B& A% D: _0 j1002882C  |. |D95C24 14   |fstp dword ptr ss:[esp+14]
9 }& [2 f/ a& r4 S10028830  |. |D8D3        |fcom st(3)6 d' T* i3 X$ D
10028832  |. |DFE0        |fstsw ax% X; h3 i; h$ W: e0 o& X/ v9 Z
10028834  |. |F6C4 01     |test ah,1# X* L; \. C" R/ f" O. @: u4 {
10028837  |. |74 2B       |je short xcEngine.10028864
% r# S2 t& L- j2 z10028839  |. |D94424 14   |fld dword ptr ss:[esp+14]7 F0 f. L9 z4 k. Z
1002883D  |. |D8D3        |fcom st(3)5 U8 U) `. B8 E4 [% u; Q( m5 `$ c# h
1002883F  |. |DFE0        |fstsw ax: P$ c6 u8 p/ i
10028841  |. |F6C4 41     |test ah,41
! f6 }& }3 v1 I9 O- y10028844  |. |7A 04       |jpe short xcEngine.1002884A3 w+ _0 R/ X8 Y$ p4 r* {8 p" s+ e9 T
10028846  |. |DDD8        |fstp st, Y# Q. M" \3 A" G0 \. V9 \
10028848  |. |EB 1A       |jmp short xcEngine.10028864
% V' c* ?) s" `8 R# ]" h1002884A  |> |D9C9        |fxch st(1)
4 m, \' h; P2 @" ^1002884C  |. |D8D3        |fcom st(3)
* S+ `+ I' p% J9 s4 n6 |& T1002884E  |. |DFE0        |fstsw ax1 L& k: p8 {# @3 X# Z) B
10028850  |. |F6C4 05     |test ah,5  p* `. z. C0 l! ]' b( M
10028853  |. |7A 04       |jpe short xcEngine.10028859* z' a4 Y! ]- @; A) \) ]
10028855  |. |DDD9        |fstp st(1)
; l! v: Z- j5 S. u% r7 G1 U10028857  |. |EB 0B       |jmp short xcEngine.10028864
& L# r" G, S6 h8 ~& @10028859  |> |D9C9        |fxch st(1)
" E, w. _+ Q6 z: G+ n1002885B  |. |D8DC        |fcomp st(4)
( |+ f9 l+ m% N( D# B2 R& K1002885D  |. |DFE0        |fstsw ax
. _/ H$ F1 u" ]. D) h# B# z- @0 X. |1002885F  |. |F6C4 41     |test ah,41/ f' U! {+ ^) u# t( I# K
10028862  |. |75 05       |jnz short xcEngine.10028869% |, L3 \1 B) l" t8 A: a& C
10028864  |> |B9 01000000 |mov ecx,1
/ w. h# z3 A/ k' [8 x10028869  |> |85C9        |test ecx,ecx9 J6 N6 O$ J  |1 u
1002886B  |. |8B4424 18   |mov eax,dword ptr ss:[esp+18]
/ h. `: L5 R* u! i( b, f3 N& C% L! z1002886F  |. |D940 14     |fld dword ptr ds:[eax+14]
, O3 G+ G: e' U( W4 \3 F10028872  |. |DECA        |fmulp st(2),st
) J# {, i: }' r10028874  |. |DEC1        |faddp st(1),st
- m: E  e/ y% A! U10028876  |. |D95C24 0C   |fstp dword ptr ss:[esp+C]
3 m8 i" C* @% n1002887A  |. |75 05       |jnz short xcEngine.10028881
6 }% p1 {7 X3 n1002887C  |. |834424 10 0>|add dword ptr ss:[esp+10],1
0 h, |/ g  c; z: ]7 l  m8 J" Z0 \10028881  |> |83C2 02     |add edx,2
  Z! d/ O7 c& p8 s% i5 V# \* v10028884  |. |83EF 01     |sub edi,15 M- u7 \- t( S- ]% Z% ~! z- ~8 i
10028887  |.^\\0F85 7AFFFF>\\jnz xcEngine.100288073 [0 j& S9 ~0 e  J5 {2 W
由于算法采用了浮点数指令,本人不太懂,边学习边研究中。。。。。。。。。
回复 支持 反对

使用道具 举报

8#
发表于 2010-4-1 11:13 | 只看该作者
加油!UNICODE码内核的游戏?! V0 Z- @  ^+ G5 ~) R6 H
看来汉化有希望啊。
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

回 8楼(shane007) 的帖子

找到了内存中字库的地址,可在下面这个位置下断,
8 M9 d! K4 h0 q! _) D" i
" {, y% ^9 \! Z& ?6 q0 t02A0EA5C  |. |8D0487      ||lea eax,dword ptr ds:[edi+eax*4]                     ;  eax存放的就是字库的地址
- P3 F, w  C' P& Z9 l. F这个字库不是点阵的,经过修改,字符的形状可发生变化,应该是矢量字库
回复 支持 反对

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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