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

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

[复制链接]
楼主: jinxin8866
打印 上一主题 下一主题

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

21#
发表于 2010-4-23 19:51 | 只看该作者
solidji 加油!就看你的了。9 O5 Z( f+ G5 u, R3 z0 t4 Q& @4 P
: Z: a" D: u6 @& |+ q9 }
应该和DEMO版没关系吧。
回复 支持 反对

使用道具 举报

22#
 楼主| 发表于 2010-4-23 21:36 | 只看该作者
加油!!!!!一边看一边学习.....................
回复 支持 反对

使用道具 举报

23#
发表于 2010-4-25 04:52 | 只看该作者
拦到了解压的函数
3 T  L2 _/ i* p0 j! E' Z
  1. 1008A1E0   $ /E9 03010000       jmp xcEngine.1008A2E8
  2. 1008A1E5     |8D49 00           lea ecx,dword ptr ds:[ecx]
  3. 1008A1E8   . |46 61 73 74 20 64>ascii "Fast decoding Co"
  4. 1008A1F8   . |64 65 20 66 72 6F>ascii "de from Chris An"
  5. 1008A208   . |64 65 72 73 6F 6E>ascii "derson",0
  6. 1008A20F     |90                nop
  7. 1008A210   . |69 6E 76 61 6C 69>ascii "invalid literal/"
  8. 1008A220   . |6C 65 6E 67 74 68>ascii "length code",0
  9. 1008A22C   . |69 6E 76 61 6C 69>ascii "invalid distance"
  10. 1008A23C   . |20 63 6F 64 65 00>ascii " code",0
  11. 1008A242     |8BFF              mov edi,edi
  12. 1008A244   . |69 6E 76 61 6C 69>ascii "invalid distance"
  13. 1008A254   . |20 74 6F 6F 20 66>ascii " too far back",0
  14. 1008A262     |8BFF              mov edi,edi
复制代码
  1. 1008A2E8   > \\57                push edi
  2. 1008A2E9   .  56                push esi
  3. 1008A2EA   .  55                push ebp
  4. 1008A2EB   .  53                push ebx
  5. 1008A2EC   .  9C                pushfd
  6. 1008A2ED   .  83EC 40           sub esp,40
  7. 1008A2F0   .  FC                cld
  8. 1008A2F1   .  8B7424 58         mov esi,dword ptr ss:[esp+58]
  9. 1008A2F5   .  8B7E 1C           mov edi,dword ptr ds:[esi+1C]
  10. 1008A2F8   .  8B56 04           mov edx,dword ptr ds:[esi+4]
  11. 1008A2FB   .  8B06              mov eax,dword ptr ds:[esi]
  12. 1008A2FD   .  03D0              add edx,eax
  13. 1008A2FF   .  83EA 0B           sub edx,0B
  14. 1008A302   .  894424 2C         mov dword ptr ss:[esp+2C],eax
  15. 1008A306   .  895424 14         mov dword ptr ss:[esp+14],edx
  16. 1008A30A   .  8B6C24 5C         mov ebp,dword ptr ss:[esp+5C]
  17. 1008A30E   .  8B4E 10           mov ecx,dword ptr ds:[esi+10]
  18. 1008A311   .  8B5E 0C           mov ebx,dword ptr ds:[esi+C]
  19. 1008A314   .  2BE9              sub ebp,ecx
  20. 1008A316   .  F7DD              neg ebp
  21. 1008A318   .  03EB              add ebp,ebx
  22. 1008A31A   .  81E9 01010000     sub ecx,101
  23. 1008A320   .  03CB              add ecx,ebx
  24. 1008A322   .  895C24 3C         mov dword ptr ss:[esp+3C],ebx
  25. 1008A326   .  896C24 28         mov dword ptr ss:[esp+28],ebp
  26. 1008A32A   .  894C24 10         mov dword ptr ss:[esp+10],ecx
  27. 1008A32E   .  8B47 4C           mov eax,dword ptr ds:[edi+4C]
  28. 1008A331   .  8B4F 50           mov ecx,dword ptr ds:[edi+50]
  29. 1008A334   .  894424 08         mov dword ptr ss:[esp+8],eax
  30. 1008A338   .  894C24 0C         mov dword ptr ss:[esp+C],ecx
  31. 1008A33C   .  B8 01000000       mov eax,1
复制代码
这算法挺长的,我看看把它弄成个DLL导出函数' t. Q+ D# s4 U0 M) F
dump下來的部分字库文件
1 S$ W  C5 z5 J2 ~$ ~2 X2 M" S  G5 F
大概看了下,和jinxin8866取出来的数据很相似4 N2 w3 F( k1 ]$ ^5 X. z
拿到这部分解压算法之后,搞清楚解压后数据的结构就可以了吧?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

24#
发表于 2010-4-25 08:22 | 只看该作者

楼上字库的抓图

恩,需要以下东西。 3 P/ w* t- a; I) V; }/ }/ ^0 b

