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

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

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

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

31#
发表于 2010-4-26 22:03 | 只看该作者
引用第29楼jinxin8866于2010-04-26 21:26发表的 : & M$ y- P' E4 ~# E9 |

) n+ H: v2 Z* [7 K; Q* P/ y现在我们已经分析出了字库文件解压后的三种文件格式,我觉得没必要再分析XCPK文件,把我们自己的字符图片写入以下结构对应的内存地址 : |2 B% O1 g; e6 E# S' n- U* G* u
可以了 4 X* r2 M% ?2 N

) y9 @  Y  q8 g) mstr[] = {pbuffIn, lenIn, unknow, pbuffOut, lenOut, unknow1, NULL, str1}; . C4 X) q$ z+ M  l3 M, J7 p
.......
* ^7 M3 s" J0 k/ o4 r' V( x3 I; P( u2 d

. E( f6 ^0 ~# b2 c% A理论上说的确是可以,不过这个些编程对我来说还有些难。
3 n5 o7 \) Y. ~, fjinxin8866会不会做个内挂DLL来实现这些功能?
/ Z8 `: C* I6 A# t- @8 K' E( b2 C2 t
我能做的是等xcpk格式分析出来后,在外部对xcpk文件作修改。
回复 支持 反对

使用道具 举报

32#
发表于 2010-4-27 00:36 | 只看该作者
XCPK的格式我也大概看了下,结构并不复杂,就是分支跳转多一点1 |+ x; ^0 \* M3 l& {
我在找更简洁些的解压接口,应该是有的
$ a5 C; R' O' b9 X+ J8 R) N, n# J% w0 u+ v  C' p
我们可以把XPCK的明文全部DUMP出来,你修改好之后,挂个DLL写回去. Q/ p6 h/ s0 O2 F/ G) N
这个不难# |: O- o8 ]' x
分析道这种程度,理论上来说SL2的汉化确定是可以了
5 k3 v3 U5 I8 D2 A剩下一些程序上的细节,明天继续。。
回复 支持 反对

使用道具 举报

33#
发表于 2010-4-27 08:00 | 只看该作者
加油!5 J# W! \& d7 o

5 w: H9 N/ G$ E; e' y. ]如果在exe加内挂的话,最好在正式版的exe上做。. N! J' D& |" O. N+ a
能否在xcengine.dll里面加内挂呢?
0 M1 I, a6 t) S; c8 V3 f0 K
* S" `1 T1 M- f9 Sxcengine.dll----->proxy.dll.decoding()--->decode.decoding()
回复 支持 反对

使用道具 举报

34#
发表于 2010-4-28 18:31 | 只看该作者

rererererer


1 ]% T# M  c. U; t* z4 rxcengine.dll----->proxy.dll、 ; Z2 Z. I6 B- f6 i0 x
为xcengine.dll做代理是很难实现的,没有开放接口的开发库,最多模仿个类指针来调用一下
: U7 h( ]! v- Z: X. k9 S+ T关键又是由类似COM接口的对象注册方式,整个解压流程都是以对象方法来调用的 ( b! s) ^5 m2 \7 H
- g' Y2 k7 e0 q  r
注释的那两个就是XcFileZip和XcBitmap对象
  1. 10020316  |.  8B7C24 18         mov edi,dword ptr ss:[esp+18]
  2. 1002031A  |>  8B4E 10           mov ecx,dword ptr ds:[esi+10]
  3. 1002031D  |.  8B01              mov eax,dword ptr ds:[ecx]
  4. 1002031F  |.  8B40 34           mov eax,dword ptr ds:[eax+34]
  5. 10020322  |.  6A 04             push 4
  6. 10020324  |.  8D5424 1C         lea edx,dword ptr ss:[esp+1C]
  7. 10020328  |.  52                push edx                                                        ;  //前面比较过是否XCPK头
  8. 10020329  |.  FFD0              call eax                                                        ;  // ::Read
  9. 1002032B  |.  85C0              test eax,eax                                                    ;  //根据长度与名字Yellowjacket 18读取完整的xpck文件
  10. 1002032D  |.^ 0F85 55FFFFFF     jnz xcEngine.10020288                     ;  //本次是读取39B3,到88 A9 4E 03,在往下正好是下个XCPK头
