冒险解谜游戏中文网 ChinaAVG

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

作者: shane007    时间: 2009-4-3 07:55
标题: 静物2 汉化分析专用贴
老外放出了一个静物2数据文件样本。
0 [6 T! o  R% v; }9 L* P, D! |http://rs706.rapidshare.com/files/216482719/Sl2data.zip 7 t5 P% m- y4 H- I
有巳さ呐笥芽梢匝芯恳幌隆? 3 b7 i8 F2 H; @+ r2 R% w9 s

2 S- \" W% g- A/ [--------------------------------------------------
2 A) F4 }& ^% w2009.4.4 第1次更新
+ B# S. h0 I# S5 a老外放出了静物2包文件的异或key,据说解密以后文件的格式很简单。 9 Z6 D* N" b0 e& g- |/ Y4 f% y3 `9 h
2923BE84E16CD6AE529049F1F1BBE9EB 7 X5 d( z# }* F% M1 o
+ V6 F+ u, W1 D
-------------------------------------------------- ; `: A; A5 N3 a- X# b
2009.4.4 第2次更新
. S( r! [1 ~1 w4 v1 c+ a+ \测试了一下上面的异或key,结果正确。解密后的文件为不压缩的简单格式包文件。 5 d: I- E# n3 A2 M. o. G
放上异或解密工具,在工具包里有一个例子,异或key就在key.txt中。
1 G+ S2 ?5 j0 E6 C$ A/ h7 o7 Y+ Y0 ]" @$ r* G
-------------------------------------------------- $ A* v# k: ^; q7 o
2009.4.4 第3次更新 6 l# R' x3 Z0 C( S. L
静物2采用wild-dna公司开发的3D引擎。网址如下。 # K) W4 b) |( ]2 ?/ f% j
http://www.wild-dna.com/main.html
" \+ u7 ?! z+ d4 G( Jhttp://www.gamecostudios.com/xcengine.html ( q4 d! k- S; f4 B* g

5 Z5 u$ x; a& X2 |-------------------------------------------------- % b6 b6 ~, G7 l& S( C' P
2009.4.8 更新
" ~  s0 u/ H3 L1 c0 K/ U8 H# i老外公布了静物2包文件的格式。
+ S+ I2 O5 g5 B$ r& _+ Z  _5 |0x04 //"GMGB" 5 v; S# _& s7 p* e) R
0x04 //Number of files
' w* X9 [- J7 j. u
: V! G! |& c: l/ p! C% xfor each file {
( o, S5 w+ J$ s) t' ^
% z/ r/ L5 m8 e7 U6 Y0xX path and filename
4 S) a# i0 k0 F* v0x01 0x00 6 o" x! ^& E9 r8 L0 G; C
0x04 file length
) t$ Y/ v$ l7 n$ y0x01 0x00
2 d% V/ u; @( c1 R2 S, Z+ N} # L) I* p, K# k- `

" B0 l. i; y8 K) |6 g9 p" f; X-------------------------------------------------- 2 S& Z! p. u5 h) ~3 J* k
2009.4.17 更新 0 r6 k4 }$ y6 z3 i
老外动作很快,通用解包器quickbms发布以后很快发布了静物2的解包脚本。
! H) }* l3 I+ N用法如下
8 c  H$ E$ T( x0 s( ~1 Squickbms.exe stillife2.bms c:\Sl2data.dat c:\folder
# g* J. h2 T5 @; g2 G' g6 J5 s) A) P- ~7 ^
-------------------------------------------------- 5 f/ ~& y; `- A
2009.5.16 更新 1 K$ u6 s( J1 V5 `2 I
最近又有一些细小但是可能比较重要的发现。
1 g/ i* B6 n$ N用filemon跟踪了一下发现这个游戏支持读取解包后的字体文件Sl2fnt.dat。 1 l. y. N3 l. l3 |1 J+ a
第2个发现可能很重要,我把Sl2fnt.dat改名后发现游戏竟然能正常运行,此时使用了一种奇怪的字体。此种字体和原来的字体明显不同,并且显示有些不正常。我怀疑是某种系统的TTF字体被强制用不正确的参数显示而导致的。如果真是这样的话,我们无疑看到了一丝汉化的曙光。 1 _& [/ z, f4 X9 [+ e0 e: F
弄清楚这谜一般的字体来源是接下去要研究的课题。
3 C# f" t; B: v* u# m1 B6 T下面是此字体画面抓图。
0 w) U3 w# X$ I/ {6 n  [1 U7 t  u[attach]13069[/attach] . `- A) V* m" [# _& M8 N0 S3 z8 g

! v4 U% D& j3 x+ ]! c--------------------------------------------------
% Q+ @; g: ^+ G  s* Y2 e2009.6.26 更新 * R! Z' t. z% \
经过老外的分析,把Sl2fnt.dat文件删除以后,游戏会自动寻找系统字体arial.tff。
" ?  @4 b- \3 m  ?老外还放上了清晰的抓图。就是说我们目前已经可以把静物2转化为一个使用TTF字库的游戏,如果有办法HOOK显示函数的话,也许可以用比较简单的方法实现汉化。 7 F+ U: d" M$ l, h, F
放上抓图 1 S+ [) Q" G; q* S9 D
[attach]13482[/attach]
$ |1 x0 [/ i$ Y/ G- H
- W6 Y. P9 |. C" O. o--------------------------------------------------
- w  M5 t1 ^6 b+ r% \0 x2009.6.27 更新 6 K0 H$ A$ Y7 O: Z* T$ q
我在另一台电脑上试验了一下,可以显示出正常的英文。
& L; u, L( p; D$ b( s% Q* ^我用上面的异或工具解密了字幕文件Sl2data.dat,然后写入一个中文字,再用异或工具异或一次。发现只有这个字的低字节被显示出来,高字节被过滤了。
" F6 ?2 ^: P( @我觉得分析到这里基本可以知道实现汉化的方法了,就是用OD分析一下,找到那个过滤点,使游戏一下子读取2个字节,这样游戏应该就能显示出中文。 ; i6 f1 E9 q1 R) X/ a% b
肥牛如果有时间的话,希望能尝试一下。拜托了。 5 f9 U9 P4 Z2 \. s0 j5 O
需要修改的可能是xcEngine.dll这个文件。
. |' A% _7 l! {$ U2 r7 N8 c
" _, t1 T/ o9 W, s+ o  s, c/ {抓图如下,显示出来的是 汉 这个字的低字节部分 " A- L* H( v2 P6 A$ B% ]
[attach]13499[/attach]
+ y2 |" c- \+ l/ @  c8 w; m( R  E5 E. t3 a6 I+ u4 X4 e! [; y  C6 e4 D
--------------------------------------------------
/ `7 ?, P" P; Q. |2010.2.2 更新 6 i8 R$ E$ ?; K+ o' ]
我电脑上的静物2,在一开场2人打完电话以后,就会崩溃。9 s# x/ W6 T0 Z
研究了一段时间,发现可能是我显卡较老,只有128M显存的缘故。/ {# z7 C8 u& P) H% I
把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老大检查咯
  r3 p- m& k' f0 W7 p那个提取的方法还是和之前那个riper一样就可以了吧# o0 @) R( W. W" g6 J( N
  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和源码吗?
7 }; x* i2 \3 V9 B7 j/ n4 @" {论坛有防拷贝,光贴代码非法用啊
作者: firendless    时间: 2009-4-15 20:20
啊....我在记事本里打的....
: L' C* a  R% b
' j/ Z5 W$ y2 O9 X% G- W我给枫叶传过一个去防拷贝的插件...现在这台机器没有...我叫她mail你
作者: 慕容枫叶    时间: 2009-4-15 22:26
我复制了。。。* b; V. z: a' ?9 `6 H+ x
其实在线转帖类型的也可以。
作者: 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发表的  :5 o- Q9 o( v, ?  p7 ~/ t2 ]
这个难度很大,只能说试试,没有什么把握。先下载游戏,可能周二才会有进度汇报了。
+ k/ T6 f4 v& \# j. ]1 O
的确难度很大,不过难度越大,一旦有突破成就感也越大。
% J, d+ g, V% W% a要修改的地方也可能在EXE里,以下的几个函数比较可疑。
) m4 B! S  f3 e# V# X) v( KxcEngine.xccFrameText::AddText/ c: W# n0 B# Z  |  O
xcEngine.xccFrameText::GetCharPosition
" k) C' B# I4 t" P0 L% V3 N4 N+ RxcEngine.xccFrameText::GetDrawnCharCount
* E* N; V& ^. b! B$ G" P3 J- ]! WxcEngine.xccFrameText::RemoveText
: _+ m3 g+ e4 D  [/ `. G3 u& GxcEngine.xccFrameText::SetTextString% [8 _9 Q+ k1 B

& \0 C2 l0 X4 o9 f; ?+ |你慢慢试试看吧。
作者: 肥牛    时间: 2009-7-1 18:40
今天上午游戏下载完成,初步试了一下,在我的电脑上连第一个字节都不显示,汉字部分完全不显示。
# s% m8 Q0 X/ h5 w# z$ f, V# r反编译了xcEngine.dll文件,我判断在GetDrawnCharCount函数里应该处理一下,但是没有在相关的代码中发现有价值的东西。明天再继续看看吧,不过这个游戏是运行在DX9下面的,可能用OD调试比较困难,我现在用的是IDA直接反编译查看源代码的方式。
作者: shane007    时间: 2009-7-1 21:36
用通用窗口化工具窗口化之后就可以用OD调试了。# s: G; H8 ]3 @1 C- t
我觉得还是动态调试比较好。
& _2 P: d+ z6 I) {* ^2 t汉字部分完全不显示?奇怪了,有抓图吗?6 v2 |, g+ D) E. ]! A
是直接过滤了还是中间空了一块?
作者: shane007    时间: 2009-8-14 23:58
把这个帖子顶上来。
2 K% Q' e0 \/ s9 ~, p- s6 T& N希望某高手能够帮我们解决关键技术问题。
作者: 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://chinaavg.com/) Powered by Discuz! X3.2