冒险解谜游戏中文网 ChinaAVG

标题: 静物2 汉化分析专用贴 [打印本页]

作者: shane007    时间: 2009-4-3 07:55
标题: 静物2 汉化分析专用贴
老外放出了一个静物2数据文件样本。
: v; `* _, r. ]% y& _http://rs706.rapidshare.com/files/216482719/Sl2data.zip
+ f5 b5 w+ w& o$ A1 a有巳さ呐笥芽梢匝芯恳幌隆? 0 ?4 V$ F( T- ?8 a  d, P

2 f- @7 \0 O8 v/ z' K7 U' o4 o--------------------------------------------------
) j: i  v' A) x" y, `2009.4.4 第1次更新
: d5 j5 C. O+ x2 x老外放出了静物2包文件的异或key,据说解密以后文件的格式很简单。 # B6 C+ }  e; U2 `6 R
2923BE84E16CD6AE529049F1F1BBE9EB 7 y2 V, A, ^/ @/ L( S

0 s3 L& @% d* X& B. h, J-------------------------------------------------- ; ]- i, o+ y4 V6 S+ [% p
2009.4.4 第2次更新
/ X3 S1 S1 C8 k- S$ h$ d9 a测试了一下上面的异或key,结果正确。解密后的文件为不压缩的简单格式包文件。 ) |; E# ?, N: [4 K' e" f$ i
放上异或解密工具,在工具包里有一个例子,异或key就在key.txt中。
* w2 P3 h2 C1 t/ }' {% H" W0 m) n. ?4 B
-------------------------------------------------- 3 K# ~" g+ t4 R( J5 \
2009.4.4 第3次更新
) N  Y3 b) B0 c. y% W6 S静物2采用wild-dna公司开发的3D引擎。网址如下。
& T3 Q! n, N9 phttp://www.wild-dna.com/main.html   q2 h4 b4 V' j8 h
http://www.gamecostudios.com/xcengine.html
( X' y8 q* ?( p: D0 U
/ s, T& z: F' c: S9 ?  p/ k-------------------------------------------------- * [9 O) x4 V) P+ x  j, M' u
2009.4.8 更新
. @+ @3 j; q' s- ?% b7 o8 s老外公布了静物2包文件的格式。
& K' s5 v/ c, t+ g! X5 G0x04 //"GMGB" ) i4 g* x+ f0 y0 n! F' U* p" q
0x04 //Number of files
4 U) E, Q8 x* I' K- ?+ U* ~; O
) j' w' M7 r# T9 i& W( v  pfor each file { - H" o8 p4 u, A! F6 a: g+ e6 w
# l6 k% h" L- ^
0xX path and filename
1 T2 r( }9 y, u6 _1 j4 m0x01 0x00 $ s. Y. A2 |3 @; [0 G8 z
0x04 file length # \4 \) w% F0 n+ l  ^
0x01 0x00
; v& R" y! S3 M/ Y9 u} . K9 ~' L! W* B+ F0 u; T
3 @# Q( V* R5 h. j
-------------------------------------------------- 0 h$ n+ P/ l4 f$ c% ]
2009.4.17 更新
5 M9 T: X6 M8 q" I' T9 f) L老外动作很快,通用解包器quickbms发布以后很快发布了静物2的解包脚本。
' w$ }4 m3 [8 B; o用法如下
  W! e. \+ V! u$ Y, P5 C/ b# I, d  Gquickbms.exe stillife2.bms c:\Sl2data.dat c:\folder . r- E& A2 L  d. E
