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

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

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

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

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

关于静物2的分析

00403CE0  |> /3B96 10110000    /cmp edx,dword ptr ds:[esi+1110]
0 S/ c2 `* V# E, B: I/ G. k9 h' b00403CE6  |. |1BC9             |sbb ecx,ecx
4 U2 }) S' ^. @1 y00403CE8  |. |23D1             |and edx,ecx
* l5 F" x0 c9 G6 Y! j* Z8 w3 b00403CEA  |. |8B8E 0C110000    |mov ecx,dword ptr ds:[esi+110C]
) ^1 ]. z# \. D* E* f2 u0 Z00403CF0  |. |8A0C0A           |mov cl,byte ptr ds:[edx+ecx]) ^2 p% T2 F! E4 Q, D: K# N2 T
00403CF3  |. |3008             |xor byte ptr ds:[eax],cl                   ;  这个循环就是异或算法
4 Y7 v. H/ F, n& B, ^00403CF5  |. |83C2 01          |add edx,1) z3 t- M: I* o) I" p3 Z  g- o
00403CF8  |. |83C0 01          |add eax,1- b" D: t/ c$ w  a- f) G
00403CFB  |. |83EF 01          |sub edi,1+ U1 k5 y& ]% Z1 {
00403CFE  |.^\75 E0            \jnz short SL2.00403CE0
7 P/ u9 U7 Z+ x' m2 @* V6 p2 b) P1 e" J6 j% F. V

5 P# [8 b8 _& K8 w00401A42  |.  8D4C24 18        lea ecx,dword ptr ss:[esp+18]
# p$ N# {4 ?: s+ H1 u00401A46  |.  51               push ecx
# R9 _9 f# w  L' [00401A47  |.  8D4C24 24        lea ecx,dword ptr ss:[esp+24]- k6 n; K8 [! T- s% f7 }; u
00401A4B  |.  C68424 58110000 >mov byte ptr ss:[esp+1158],1+ Y: H  B% [9 g8 f7 _7 a4 G
00401A53  |.  C687 08010000 00 mov byte ptr ds:[edi+108],0
$ |& u: [+ [: ]4 u, M00401A5A  |.  E8 51240000      call SL2.00403EB0                           ;  读取字体函数的开始四个字节  v- C% |  G& [
00401A5F  |.  817C24 18 474D47>cmp dword ptr ss:[esp+18],42474D47          ;  此处可判断出开始的四个字节应该是魔幻数5 r8 b. T! U& Q
+0 魔幻数
5 f2 p  b5 Q6 s0 ^8 q) @+4 段数,2 g$ D: S& ]5 V7 F
下面开始是每段的头部
+ }1 C+ o; a* [) i8 p+46EE 正文7 r9 T$ i, v) Z5 \3 V6 c& H
) t8 H% q) J  c1 N" v
0203DDE0  2F 45 58 54 44 41 54 41 53 46 4F 4E 54 2F 41 52  /EXTDATASFONT/AR
* n  X0 ~; p; [9 n. d- u; u% L+ C) s% J- M0203DDF0  49 41 4C 20 31 31 2E 45 4E 00                    IAL 11.EN.. S5 _" H4 F8 r+ ?) |
! p+ l: L% [2 f1 j% y
0203DEE0              75 16 00 00 (EE 46) 00 00 2F 45 58 54      ..頕../EXT
1 [" R5 `6 l- }: z) k0203DEF0  44 41 54 41 53 46 4F 4E 54 2F 41 52 49 41 4C 20  DATASFONT/ARIAL; f) j0 J+ R3 ]
0203DF00  31 32 2E 45 4E 00                                12.EN.
! {8 l9 y: a! i- ]. F9 Y, u" l& N  T. n) t# }
上面表中的数据除了括号中的(EE 46),其余全部与解包后文件数据一致,
  i1 }) s, n7 F/ o3 D# D( O7 |1675是这个段的长度,46EE是这个在文件中的偏移,每段偏移值的算法如下:! m2 R) @& d; T% I0 V7 a

