shane007 发表于 2009-4-3 07:55

静物2 汉化分析专用贴

老外放出了一个静物2数据文件样本。
http://rs706.rapidshare.com/files/216482719/Sl2data.zip
有巳さ呐笥芽梢匝芯恳幌隆?

--------------------------------------------------
2009.4.4 第1次更新
老外放出了静物2包文件的异或key,据说解密以后文件的格式很简单。
2923BE84E16CD6AE529049F1F1BBE9EB

--------------------------------------------------
2009.4.4 第2次更新
测试了一下上面的异或key,结果正确。解密后的文件为不压缩的简单格式包文件。
放上异或解密工具,在工具包里有一个例子,异或key就在key.txt中。

--------------------------------------------------
2009.4.4 第3次更新
静物2采用wild-dna公司开发的3D引擎。网址如下。
http://www.wild-dna.com/main.html
http://www.gamecostudios.com/xcengine.html

--------------------------------------------------
2009.4.8 更新
老外公布了静物2包文件的格式。
0x04 //"GMGB"
0x04 //Number of files

for each file {

0xX path and filename
0x01 0x00
0x04 file length
0x01 0x00
}

--------------------------------------------------
2009.4.17 更新
老外动作很快,通用解包器quickbms发布以后很快发布了静物2的解包脚本。
用法如下
quickbms.exe stillife2.bms c:\Sl2data.dat c:\folder

--------------------------------------------------
2009.5.16 更新
最近又有一些细小但是可能比较重要的发现。
用filemon跟踪了一下发现这个游戏支持读取解包后的字体文件Sl2fnt.dat。
第2个发现可能很重要,我把Sl2fnt.dat改名后发现游戏竟然能正常运行,此时使用了一种奇怪的字体。此种字体和原来的字体明显不同,并且显示有些不正常。我怀疑是某种系统的TTF字体被强制用不正确的参数显示而导致的。如果真是这样的话,我们无疑看到了一丝汉化的曙光。
弄清楚这谜一般的字体来源是接下去要研究的课题。
下面是此字体画面抓图。


--------------------------------------------------
2009.6.26 更新
经过老外的分析,把Sl2fnt.dat文件删除以后,游戏会自动寻找系统字体arial.tff。
老外还放上了清晰的抓图。就是说我们目前已经可以把静物2转化为一个使用TTF字库的游戏,如果有办法HOOK显示函数的话,也许可以用比较简单的方法实现汉化。
放上抓图


--------------------------------------------------
2009.6.27 更新
我在另一台电脑上试验了一下,可以显示出正常的英文。
我用上面的异或工具解密了字幕文件Sl2data.dat,然后写入一个中文字,再用异或工具异或一次。发现只有这个字的低字节被显示出来,高字节被过滤了。
我觉得分析到这里基本可以知道实现汉化的方法了,就是用OD分析一下,找到那个过滤点,使游戏一下子读取2个字节,这样游戏应该就能显示出中文。
肥牛如果有时间的话,希望能尝试一下。拜托了。
需要修改的可能是xcEngine.dll这个文件。

抓图如下,显示出来的是 汉 这个字的低字节部分


--------------------------------------------------
2010.2.2 更新
我电脑上的静物2,在一开场2人打完电话以后,就会崩溃。
研究了一段时间,发现可能是我显卡较老,只有128M显存的缘故。
把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老大检查咯
那个提取的方法还是和之前那个riper一样就可以了吧


Private Const cKey As String = "2923BE84E16CD6AE529049F1F1BBE9EB"

Private Sub cmdCommand1_Click()

    Dim lngFileNum As Long, lngLength   As Long, strFilePath As String, bData()   As Byte

    strFilePath = App.Path & "\\1.dat"

    lngLength = FileLen(strFilePath)

    lngFileNum = FreeFile

    If lngFileNum = 0 Then Exit Sub

    ReDim bData(lngLength)

    Open strFilePath For Binary As #lngFileNum

    Get #lngFileNum, 1, bData()

    Close #lngFileNum

    Dim lngIndex As Long, lngUbound As Long

    lngUbound = UBound(bData())

    Dim lngIndexB As Long, lngKey As Long

    For lngIndexB = 1 To 32

      lngKey = CHex2Dec(Mid$(cKey, lngIndexB, 1))

      For lngIndex = 0 To lngUbound

         bData(lngIndex) = bData(lngIndex) Xor lngKey
   
      Next

    Next

    strFilePath = App.Path & "\\2.dat"

    lngFileNum = FreeFile

    Open strFilePath For Binary As #lngFileNum

    Put #lngFileNum, 1, bData()

    Close #lngFileNum
End
End Sub

Private Function CHex2Dec(strHex As String) As Long
Select Case strHex

    Case "A": CHex2Dec = 10
    Case "B": CHex2Dec = 11
    Case "C": CHex2Dec = 12
    Case "D": CHex2Dec = 13
    Case "E": CHex2Dec = 14
    Case "F": CHex2Dec = 15
    Case Else: CHex2Dec = CLng(strHex)

End Select
End Function

shane007 发表于 2009-4-15 20:15

你能上传exe和源码吗?
论坛有防拷贝,光贴代码非法用啊

firendless 发表于 2009-4-15 20:20

啊....我在记事本里打的....

我给枫叶传过一个去防拷贝的插件...现在这台机器没有...我叫她mail你

慕容枫叶 发表于 2009-4-15 22:26

我复制了。。。
其实在线转帖类型的也可以。

shane007 发表于 2009-4-17 22:52

2009.4.17 更新

田横 发表于 2009-4-18 01:22

vista下用解包器解包时会出现“程序停止工作”错误。

shane007 发表于 2009-4-18 08:03

我试过了,XP上没问题。
页: [1] 2 3
查看完整版本: 静物2 汉化分析专用贴