复制代码

* C! E. O/ U$ C上面方法本身类结构
  1. 003EDF50  BC 8E 0A 10 00 00 00 00 03 00 03 00 01 00 00 00  紟..........
  2. 003EDF60  00 00 00 00 04 00 00 00 90 B0 12 00 01 00 00 00  .......惏....
  3. 003EDF70  88 A9 4E 03 00 00 01 00 B3 39 00 00 D0 54 4E 03  埄N...?..蠺N
复制代码
! ]" C( N* C( M& J, K/ P5 w0 F$ }: N
88 A9 4E 03 指向从Sl2fnt.dat读进来并XOR之后的内容,B3 39 00 00 本次读取长度,D0 54 4E 03 指向返回类
2 P9 |" f' ~" V- Z/ O) n! s* m! k3 t, p" U3 [, f; D) U
返回类指针指向结构
  1. 034E54D0  9D A9 4E 03 9E 39 00 00 15 00 00 00 4C B0 12 00  潻N?.....L?.
  2. 034E54E0  00 00 00 00 08 00 00 00 00 00 00 00 D8 82 4E 03  ...........貍N
  3. 034E54F0  00 6E 07 10 20 6E 07 10 00 00 00 00 05 00 00 00  .n n.......
复制代码
$ ?6 q# I4 k/ d6 ?  q) J' r
9D A9 4E 03 表示目前未读的缓冲区指针,9E 39 00 00为剩下长度,15 00 00 00 表示已经解压长度,4C B0 12 00  解压缓冲区尾指针 . y" R% h% Y3 @, {