9 P  m! _% Q' n3 F# T9 m2 `00401AE0  |> /899401 08010000  /mov dword ptr ds:[ecx+eax+108],edx         ;  edx=46ee3 }" B& J$ N5 Y% r$ B" \
00401AE7  |. |8B06             |mov eax,dword ptr ds:[esi]                 ;  [esi]存放读取字符的地址" R, Q8 o( v; |9 F7 h* T9 T
00401AE9  |. |039401 04010000  |add edx,dword ptr ds:[ecx+eax+104]
1 N0 p" u- g1 i6 ]0 z! C00401AF0  |. |83C3 01          |add ebx,1
3 ^3 [% F7 I, X7 h7 ~00401AF3  |. |81C1 0C010000    |add ecx,10C3 f6 B! v0 V+ g3 p" G: @
00401AF9  |. |3B5C24 14        |cmp ebx,dword ptr ss:[esp+14]              ;  [esp+14]=1C29 r( h+ Y/ o2 p% G5 c) V8 t
00401AFD  |.^\72 E1            \jb short SL2.00401AE0
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

沙发
发表于 2010-3-28 11:32 | 只看该作者
首先对楼主的大力支持表示非常感谢!
) k# a- L7 @# T4 ^9 ?0 r# j想问一下,通过以上分析,能得出什么阶段性的结论吗?
回复 支持 反对

使用道具 举报

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

使用道具 举报

地板
 楼主| 发表于 2010-3-28 12:06 | 只看该作者
Sl2fnt.dat文件格式分析如下:6 k2 l$ B" S3 o2 p, p" b
+0 474D4742  这个魔幻数
+ t8 O* D7 a; J. L" a1 Q
1 e- u& t9 k8 a  G7 [8 \, z+4 C2010000  表示有01C2个文件5 O/ Y5 ^) s* J) s; P4 t

0 R+ Z3 n+ t9 w% X7 T% t1 U+8 2F4558544441544153464F4E542F415249414C2031312E454E00" ^) ^5 m$ [5 a
/EXTDATASFONT/ARIAL 11.EN.u  F6 _1 R, R9 c! N
这个应该是文件头部,ARIAL表示字体,EN表示英语 11表示字号1 p/ k* |& {' R9 j# C* C( t1 j2 q
) K* ^- |) @: ~
   751600 表示这个文件的大小+ z) `5 d8 v0 S9 `