0 K: ^; L, e2 _
--------------------------------------------------
* W0 u5 B" ?) l+ d1 P2009.5.16 更新 5 `$ ^2 \( O6 M) K
最近又有一些细小但是可能比较重要的发现。
, r: `; g' \" y; W2 k5 a用filemon跟踪了一下发现这个游戏支持读取解包后的字体文件Sl2fnt.dat。
" q# A# d+ a! s8 r4 d) V7 ?第2个发现可能很重要,我把Sl2fnt.dat改名后发现游戏竟然能正常运行,此时使用了一种奇怪的字体。此种字体和原来的字体明显不同,并且显示有些不正常。我怀疑是某种系统的TTF字体被强制用不正确的参数显示而导致的。如果真是这样的话,我们无疑看到了一丝汉化的曙光。
+ a% _2 M' u; p弄清楚这谜一般的字体来源是接下去要研究的课题。
( s8 K. ~0 d7 B下面是此字体画面抓图。
5 e3 W( u! G* F/ C* T3 u[attach]13069[/attach]
) k- s  ^7 N, Y4 {5 ]$ T* w' a! k+ b; g& E* U
--------------------------------------------------
$ ^3 _6 Z2 M8 T6 E0 e2 q+ S' W2009.6.26 更新 5 P8 A5 c4 w; m' @% q4 ^  f
经过老外的分析,把Sl2fnt.dat文件删除以后,游戏会自动寻找系统字体arial.tff。   F8 F& I0 k% R/ S3 k
老外还放上了清晰的抓图。就是说我们目前已经可以把静物2转化为一个使用TTF字库的游戏,如果有办法HOOK显示函数的话,也许可以用比较简单的方法实现汉化。 0 G. E# J5 s; S& X
放上抓图
4 c5 {: j5 z1 r/ A# P[attach]13482[/attach] . M1 S7 V7 E9 Z6 k

  O4 T- f: O# A-------------------------------------------------- 7 ]0 U8 e; d' E9 @
2009.6.27 更新 0 _) [5 _7 z" E7 y: H
我在另一台电脑上试验了一下,可以显示出正常的英文。 ! w' z+ A  y7 c( I* w" n
我用上面的异或工具解密了字幕文件Sl2data.dat,然后写入一个中文字,再用异或工具异或一次。发现只有这个字的低字节被显示出来,高字节被过滤了。 , R5 y9 ]8 \8 b0 B! x4 B
我觉得分析到这里基本可以知道实现汉化的方法了,就是用OD分析一下,找到那个过滤点,使游戏一下子读取2个字节,这样游戏应该就能显示出中文。 * \+ q6 B6 e2 X( `
肥牛如果有时间的话,希望能尝试一下。拜托了。
# l' ]5 o- ^: o需要修改的可能是xcEngine.dll这个文件。
+ Z3 F7 e4 {/ R7 O2 d% t- I' R. w& i2 z* O' H
抓图如下,显示出来的是 汉 这个字的低字节部分 5 P9 E( p: L/ `- V, T1 Z
[attach]13499[/attach]
# F7 C5 W3 h$ `
9 L- V9 h- i& I4 s-------------------------------------------------- / m! l2 l; s* A
2010.2.2 更新 " L' j# M, D; I. z7 I. S
我电脑上的静物2,在一开场2人打完电话以后,就会崩溃。1 b' S4 a* V& c# l
研究了一段时间,发现可能是我显卡较老,只有128M显存的缘故。
8 t. \" c$ k" r0 b把option的Shadow Quality改为low以后,解决了上述的崩溃问题。
作者: shane007    时间: 2009-4-4 07:00
2009.4.4 更新
作者: shane007    时间: 2009-4-8 11:35
2009.4.8 更新
作者: firendless    时间: 2009-4-15 20:07
又来异或...还是数组操作吧,没有用IDE...007老大检查咯1 Q- w/ Q* t& C- m7 c5 F
那个提取的方法还是和之前那个riper一样就可以了吧+ S% R' Q. y  H
  1. Private Const cKey As String = "2923BE84E16CD6AE529049F1F1BBE9EB"
  2. Private Sub cmdCommand1_Click()
  3.     Dim lngFileNum As Long, lngLength   As Long, strFilePath As String, bData()     As Byte
  4.     strFilePath = App.Path & "\\1.dat"
  5.     lngLength = FileLen(strFilePath)
  6.     lngFileNum = FreeFile
  7.     If lngFileNum = 0 Then Exit Sub
  8.     ReDim bData(lngLength)
  9.     Open strFilePath For Binary As #lngFileNum
  10.     Get #lngFileNum, 1, bData()
  11.     Close #lngFileNum
  12.     Dim lngIndex As Long, lngUbound As Long
  13.     lngUbound = UBound(bData())
  14.     Dim lngIndexB As Long, lngKey As Long
  15.     For lngIndexB = 1 To 32
  16.         lngKey = CHex2Dec(Mid$(cKey, lngIndexB, 1))
  17.         For lngIndex = 0 To lngUbound
  18.            bData(lngIndex) = bData(lngIndex) Xor lngKey
  19.    
  20.         Next
  21.     Next
  22.     strFilePath = App.Path & "\\2.dat"
  23.     lngFileNum = FreeFile
  24.     Open strFilePath For Binary As #lngFileNum
  25.     Put #lngFileNum, 1, bData()
  26.     Close #lngFileNum
  27. End
  28. End Sub
  29. Private Function CHex2Dec(strHex As String) As Long
  30. Select Case strHex
  31.     Case "A": CHex2Dec = 10
  32.     Case "B": CHex2Dec = 11
  33.     Case "C": CHex2Dec = 12
  34.     Case "D": CHex2Dec = 13
  35.     Case "E": CHex2Dec = 14
  36.     Case "F": CHex2Dec = 15
  37.     Case Else: CHex2Dec = CLng(strHex)
  38. End Select
  39. End Function
复制代码

作者: shane007    时间: 2009-4-15 20:15
你能上传exe和源码吗?5 L7 s0 E- j9 y
论坛有防拷贝,光贴代码非法用啊
作者: firendless    时间: 2009-4-15 20:20
啊....我在记事本里打的....3 E/ I* D$ Q) o+ K( `# D2 a
; k9 T" w  {, D- t/ V4 S9 Z1 A
我给枫叶传过一个去防拷贝的插件...现在这台机器没有...我叫她mail你
作者: 慕容枫叶    时间: 2009-4-15 22:26
我复制了。。。' `7 G8 K8 E) [; j* B5 `2 k2 _  Z
其实在线转帖类型的也可以。
作者: shane007    时间: 2009-4-17 22:52
2009.4.17 更新
作者: 田横    时间: 2009-4-18 01:22
vista下用解包器解包时会出现“程序停止工作”错误。
作者: shane007    时间: 2009-4-18 08:03
我试过了,XP上没问题。
作者: shane007    时间: 2009-5-16 11:02
2009.5.16 更新
作者: shane007    时间: 2009-6-26 11:50
2009.6.26 更新
作者: shane007    时间: 2009-6-27 16:57
2009.6.27 更新
作者: 肥牛    时间: 2009-6-27 19:06
这个难度很大,只能说试试,没有什么把握。先下载游戏,可能周二才会有进度汇报了。
作者: shane007    时间: 2009-6-27 19:35
引用第13楼肥牛于2009-06-27 19:06发表的  :  U7 X( v  g3 [* \+ d0 j0 _( y
这个难度很大,只能说试试,没有什么把握。先下载游戏,可能周二才会有进度汇报了。

" D0 r( b" m/ l& |4 V的确难度很大,不过难度越大,一旦有突破成就感也越大。1 ]: c! [) A$ b8 Y; W+ S
要修改的地方也可能在EXE里,以下的几个函数比较可疑。
) `2 ^  z6 t: l2 ^1 O; f- K1 ~4 |xcEngine.xccFrameText::AddText
; p4 w9 h: I6 d7 N; v; N  sxcEngine.xccFrameText::GetCharPosition: a- u1 N& A, r$ P
xcEngine.xccFrameText::GetDrawnCharCount8 [/ X4 b% W7 y! t3 e8 o/ C& G4 e
xcEngine.xccFrameText::RemoveText
, |' ]) I. [/ r- O7 F' yxcEngine.xccFrameText::SetTextString) Q% ~/ G8 h5 R7 G
3 a: }; E$ p+ ?- x( r4 M4 e* T/ c
你慢慢试试看吧。
作者: 肥牛    时间: 2009-7-1 18:40
今天上午游戏下载完成,初步试了一下,在我的电脑上连第一个字节都不显示,汉字部分完全不显示。
8 ?# q3 v9 X* W. U: q5 {反编译了xcEngine.dll文件,我判断在GetDrawnCharCount函数里应该处理一下,但是没有在相关的代码中发现有价值的东西。明天再继续看看吧,不过这个游戏是运行在DX9下面的,可能用OD调试比较困难,我现在用的是IDA直接反编译查看源代码的方式。
作者: shane007    时间: 2009-7-1 21:36
用通用窗口化工具窗口化之后就可以用OD调试了。1 |7 O; B2 B" X7 z2 h/ Z2 z
我觉得还是动态调试比较好。
1 Z. Z9 i1 |5 g$ R1 q! w2 f汉字部分完全不显示?奇怪了,有抓图吗?
2 N( S, n% K! U2 F. V& A, j$ V是直接过滤了还是中间空了一块?
作者: shane007    时间: 2009-8-14 23:58
把这个帖子顶上来。$ o) B6 H) u! ~$ f+ f
希望某高手能够帮我们解决关键技术问题。
作者: shane007    时间: 2010-2-2 23:09
2010.2.2 更新
作者: 虫尾巴    时间: 2010-2-2 23:19
期待2代技术的解决!
作者: shane007    时间: 2010-9-14 22:49
顶上来备用
作者: shane007    时间: 2010-9-18 21:46
再次顶上来
作者: 哲学人生    时间: 2011-11-5 13:04
[s:74]静物2还是没出汉化
作者: applel    时间: 2011-12-2 21:45
都等两年了 唉 这么经典的游戏  喜欢的人怎么那么少[s:84]
作者: leonliu12    时间: 2012-2-6 23:04
2012年了,顶起来,一直没玩静物2,就等汉化了,可惜也不能帮上什么忙。
作者: rorozhy    时间: 2012-9-30 04:47
[s:89]顶上来,我是做电视包装的,就是logo演绎之类的,对三维软件什么都比较熟悉,主流的三维软件都很熟,如果说能汉化这款游戏的话,虽然平时很忙,但是我一定会帮忙的~!




欢迎光临 冒险解谜游戏中文网 ChinaAVG (https://www.chinaavg.com/) Powered by Discuz! X3.2