+ A2 i* \3 I6 {4 I1.  解压算法
; D$ ^/ H! S1 C" T# [2 @" V( ?2.  由解压算法推算出magic number为XCPK的文件的结构 " P7 z+ Z5 |& U/ R2 M
3. 制作解压工具
: H, ~! D" i6 x0 W1 m* ]* T6 P4. 根据解压算法推算出压缩算法。 : g# [2 X: f8 C$ E7 G# C' s* ?
5. 制作出magic number为XCPK的文件的压缩工具! \4 U' ]* n1 \1 b! _. c7 B
$ w3 R  |& [3 m2 h7 Y0 }
以下是楼上字库的抓图
  ]! u6 _, H& ]8 P, g2 v2 I8 M

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

25#
 楼主| 发表于 2010-4-25 20:55 | 只看该作者
dump2数据结构分析:
7 J3 W+ R5 u; J8 Y% u( \% F+0  在字库中的X开始坐标  d+ `9 v& T8 q+ x$ D
+4  在字库中的Y开始坐标
7 z' _' m9 P. d9 b& e* V7 r+8  在字库中的X结束坐标' p( X& e" O, f
+C  在字库中的Y结束坐标8 x. u, l9 w' u& j
+10 浮点数,字宽,向前伸缩, x5 k/ d, }. f1 L* d8 u' p7 i
+14 浮点数,字高,负数表示正向,正数表示倒向6 L' T- v# }( [3 }) e
+18 浮点数,字宽,正数表示正常,负数表示反向
. k# O& a8 `! _# W% k3 `+1C 浮点数,字高,字符上顶点不动,底下可以伸缩
$ h* ]1 L0 ~: I* \' J! L8 x% u+20 后间距,包含自身宽度
+ A* F& Y5 E/ l2 s1 s3 v6 z1 y" e
, A/ U# v. ^6 D7 l: dsolidji所说的顶点结构TLVertex vertices就是由此数据结构推算过来的
+ |) |$ b  w, e* P8 S( qTLVertex vertices[] =9 U, X$ \* ~- S% J4 b6 ~
  {
2 w; U: M) p9 M0 f/ l7 m8 t   { 248.6f, 222.2f, 0.5f, 1.0f, 0xffffff00, a, b },) {* H6 l! y( f( u" i5 w
   { 262.6f, 222.2f, 0.5f, 1.0f, 0xffffff00, c, b },
- P7 X2 \3 `) p) v1 v4 s   { 248.6f, 240.2f, 0.5f, 1.0f, 0xffffff00, a, d }, 1 ^6 |3 W( M5 ~2 K
   { 262.6f, 240.2f, 0.5f, 1.0f, 0xffffff00, c, d }
3 E# h; X: ^/ p9 e" Y: v/ I- D3 [  }; //129CE000 指向vertices,0xffffff00表示颜色,这里应该是白色
回复 支持 反对

使用道具 举报

26#
 楼主| 发表于 2010-4-25 21:04 | 只看该作者
02A0EA4E  |. |0FB70450    ||movzx eax,word ptr ds:[eax+edx*2]                    ;  [eax+edx*2]存放字符的UNICODE码6 M7 _( T/ x0 `2 T
02A0EA52  |. |8B7C24 14   ||mov edi,dword ptr ss:[esp+14]
- w* }4 I& \9 X: B! U) \02A0EA56  |. |8B7F 2C     ||mov edi,dword ptr ds:[edi+2C]
: @$ ~0 W4 F! P) a8 c3 C' V02A0EA59  |. |8D04C0      ||lea eax,dword ptr ds:[eax+eax*8]( Q7 x( F, C, o  E  @4 t" \! G
02A0EA5C  |. |8D0487      ||lea eax,dword ptr ds:[edi+eax*4]   ;  eax:存放字符编码表 即dump2中的数据结构
1 j9 i- s( X; W+ H02A0EA5F  |. |8B7C24 0C   ||mov edi,dword ptr ss:[esp+C]* o* B7 w; A6 V; ~
02A0EA63  |. |8D7C39 14   ||lea edi,dword ptr ds:[ecx+edi+14] ;  edi: solidji所说的顶点结构TLVertex vertices/ w* r3 {6 R% f) k2 E
02A0EA67  |. |D940 04     ||fld dword ptr ds:[eax+4]
回复 支持 反对

使用道具 举报

27#
发表于 2010-4-25 21:34 | 只看该作者
加油,不过楼上还是在分析dump文件。5 a8 P. X, C$ y1 w; P& z6 }# p
希望尽快进入分析xcpk文件格式的阶段。。。
0 f1 H" K6 q* \% s6 B# |期待中。。。
回复 支持 反对

使用道具 举报

28#
发表于 2010-4-26 15:16 | 只看该作者