/ t& ~& b( |/ u% z* e7 K每个文件的偏移由上文中的最后那个函数得出
5 ?5 J  S* f7 r3 i1 U- Y2 {7 k" F6 ^. c

" a4 i9 N0 S) C- a# R+46EE 此处开始是每个文件的正文2 O3 ~/ K; U& J' E) ?" R

# U; d( [4 g6 x- L$ P5 s( h2 f' m如上面我举的这个例子,文件正文内容起始地址+46EE,0 O% ^4 f- ~9 r0 i! z& H2 b+ v# v
结束地址为+(46EE+1675)
回复 支持 反对

使用道具 举报

5#
发表于 2010-3-28 12:11 | 只看该作者
这个其实不用分析,这个dat是个包文件,已经有解包器了啊。! L5 G' W5 G( \/ Y' ^4 g
需要分析的是里面解出来的字体文件。字体文件的magic number是XCPK.
# h/ ?# o2 y) V& Y! c7 i$ }: ~0 J/ x" n8 ]; p0 t; z* k3 k/ D
我想知道XCPK文件的结构。
回复 支持 反对

使用道具 举报

6#
发表于 2010-3-28 12:16 | 只看该作者
http://aluigi.altervista.org/papers.htm: I) p# u; r# F: N6 L6 l$ B

2 [% J5 _! D4 M这里有stilllife2 dat文件解包器,配合quickbms使用
回复 支持 反对

使用道具 举报

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

回 楼主(jinxin8866) 的帖子

写屏函数:7 t8 v. @6 a( p- J1 O. i
02A0EA4C  |> /8B00        |/mov eax,dword ptr ds:[eax]
  d, o1 q+ ^, ~0 w" S' L02A0EA4E  |. |0FB70450    ||movzx eax,word ptr ds:[eax+edx*2]                    ;  [eax+edx*2]存放字符的UNICODE码
+ u* M5 q3 r/ H3 ]( C; c  ~02A0EA52  |. |8B7C24 14   ||mov edi,dword ptr ss:[esp+14]2 A; E$ A1 b$ W" N! b4 r4 t
02A0EA56  |. |8B7F 2C     ||mov edi,dword ptr ds:[edi+2C]4 p+ ~6 C" g& N; ]; i
02A0EA59  |. |8D04C0      ||lea eax,dword ptr ds:[eax+eax*8]$ d- H; B5 j6 i/ Q, C
02A0EA5C  |. |8D0487      ||lea eax,dword ptr ds:[edi+eax*4]                     ;  eax存放字符编码表) \5 ?( |" O+ n7 K  ]5 L
每个字符码表占24(16进制)个字节/ P6 P: v. v; ^# Y' M2 L7 s2 b6 r
02A0EA5F  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]
) i8 O* h5 |; W' o  V02A0EA63  |. |8D7C39 14   ||lea edi,dword ptr ds:[ecx+edi+14]                    ;  edi就是显存地址
5 h6 g6 d0 x5 n; z* c$ X; J4 i02A0EA67  |. |D940 04     ||fld dword ptr ds:[eax+4]
& Q! z- g* ^: c! Y: X$ ^02A0EA6A  |. |83C2 01     ||add edx,1                                              字符个数加一2 o0 U/ I8 {: A5 L; X6 z# `
02A0EA6D  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]
/ _% [0 i$ i# v% ?02A0EA71  |. |D900        ||fld dword ptr ds:[eax]! L. }& U& x6 ?$ m( ?
02A0EA73  |. |D91F        ||fstp dword ptr ds:[edi]                              ;  edi就是显存地址
, i) t) ^. w" ~每个字符占1C个字节,最后的四个字节都是一样的,可以认为是结束标志
: m1 I- E( n5 h" G0 h02A0EA75  |. |D94424 30   ||fld dword ptr ss:[esp+30]1 P) i$ D$ b" B7 N7 P
02A0EA79  |. |D95F 04     ||fstp dword ptr ds:[edi+4]
9 Y( }7 g' [' P02A0EA7C  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]
# E% Z! t, ~  y. V02A0EA80  |. |D940 04     ||fld dword ptr ds:[eax+4]8 S) ]5 ], s% ]7 u
02A0EA83  |. |8D7C39 30   ||lea edi,dword ptr ds:[ecx+edi+30]: p1 j3 I5 o1 u$ A9 _0 J' f
02A0EA87  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]
- K, K0 ^& t, b- t, U! a3 b02A0EA8B  |. |D940 08     ||fld dword ptr ds:[eax+8]0 e% g8 y& N$ E1 Y" p+ a0 F& i* q
02A0EA8E  |. |D91F        ||fstp dword ptr ds:[edi]# Q  W0 C- V( s+ L/ B: q! p& y
02A0EA90  |. |D94424 30   ||fld dword ptr ss:[esp+30]
7 k, b3 S" q& j$ Q! ~02A0EA94  |. |D95F 04     ||fstp dword ptr ds:[edi+4]: K# t7 j1 o6 z: g( v' C* {* a
02A0EA97  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]9 w7 w3 d/ B! o' U, Y) w+ `
02A0EA9B  |. |D940 0C     ||fld dword ptr ds:[eax+C]& ]1 Y* a+ j# ~8 x3 [( T
02A0EA9E  |. |8D7C39 4C   ||lea edi,dword ptr ds:[ecx+edi+4C]
* D+ F: Y$ K: n/ [02A0EAA2  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]
/ @$ z/ c5 K/ S* ?# ?; v& a02A0EAA6  |. |D900        ||fld dword ptr ds:[eax]( V+ x8 q* o  a$ q. v
02A0EAA8  |. |D91F        ||fstp dword ptr ds:[edi]
/ F7 I. g) H" }6 J7 t02A0EAAA  |. |D94424 30   ||fld dword ptr ss:[esp+30]
- b8 K1 e5 H5 f+ P3 B0 D/ W02A0EAAE  |. |D95F 04     ||fstp dword ptr ds:[edi+4]  `" k5 j8 Z! T1 ]( Q3 f2 F! s
02A0EAB1  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]
1 V. @  g( U  Z# K6 h8 U02A0EAB5  |. |D940 0C     ||fld dword ptr ds:[eax+C]
- W$ s0 t) D% k4 _+ x5 b/ y02A0EAB8  |. |8D7C39 68   ||lea edi,dword ptr ds:[ecx+edi+68]" F0 c2 h  z2 Z5 a0 W' Y* ?$ @
02A0EABC  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]- P& [2 A! J: x6 z& |, W  p1 R3 p! g
02A0EAC0  |. |83C1 70     ||add ecx,705 G/ D+ y# B5 H7 N1 y+ ~+ R! Y
02A0EAC3  |. |D940 08     ||fld dword ptr ds:[eax+8]5 ^' ~7 h8 V. J5 r
02A0EAC6  |. |D91F        ||fstp dword ptr ds:[edi]
% T( l7 {# M  T02A0EAC8  |. |D94424 30   ||fld dword ptr ss:[esp+30]: |. ^* C( [7 J" Z
02A0EACC  |. |D95F 04     ||fstp dword ptr ds:[edi+4]
/ g2 S) V4 f7 y9 `( i02A0EACF  |. |8B46 58     ||mov eax,dword ptr ds:[esi+58]8 M9 n# L4 I( B" l; r
02A0EAD2  |. |03C3        ||add eax,ebx
# J/ N- u0 A9 `7 p; T. L02A0EAD4  |. |3B50 08     ||cmp edx,dword ptr ds:[eax+8]
' }- q' x4 J, v4 z2 u  D, |02A0EAD7  |.^\\0F8C 6FFFFF>|\\jl xcDxShad.02A0EA4C9 H! {/ [/ q1 |; P( S
& N* g9 T% T9 L
本游戏字符编码采用UNICODE,
4 U+ W+ d1 {: h; X对字符码表的操作:# S+ _' p* ]; t* K' Y3 \. J
10028807  |> /0FB702      /movzx eax,word ptr ds:[edx]        读字符的UNICODE码# U* p8 b9 ~0 ?
1002880A  |. |8D04C0      |lea eax,dword ptr ds:[eax+eax*8]
3 n: W9 ]6 O7 {2 x) }/ z1002880D  |. |8D0483      |lea eax,dword ptr ds:[ebx+eax*4]   根据UNICODE码求得字符码表的地址: ~" i: o# z' v! E3 J5 I: \
10028810  |. |33C9        |xor ecx,ecx, x* M6 G; J8 i9 i' Q+ Y: Z
10028812  |. |DB40 20     |fild dword ptr ds:[eax+20]
6 {7 [# ]8 x- ]5 ^( m! E+ h10028815  |. |D95C24 14   |fstp dword ptr ss:[esp+14]& K3 X$ [1 V7 u! \% `. {
10028819  |. |D94424 14   |fld dword ptr ss:[esp+14]7 g6 E: X/ n. d1 ^$ `
1002881D  |. |D9C0        |fld st
/ S. G& r: l$ ~3 I1002881F  |. |D84E 14     |fmul dword ptr ds:[esi+14]
; V0 V4 r% J) \( w/ l10028822  |. |D94424 0C   |fld dword ptr ss:[esp+C]
/ _2 U. m, m, x8 H4 {$ q10028826  |. |D9C0        |fld st# I$ k+ \2 {  l4 p: U" q
10028828  |. |DEC2        |faddp st(2),st( s9 E+ d+ P; p8 w+ d! I( {4 |
1002882A  |. |D9C9        |fxch st(1)
+ E$ B) x) V6 y  }& L* v3 T1002882C  |. |D95C24 14   |fstp dword ptr ss:[esp+14]7 C1 ^$ D. {" a* A
10028830  |. |D8D3        |fcom st(3)0 J  N. j6 r2 A; X) m5 K5 ^$ \
10028832  |. |DFE0        |fstsw ax; V+ Z8 |; X1 d2 P" P7 z
10028834  |. |F6C4 01     |test ah,1
# V9 V3 L+ y" T+ y$ b  }' w! k10028837  |. |74 2B       |je short xcEngine.10028864; h- E) n, ~4 T; e/ {" X8 K
10028839  |. |D94424 14   |fld dword ptr ss:[esp+14]: f3 k6 t# |/ H: W  v5 \! |$ d/ j
1002883D  |. |D8D3        |fcom st(3)" L2 N; b" B* B
1002883F  |. |DFE0        |fstsw ax+ y8 {4 {1 Q' f. U( [" [" H/ z0 H
10028841  |. |F6C4 41     |test ah,41
4 U- P, o3 p2 e& Q10028844  |. |7A 04       |jpe short xcEngine.1002884A( v$ d) Y6 X1 {- C' d' X
10028846  |. |DDD8        |fstp st1 L2 J0 L- I3 s/ K& u( v- J
10028848  |. |EB 1A       |jmp short xcEngine.10028864
7 `; H8 g$ M1 E9 H. W1002884A  |> |D9C9        |fxch st(1)8 ~' c. V) n, D# ?: s; v
1002884C  |. |D8D3        |fcom st(3)
: \# x0 Q; W( d8 M. ]1002884E  |. |DFE0        |fstsw ax2 o& r6 B( [( n' I; B' {
10028850  |. |F6C4 05     |test ah,5
$ S* r3 I' G+ B0 A- o10028853  |. |7A 04       |jpe short xcEngine.10028859; i5 R7 ^$ [/ X% N# @- k
10028855  |. |DDD9        |fstp st(1)+ r- ~0 _. p) T( u
10028857  |. |EB 0B       |jmp short xcEngine.10028864
6 W$ Y# j+ J2 f% E10028859  |> |D9C9        |fxch st(1)
+ D$ @( L9 z% [7 ?$ a# d" j1002885B  |. |D8DC        |fcomp st(4)
- J) k  |4 g. I. ]  {1002885D  |. |DFE0        |fstsw ax/ S+ S. z& w( Y7 @
1002885F  |. |F6C4 41     |test ah,41
6 v$ r% ^: m/ B# }10028862  |. |75 05       |jnz short xcEngine.10028869
) {0 g8 L3 W1 ^6 L" n( ]1 E10028864  |> |B9 01000000 |mov ecx,1: o. X: V* Z& P8 U
10028869  |> |85C9        |test ecx,ecx
, a  ~% O. \0 N9 k- [1002886B  |. |8B4424 18   |mov eax,dword ptr ss:[esp+18]
* g/ H( s/ l& |5 ~1002886F  |. |D940 14     |fld dword ptr ds:[eax+14]8 }9 |! X* S4 D! K  A' F9 C* o4 J
10028872  |. |DECA        |fmulp st(2),st; N" m7 n2 z4 ]. O6 Y0 N9 V* i
10028874  |. |DEC1        |faddp st(1),st
8 e$ q, t# u: E# }! x10028876  |. |D95C24 0C   |fstp dword ptr ss:[esp+C]
' R4 l$ z5 ~# c" N% a3 y, O3 E! ?1 A, Y1002887A  |. |75 05       |jnz short xcEngine.100288810 l; ?7 `) E' g
1002887C  |. |834424 10 0>|add dword ptr ss:[esp+10],1, ^' t- F# ]7 h- E: i& z
10028881  |> |83C2 02     |add edx,24 ~" i/ Z" ?  Z4 Y: d) I
10028884  |. |83EF 01     |sub edi,1  E+ C$ G) b, P- Q
10028887  |.^\\0F85 7AFFFF>\\jnz xcEngine.100288070 i* s% l" y0 S
由于算法采用了浮点数指令,本人不太懂,边学习边研究中。。。。。。。。。
回复 支持 反对

使用道具 举报

8#
发表于 2010-4-1 11:13 | 只看该作者
加油!UNICODE码内核的游戏?" o% ?+ E0 R0 d0 C$ l
看来汉化有希望啊。
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

回 8楼(shane007) 的帖子

找到了内存中字库的地址,可在下面这个位置下断,3 S' {3 k; \  i( q2 r' \; x
' t5 ^7 d  A7 c+ w# J
02A0EA5C  |. |8D0487      ||lea eax,dword ptr ds:[edi+eax*4]                     ;  eax存放的就是字库的地址  Q4 [* Q% m/ M
这个字库不是点阵的,经过修改,字符的形状可发生变化,应该是矢量字库
回复 支持 反对

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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