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

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

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

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

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

关于静物2的分析

00403CE0  |> /3B96 10110000    /cmp edx,dword ptr ds:[esi+1110]
3 Y/ e4 \$ |/ W' Y* d. a" k% ~00403CE6  |. |1BC9             |sbb ecx,ecx2 |$ ^9 z7 f* r0 D' N+ Y! i
00403CE8  |. |23D1             |and edx,ecx
+ {- Q* f+ q% \& J- \00403CEA  |. |8B8E 0C110000    |mov ecx,dword ptr ds:[esi+110C]
+ c5 i2 ^# m* W00403CF0  |. |8A0C0A           |mov cl,byte ptr ds:[edx+ecx]
4 D5 G: `5 M+ u9 F00403CF3  |. |3008             |xor byte ptr ds:[eax],cl                   ;  这个循环就是异或算法" d; F6 i, U6 s  O3 t6 [6 h( F
00403CF5  |. |83C2 01          |add edx,11 |0 C& x( g, z5 r$ D4 L, Z1 N9 \: k$ T
00403CF8  |. |83C0 01          |add eax,1
  s+ t  p3 m! L! P1 s1 R00403CFB  |. |83EF 01          |sub edi,1
2 `& J* T- X$ x5 Q# a00403CFE  |.^\75 E0            \jnz short SL2.00403CE0
6 N0 o) x8 j. I2 u
4 C) c" z! `- i% u6 |3 C7 N: x4 S! C' `6 S7 _! {
00401A42  |.  8D4C24 18        lea ecx,dword ptr ss:[esp+18]6 `- e, y/ ^3 J% P* }* b& g" K
00401A46  |.  51               push ecx
, k. z: N$ f7 Q6 O3 }00401A47  |.  8D4C24 24        lea ecx,dword ptr ss:[esp+24]5 R4 j1 U$ e/ W2 J5 q# p& B1 n
00401A4B  |.  C68424 58110000 >mov byte ptr ss:[esp+1158],1
1 z) g* v2 d& ^: R00401A53  |.  C687 08010000 00 mov byte ptr ds:[edi+108],0
2 D+ O+ K' f" l) o& |$ [/ D00401A5A  |.  E8 51240000      call SL2.00403EB0                           ;  读取字体函数的开始四个字节
" H3 q" w& H" s& D0 x2 a& V, M5 u00401A5F  |.  817C24 18 474D47>cmp dword ptr ss:[esp+18],42474D47          ;  此处可判断出开始的四个字节应该是魔幻数
  E7 ^$ E+ b9 Y+0 魔幻数# {% Q, t) f- @) Q
+4 段数,/ P1 ?% W8 Q# _: h
下面开始是每段的头部) ~% J+ c, J1 n8 O
+46EE 正文
$ y: j3 T+ Q' O7 B
- c; \. d5 b5 s. d. K) N# ]) E0 I0203DDE0  2F 45 58 54 44 41 54 41 53 46 4F 4E 54 2F 41 52  /EXTDATASFONT/AR+ }+ K* a. b& M2 L  p* R9 \% r# P4 i
0203DDF0  49 41 4C 20 31 31 2E 45 4E 00                    IAL 11.EN./ ]) Z! T# V4 D: P7 R1 D

! \$ J  \& ^# K( d" A$ {) x0203DEE0              75 16 00 00 (EE 46) 00 00 2F 45 58 54      ..頕../EXT
2 F+ U/ e& [5 m8 g0203DEF0  44 41 54 41 53 46 4F 4E 54 2F 41 52 49 41 4C 20  DATASFONT/ARIAL
& j$ X( x& y( ]0203DF00  31 32 2E 45 4E 00                                12.EN.
& p1 T/ s$ U' Q
5 G& [; E! m! }/ [& v" W: g2 C上面表中的数据除了括号中的(EE 46),其余全部与解包后文件数据一致,
) h% M0 N5 c+ A1675是这个段的长度,46EE是这个在文件中的偏移,每段偏移值的算法如下:7 L0 U+ C$ ~. D/ {
% ]0 c5 D- m3 ]& n/ _
00401AE0  |> /899401 08010000  /mov dword ptr ds:[ecx+eax+108],edx         ;  edx=46ee
$ D. {8 n. A7 r# A2 _- B2 }00401AE7  |. |8B06             |mov eax,dword ptr ds:[esi]                 ;  [esi]存放读取字符的地址
4 N8 r/ `3 u1 z: D00401AE9  |. |039401 04010000  |add edx,dword ptr ds:[ecx+eax+104]* W6 N4 S, ]- J5 n
00401AF0  |. |83C3 01          |add ebx,1
5 k. h+ ~, o- k, `! w& l9 V) B00401AF3  |. |81C1 0C010000    |add ecx,10C
6 l" V  x9 d" \6 n00401AF9  |. |3B5C24 14        |cmp ebx,dword ptr ss:[esp+14]              ;  [esp+14]=1C2" ]) C+ j- P' B" }( t* Y1 G
00401AFD  |.^\72 E1            \jb short SL2.00401AE0
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

沙发
发表于 2010-3-28 11:32 | 只看该作者
首先对楼主的大力支持表示非常感谢!
" u7 Q% e0 R+ c; X6 w! `& e0 ?想问一下,通过以上分析,能得出什么阶段性的结论吗?
回复 支持 反对