; W! {/ J, k4 x/ V4 I- N9 ~6 {8 g这里可以看到读取地址根据之前的GMGB文件来获取
  1. 02220C98  B7 39 00 00 CF 7A 40 00 2F 45 58 54 44 41 54 41  ?..蟴@./EXTDATA
  2. 02220CA8  53 46 4F 4E 54 2F 59 45 4C 4C 4F 57 4A 41 43 4B  SFONT/YELLOWJACK
  3. 02220CB8  45 54 20 31 38 2E 46 52 00 00 00 00 00 00 00 00  ET 18.FR........
  4. 0012ADF8    00501684  /CALL 到 SetFilePointer 来自 SL2.0050167E
  5. 0012ADFC    00000690  |hFile = 00000690 (window)
  6. 0012AE00    00407ACF  |OffsetLo = 407ACF (4225743.)
  7. 0012AE04    0012AE18  |pOffsetHi = 0012AE18
  8. 0012AE08    00000000  \\Origin = FILE_BEGIN
复制代码

/ E, s# B1 U& X8 a* I& }4 p% }$ z5 K* H0 h
接下来看看XCPK文件解压前的结构
  1. 10020431  |> /8B4E 10           /mov ecx,dword ptr ds:[esi+10]
  2. 10020434  |. |8B11              |mov edx,dword ptr ds:[ecx]
  3. 10020436  |. |8B52 34           |mov edx,dword ptr ds:[edx+34]
  4. 10020439  |. |6A 08             |push 8
  5. 1002043B  |. |8D4424 2C         |lea eax,dword ptr ss:[esp+2C]
  6. 1002043F  |. |50                |push eax
  7. 10020440  |. |FFD2              |call edx                                                       ;  XCTGX
  8. 10020442  |. |85C0              |test eax,eax
  9. 10020444  |.^|0F85 3EFEFFFF     |jnz xcEngine.10020288
  10. 1002044A  |. |817C24 28 5843544>|cmp dword ptr ss:[esp+28],47544358
  11. 10020452  |. |0F85 81010000     |jnz xcEngine.100205D9
  12. 10020458  |. |8B46 10           |mov eax,dword ptr ds:[esi+10]
  13. 1002045B  |. |8B4C24 2C         |mov ecx,dword ptr ss:[esp+2C]
  14. 1002045F  |. |8B40 14           |mov eax,dword ptr ds:[eax+14]
  15. 10020462  |. |03C1              |add eax,ecx
  16. 10020464  |. |894424 24         |mov dword ptr ss:[esp+24],eax
  17. 10020468  |. |894C24 1C         |mov dword ptr ss:[esp+1C],ecx
  18. 1002046C  |> |8B4E 10           |/mov ecx,dword ptr ds:[esi+10]
  19. 1002046F  |. |8B11              ||mov edx,dword ptr ds:[ecx]
  20. 10020471  |. |8B52 34           ||mov edx,dword ptr ds:[edx+34]
  21. 10020474  |. |6A 08             ||push 8
  22. 10020476  |. |8D4424 34         ||lea eax,dword ptr ss:[esp+34]
  23. 1002047A  |. |50                ||push eax
  24. 1002047B  |. |FFD2              ||call edx                                                      ;  //Read 依次读取标记字符(bits,name,flag,wdth,hgth,fmt ...)
  25. 1002047D  |. |85C0              ||test eax,eax
  26. 1002047F  |.^|0F85 03FEFFFF     ||jnz xcEngine.10020288
  27. 10020485  |. |8B46 10           ||mov eax,dword ptr ds:[esi+10]
  28. 10020488  |. |8B0B              ||mov ecx,dword ptr ds:[ebx]
  29. 1002048A  |. |8B5424 18         ||mov edx,dword ptr ss:[esp+18]
  30. 1002048E  |. |8B78 14           ||mov edi,dword ptr ds:[eax+14]
  31. 10020491  |. |8B0C0A            ||mov ecx,dword ptr ds:[edx+ecx]
  32. 10020494  |. |8B01              ||mov eax,dword ptr ds:[ecx]
  33. 10020496  |. |8B40 08           ||mov eax,dword ptr ds:[eax+8]
  34. 10020499  |. |037C24 34         ||add edi,dword ptr ss:[esp+34]
  35. 1002049D  |. |56                ||push esi
  36. 1002049E  |. |8D5424 34         ||lea edx,dword ptr ss:[esp+34]
  37. 100204A2  |. |52                ||push edx
  38. 100204A3  |. |FFD0              ||call eax                                                      ;  // LoadChunk 根据标记字符读取一个块并解压
  39. 100204A5  |. |8B4E 10           ||mov ecx,dword ptr ds:[esi+10]
  40. 100204A8  |. |8B11              ||mov edx,dword ptr ds:[ecx]
  41. 100204AA  |. |8B42 3C           ||mov eax,dword ptr ds:[edx+3C]
  42. 100204AD  |. |6A 00             ||push 0
  43. 100204AF  |. |57                ||push edi
  44. 100204B0  |. |FFD0              ||call eax
  45. 100204B2  |. |8B46 34           ||mov eax,dword ptr ds:[esi+34]
  46. 100204B5  |. |B9 F8FFFFFF       ||mov ecx,-8
  47. 100204BA  |. |2B4C24 34         ||sub ecx,dword ptr ss:[esp+34]
  48. 100204BE  |. |014C24 2C         ||add dword ptr ss:[esp+2C],ecx
  49. 100204C2  |. |85C0              ||test eax,eax
  50. 100204C4  |. |74 49             ||je short xcEngine.1002050F
  51. 100204C6  |. |DB4424 14         ||fild dword ptr ss:[esp+14]
  52. 100204CA  |. |8B4C24 2C         ||mov ecx,dword ptr ss:[esp+2C]
  53. 100204CE  |. |85C9              ||test ecx,ecx
  54. 100204D0  |. |8B56 38           ||mov edx,dword ptr ds:[esi+38]
  55. 100204D3  |. |DC05 A0570B10     ||fadd qword ptr ds:[100B57A0]
  56. 100204D9  |. |52                ||push edx
  57. 100204DA  |. |DB4424 30         ||fild dword ptr ss:[esp+30]
  58. 100204DE  |. |7D 06             ||jge short xcEngine.100204E6
  59. 100204E0  |. |D805 38580B10     ||fadd dword ptr ds:[100B5838]
  60. 100204E6  |> |DA7424 20         ||fidiv dword ptr ss:[esp+20]
  61. 100204EA  |. |51                ||push ecx
  62. 100204EB  |. |DEE9              ||fsubp st(1),st
  63. 100204ED  |. |DC0D 20590B10     ||fmul qword ptr ds:[100B5920]
  64. 100204F3  |. |DA7424 18         ||fidiv dword ptr ss:[esp+18]
  65. 100204F7  |. |D95C24 28         ||fstp dword ptr ss:[esp+28]
  66. 100204FB  |. |D94424 28         ||fld dword ptr ss:[esp+28]
  67. 100204FF  |. |D91C24            ||fstp dword ptr ss:[esp]
  68. 10020502  |. |FFD0              ||call eax
  69. 10020504  |. |83C4 08           ||add esp,8
  70. 10020507  |. |85C0              ||test eax,eax
  71. 10020509  |.^|0F85 92FDFFFF     ||jnz xcEngine.100202A1
  72. 1002050F  |> |837C24 2C 00      ||cmp dword ptr ss:[esp+2C],0
  73. 10020514  |.^|0F87 52FFFFFF     |\\ja xcEngine.1002046C
复制代码

% `, J3 X3 Y' h, q/ H
+ T- z4 x. A! g  }' l"XCPK" "bits" len <bits内容,也就是之前dump下来的字库块> "name" len <文件名Yellowjacket 18.en > "flag" <字库的像素度,长宽等信息>........."XCPK"(下一个XCPK文件头)
$ N7 X" Q7 c: Y3 Y. f5 e" r4 A6 S* p6 b9 r" n
先Read到字符串"bits",然后把"bits"作为参数LoadChunk 实际内容,然后一直循环到结尾

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

35#
发表于 2010-4-28 18:57 | 只看该作者
说得比较混乱,不过相关代码和结构都提了下,自己跟一下应该就清楚了, G% l6 n6 @$ q) m& ^" l! q
总结XCPK文件就是
$ x) k* r$ q0 \& xxcpk bits bitslen (一段bits具体内容) name namelen (文件名Yellowjacket 18.en)....9 B1 {+ r) G, k# q. z6 }# A" _$ v$ p
这样一直到结尾遇到下个xcpk 字符) ?& `* u' h$ ?* d9 O" b
分析差不多就这样了,代码怎么写,怎么来打这个钩子有空QQ上讨论分工下吧! {/ r: X* Q" M" l- C8 b4 I
我最近都没太多时间coding
回复 支持 反对

使用道具 举报

36#
发表于 2010-4-28 19:11 | 只看该作者
收到,我先仔细看一下。
回复 支持 反对

使用道具 举报

37#
发表于 2010-4-28 19:20 | 只看该作者
我想先提个问题。% X0 `8 e! A2 ?# |8 ?: w' s) K
游戏里可能有不少XCPK格式的图片,不仅仅是图片字库。& X# i$ [! G/ y2 I2 k
我们把内挂打上去以后,如何来替换呢?
* `& z, T, z, n) e如何判断哪个图片是哪个呢?
回复 支持 反对

使用道具 举报

38#
发表于 2010-5-10 17:55 | 只看该作者
jinxin8866,你是怎么把图片从内存Dump出的?
回复 支持 反对

使用道具 举报

39#
发表于 2010-5-17 14:57 | 只看该作者

rerererere

解压部分最后的程序看来没人接上,看我有没有时间补完吧
: F4 E' J$ F9 [# e5 C# ?6 u8 O3 B7 m% G5 r# j
另外我一直研究的通用代理D3D的汉化方式,有了关键性的突破,已经能完整在自己的设备窗口重现游戏字幕了 * S8 \" [7 [/ _4 i7 b! x
如图
' S  G3 W) t- a) |2 ]/ ]5 M2 _/ O
7 q4 A/ P( N- k
1 T' l$ k5 u* X6 [1 X+ J, V4 x* l: y
SL2也是可以用这种方式搞定的,剩下的是将文字数据做MD5与中文数据映射 / |7 y/ A1 l* Q
最终易用性和性能上如何优化还待定,欢迎各位汉化前辈多给建议

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

40#
发表于 2010-5-17 17:08 | 只看该作者
看到楼上有了关键性的突破真是非常高兴,期待早日放出相关的程序和工具,早日开工。
回复 支持 反对

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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