decoding

知道那段解压代码无法拦到的原因了,这段解压算法是引擎xcEngine提供的,其中使用了MMX指令
! k5 H$ R/ n* c9 ]4 i5 q  I1008A3BE > /833D 00A00F10 02 cmp dword ptr ds:[100FA000],2 ; //存放CPU类型信息,主要看是否支持MMX指令 4 e& r2 C. t$ w  ?9 U
这里判断了CPU对MMX指令的支持程度,最终我的机器使用到的解压循环是
  1. 1008A674   >  0FD3C1            psrlq mm0,mm1
  2. 1008A677   . |83FD 20           cmp ebp,20
  3. 1008A67A   . |77 12             ja short xcEngine.1008A68E
  4. 1008A67C   . |0F6EF5            movd mm6,ebp
  5. 1008A67F   . |0F6E3E            movd mm7,dword ptr ds:[esi]
  6. 1008A682   . |83C6 04           add esi,4
  7. 1008A685   . |0FF3FE            psllq mm7,mm6
  8. 1008A688   . |83C5 20           add ebp,20
  9. 1008A68B   . |0FEBC7            por mm0,mm7
  10. 1008A68E   > |0FDBE0            pand mm4,mm0
  11. 1008A691   . |0F7EE0            movd eax,mm4
  12. 1008A694   . |0F7FDC            movq mm4,mm3
  13. 1008A697   . |8B0483            mov eax,dword ptr ds:[ebx+eax*4]
  14. 1008A69A   > |0FB6CC            movzx ecx,ah
  15. 1008A69D   . |0F6EC9            movd mm1,ecx
  16. 1008A6A0   . |2BE9              sub ebp,ecx
  17. 1008A6A2   . |84C0              test al,al
  18. 1008A6A4   . |75 19             jnz short xcEngine.1008A6BF
  19. 1008A6A6   . |C1E8 10           shr eax,10
  20. 1008A6A9   . |AA                stos byte ptr es:[edi]
  21. 1008A6AA   > |397C24 10         cmp dword ptr ss:[esp+10],edi
  22. 1008A6AE   . |0F86 1C020000     jbe xcEngine.1008A8D0
  23. 1008A6B4   . |397424 14         cmp dword ptr ss:[esp+14],esi
  24. 1008A6B8   .^\\77 BA             ja short xcEngine.1008A674
复制代码

9 k% i% V  |3 X) d
7 B1 s" E! y2 N- f* f# ^8 W# C0 d( ?% Y8 F# c  V& N
str[] = {pbuffIn, lenIn, unknow, pbuffOut, lenOut, unknow1, NULL, str1};
8 X7 ~  V( e4 n1 V& s$ Q3 D3 q) |" t! qbool decoding(&str) ;//解压函数,这个接口我会通过DLL导出函数提供 " X  _& b; u( n; Q

9 O* q1 ]/ \' D) j0 i* F5 U. }1.  解压算法 -----------decoding & E4 K2 E' Y% n- u7 p
2.  由解压算法推算出magic number为XCPK的文件的结构-------------那么现在我开始看这部分,相对简单
' i" Y; W" d3 ], @1 ?' f2 b 3. 制作解压工具--------decoding封装下 + S4 \+ ]4 f0 w! J0 k
4. 根据解压算法推算出压缩算法。---------就是上面这段代码了,要花时间,建议先HOOK加载跳过这部分工作,以后在补 . z: ]8 V0 O, ?5 m
5. 制作出magic number为XCPK的文件的压缩工具----------同上
回复 支持 反对

使用道具 举报

29#
发表于 2010-4-26 17:11 | 只看该作者
收到,感觉进入冲刺阶段了,加油!
回复 支持 反对

使用道具 举报

30#
 楼主| 发表于 2010-4-26 21:26 | 只看该作者
引用第8楼shane007于2010-04-01 11:17发表的  :$ a  Z0 D" z4 P1 I8 r5 x
只要知道游戏读取字符图片以后,以何种格式,放到哪个内存地址
0 Y0 ~8 S9 T2 |$ Q# w; [即使我们无法解压字库,也可以通过内挂一个DLL,传入字符编码,把我们自己的字符图片写入对应的内存地址。。从而达到汉化的目的。; m: p1 F) O1 K# v
现在我们已经分析出了字库文件解压后的三种文件格式,我觉得没必要再分析XCPK文件,把我们自己的字符图片写入以下结构对应的内存地址" J, r1 N: v( V# W9 V1 h
可以了: B0 J1 F6 l7 y/ }1 T
& d! |: @) C8 C4 V8 d! m% b
str[] = {pbuffIn, lenIn, unknow, pbuffOut, lenOut, unknow1, NULL, str1};
+ W, _/ j2 _: Q; K, d% Obool decoding(&str) ;//解压函数,
回复 支持 反对

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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