使用道具 举报

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

使用道具 举报

地板
 楼主| 发表于 2010-3-28 12:06 | 只看该作者
Sl2fnt.dat文件格式分析如下:
+ P$ D" ~, m# Q! R% U7 }; k  D2 g* R+0 474D4742  这个魔幻数4 z3 ^& F( D$ i2 }4 F

1 e" h2 O* q- B3 Y) y) O0 k9 P+4 C2010000  表示有01C2个文件' n; M& \/ {3 a4 `+ M/ I" R  [

/ I( J! C7 ?5 m  R6 ~+8 2F4558544441544153464F4E542F415249414C2031312E454E00/ d" f* ~- o& @  ^: j  M
/EXTDATASFONT/ARIAL 11.EN.u
* p( T; l, g: {3 K% @/ ?8 U9 J7 }% s这个应该是文件头部,ARIAL表示字体,EN表示英语 11表示字号
/ {4 r+ i& C9 A; m. o7 @
7 P  R7 t- V" x# h2 P5 s* v   751600 表示这个文件的大小
/ V+ e- i- R$ [; |  E
. }4 B" }6 z6 A2 g每个文件的偏移由上文中的最后那个函数得出' D' r0 E: Z0 o# ]

3 U1 j! i1 r* ]; X: r' g+ N( U
: b+ i8 y; c8 n" s+46EE 此处开始是每个文件的正文+ t7 }& C" ~( d
  J/ F' U* Z0 i) d
如上面我举的这个例子,文件正文内容起始地址+46EE,. C# b9 \6 K9 G: s
结束地址为+(46EE+1675)
回复 支持 反对

使用道具 举报

5#
发表于 2010-3-28 12:11 | 只看该作者
这个其实不用分析,这个dat是个包文件,已经有解包器了啊。
  k5 e5 S, K1 o) D% H4 I& h需要分析的是里面解出来的字体文件。字体文件的magic number是XCPK.
- K: f$ u' S# i2 h+ X! s" a0 _6 L  y& t3 d
我想知道XCPK文件的结构。
回复 支持 反对

使用道具 举报

6#
发表于 2010-3-28 12:16 | 只看该作者
http://aluigi.altervista.org/papers.htm
$ n: h1 k' |: q1 @' l7 z
2 P, k; k# }3 k3 K! Q" x2 u这里有stilllife2 dat文件解包器,配合quickbms使用
回复 支持 反对

使用道具 举报

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

回 楼主(jinxin8866) 的帖子

写屏函数:
. K( R( y- Q3 L9 h8 y9 P02A0EA4C  |> /8B00        |/mov eax,dword ptr ds:[eax]
: m* ~! z! u: R. T/ I02A0EA4E  |. |0FB70450    ||movzx eax,word ptr ds:[eax+edx*2]                    ;  [eax+edx*2]存放字符的UNICODE码
) X& D- E7 z1 T- d( \; N02A0EA52  |. |8B7C24 14   ||mov edi,dword ptr ss:[esp+14]: V% H1 X, S9 `- Z+ E/ g* Z
02A0EA56  |. |8B7F 2C     ||mov edi,dword ptr ds:[edi+2C]7 O9 W9 H5 \! u' E3 a
02A0EA59  |. |8D04C0      ||lea eax,dword ptr ds:[eax+eax*8]0 x$ [; D) t7 ]8 q& w8 u
02A0EA5C  |. |8D0487      ||lea eax,dword ptr ds:[edi+eax*4]                     ;  eax存放字符编码表
7 [* o4 p& n; D) p! a1 l  C# _每个字符码表占24(16进制)个字节
  B! E! K1 @9 q8 s, O/ |02A0EA5F  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]% k$ n* A4 V$ M4 g
02A0EA63  |. |8D7C39 14   ||lea edi,dword ptr ds:[ecx+edi+14]                    ;  edi就是显存地址& y$ v( n: K% }
02A0EA67  |. |D940 04     ||fld dword ptr ds:[eax+4]
0 J* a" N( s0 {2 Z3 o; W: u, \02A0EA6A  |. |83C2 01     ||add edx,1                                              字符个数加一2 o2 u1 @3 B3 o# K! q1 |
02A0EA6D  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]
% }% U- U" B4 I3 H4 @6 s02A0EA71  |. |D900        ||fld dword ptr ds:[eax]
/ B# k8 c4 M- M, p02A0EA73  |. |D91F        ||fstp dword ptr ds:[edi]                              ;  edi就是显存地址
6 _! q" a. P6 U% f% i' M每个字符占1C个字节,最后的四个字节都是一样的,可以认为是结束标志! ]! H2 R2 }. I+ _
02A0EA75  |. |D94424 30   ||fld dword ptr ss:[esp+30]  Q& r4 @& j: }4 g( y
02A0EA79  |. |D95F 04     ||fstp dword ptr ds:[edi+4]4 R7 ?% c4 M/ o+ r3 d
02A0EA7C  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]
# g, f4 B6 R, L+ c& s; Y02A0EA80  |. |D940 04     ||fld dword ptr ds:[eax+4]7 g3 N' ]& v: @8 @0 Q
02A0EA83  |. |8D7C39 30   ||lea edi,dword ptr ds:[ecx+edi+30]6 M0 |/ m6 x1 L. U" L: [+ Z
02A0EA87  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]
( j, O9 q' d4 i- z$ T02A0EA8B  |. |D940 08     ||fld dword ptr ds:[eax+8]
. w1 b8 ^: i+ W/ u02A0EA8E  |. |D91F        ||fstp dword ptr ds:[edi]8 W. |" Q1 \1 V- E! J. A2 F$ N
02A0EA90  |. |D94424 30   ||fld dword ptr ss:[esp+30]
' A1 M, k8 M7 H: }02A0EA94  |. |D95F 04     ||fstp dword ptr ds:[edi+4]
. Y/ E* ~; V  q8 m  A7 f: A. O+ I02A0EA97  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]( B: a- o3 Q! q# x7 `, o, o$ y
02A0EA9B  |. |D940 0C     ||fld dword ptr ds:[eax+C]+ i+ \0 Z1 k! `9 {7 [) Y
02A0EA9E  |. |8D7C39 4C   ||lea edi,dword ptr ds:[ecx+edi+4C]
* n0 G' V9 q* y% o: _! t4 H4 ^02A0EAA2  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]2 Q' B% A& L7 N! I6 l
02A0EAA6  |. |D900        ||fld dword ptr ds:[eax]' {; g: H2 b/ Z& x
02A0EAA8  |. |D91F        ||fstp dword ptr ds:[edi]8 [! \* G0 i. i% H8 ]1 k
02A0EAAA  |. |D94424 30   ||fld dword ptr ss:[esp+30]
% {% r& l1 p: X( A: `02A0EAAE  |. |D95F 04     ||fstp dword ptr ds:[edi+4]0 g$ {+ M. G% T6 P. x+ a! ]/ C
02A0EAB1  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]
) R! S: ~0 ^; {- U02A0EAB5  |. |D940 0C     ||fld dword ptr ds:[eax+C]
7 ?# r3 b  h2 b7 u4 {5 R# ]02A0EAB8  |. |8D7C39 68   ||lea edi,dword ptr ds:[ecx+edi+68]
8 m. o; T7 ?" e& e9 C  h02A0EABC  |. |D95C24 30   ||fstp dword ptr ss:[esp+30]0 i2 g+ n) }0 c4 {% B; ]* q$ j9 v
02A0EAC0  |. |83C1 70     ||add ecx,70
* ~# C4 K% X7 _7 ^02A0EAC3  |. |D940 08     ||fld dword ptr ds:[eax+8]7 R6 J8 I" F2 |( D+ E% H
02A0EAC6  |. |D91F        ||fstp dword ptr ds:[edi]
) L, Q# S$ Y  l* f' f' K0 Z3 A02A0EAC8  |. |D94424 30   ||fld dword ptr ss:[esp+30]3 w& h, [& q  @! ^& e
02A0EACC  |. |D95F 04     ||fstp dword ptr ds:[edi+4]
7 e# x3 _7 B$ U0 X02A0EACF  |. |8B46 58     ||mov eax,dword ptr ds:[esi+58]3 W/ j9 h9 T! p7 `  M8 ]; f) X- `" R
02A0EAD2  |. |03C3        ||add eax,ebx
6 E3 T( ]* J1 H5 V* D' z02A0EAD4  |. |3B50 08     ||cmp edx,dword ptr ds:[eax+8]
" K% o' p% F2 m1 {( X02A0EAD7  |.^\\0F8C 6FFFFF>|\\jl xcDxShad.02A0EA4C' [7 n) l  {3 D# s

: ]7 p8 s& ^, M* }2 `0 S( m+ P) V本游戏字符编码采用UNICODE,3 I# Y. X$ ?2 k- i8 m8 w
对字符码表的操作:
- {! G7 D% v  \) |: K& x10028807  |> /0FB702      /movzx eax,word ptr ds:[edx]        读字符的UNICODE码& d0 e8 U- [$ K2 W
1002880A  |. |8D04C0      |lea eax,dword ptr ds:[eax+eax*8]
2 j/ Z7 c3 Q2 e: k6 J1002880D  |. |8D0483      |lea eax,dword ptr ds:[ebx+eax*4]   根据UNICODE码求得字符码表的地址5 i, j' o8 Q! j& G1 u2 s& D. P
10028810  |. |33C9        |xor ecx,ecx
6 g. i& h7 ^/ l0 z10028812  |. |DB40 20     |fild dword ptr ds:[eax+20]
) \2 J" O4 Z, j+ d2 E, j& r: a3 m10028815  |. |D95C24 14   |fstp dword ptr ss:[esp+14]4 `$ F5 l- `8 q% m
10028819  |. |D94424 14   |fld dword ptr ss:[esp+14]9 ]+ d9 m, g" C! I5 E3 @8 f$ z) I
1002881D  |. |D9C0        |fld st5 Q" b6 n- B9 P8 Z7 E. c( e, |
1002881F  |. |D84E 14     |fmul dword ptr ds:[esi+14]4 B- C" @0 B- K0 A: i
10028822  |. |D94424 0C   |fld dword ptr ss:[esp+C]' k" e9 p5 T' N) F- X; W
10028826  |. |D9C0        |fld st
8 v- o# k# B+ x; j9 N1 ~4 y+ I10028828  |. |DEC2        |faddp st(2),st9 G" B8 V7 `! k7 p1 L0 X
1002882A  |. |D9C9        |fxch st(1)
+ K7 k' L- ~5 W9 v# z  h4 V2 J) Z& _1002882C  |. |D95C24 14   |fstp dword ptr ss:[esp+14], Q# N: t( n* ]7 j" b
10028830  |. |D8D3        |fcom st(3)
) `0 T, N2 g6 t( k. g10028832  |. |DFE0        |fstsw ax
8 Q4 @5 O6 U3 x/ t/ D10028834  |. |F6C4 01     |test ah,1. y: {5 {4 E* l( s. y8 y7 e  m3 S
10028837  |. |74 2B       |je short xcEngine.10028864" K+ J  }  L6 k* o# P
10028839  |. |D94424 14   |fld dword ptr ss:[esp+14]; |; \; V4 M: l8 K/ b$ E+ q! a
1002883D  |. |D8D3        |fcom st(3)/ v& T, k7 w. d4 R
1002883F  |. |DFE0        |fstsw ax$ t4 x& g) N# ~! y' K1 W6 |9 T3 r
10028841  |. |F6C4 41     |test ah,41! G' E: n5 w, F8 t
10028844  |. |7A 04       |jpe short xcEngine.1002884A/ {6 B* a& M) R2 r- k
10028846  |. |DDD8        |fstp st
8 o; V. L' I+ ?4 Y. t, V  |10028848  |. |EB 1A       |jmp short xcEngine.10028864
+ U- c% N/ Y8 e1002884A  |> |D9C9        |fxch st(1)
. n+ }! p4 r* F8 f% h1002884C  |. |D8D3        |fcom st(3)! t, r; R: q, Q+ T
1002884E  |. |DFE0        |fstsw ax
, J, _! L( o6 N6 j& C# K10028850  |. |F6C4 05     |test ah,59 s( V" t& r8 K/ R$ n
10028853  |. |7A 04       |jpe short xcEngine.100288594 Q6 i7 }; ~* r+ o0 e
10028855  |. |DDD9        |fstp st(1)3 M# y0 v; |4 `: [0 X. v9 T
10028857  |. |EB 0B       |jmp short xcEngine.10028864; c7 R' @( k% S& R
10028859  |> |D9C9        |fxch st(1)4 ^; ^1 T5 _, X# R- w
1002885B  |. |D8DC        |fcomp st(4)# i9 f- r7 Y& k! d% J
1002885D  |. |DFE0        |fstsw ax2 q% G8 R3 [$ K& \7 i/ I0 b
1002885F  |. |F6C4 41     |test ah,41
; N' u+ }. F0 V) y. N/ u. j10028862  |. |75 05       |jnz short xcEngine.10028869+ |/ g) i& s+ ?0 T1 [
10028864  |> |B9 01000000 |mov ecx,1
3 \4 p& {  X+ A1 r10028869  |> |85C9        |test ecx,ecx
/ R* t- P: ^7 N- X! o1002886B  |. |8B4424 18   |mov eax,dword ptr ss:[esp+18]
  M- a9 B- E. v1002886F  |. |D940 14     |fld dword ptr ds:[eax+14]1 r2 \1 K/ j( b# ^" c: ^$ t
10028872  |. |DECA        |fmulp st(2),st, y6 H+ }7 r. R* n7 P
10028874  |. |DEC1        |faddp st(1),st; Y, X3 Y9 L' T/ \7 c4 i* |& s
10028876  |. |D95C24 0C   |fstp dword ptr ss:[esp+C]' e0 G. N7 F) @$ ]
1002887A  |. |75 05       |jnz short xcEngine.10028881
! a1 N' R6 \& Z4 c1002887C  |. |834424 10 0>|add dword ptr ss:[esp+10],1
& ]; ^" {' @( @& Q5 H; n  j10028881  |> |83C2 02     |add edx,2
, Q6 m1 i0 h: p2 M4 L- ?10028884  |. |83EF 01     |sub edi,1
/ N2 q: v4 Q6 z# ]4 ?10028887  |.^\\0F85 7AFFFF>\\jnz xcEngine.10028807
, o& d  V* H2 S/ J% q8 b3 |由于算法采用了浮点数指令,本人不太懂,边学习边研究中。。。。。。。。。
回复 支持 反对

使用道具 举报

8#
发表于 2010-4-1 11:13 | 只看该作者
加油!UNICODE码内核的游戏?
* |/ o; V9 B/ K- o# M  ]4 g* F看来汉化有希望啊。
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

回 8楼(shane007) 的帖子

找到了内存中字库的地址,可在下面这个位置下断,1 W# Q7 V3 g2 e& J' g8 q0 i: j3 ^% u

% `9 p- |0 Q( b8 z02A0EA5C  |. |8D0487      ||lea eax,dword ptr ds:[edi+eax*4]                     ;  eax存放的就是字库的地址& R9 K5 b& z  f, Q# l6 x
这个字库不是点阵的,经过修改,字符的形状可发生变化,应该是矢量字库
回复 支持 反对

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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