解析某游戏更新网站的配置文件(VB6.0)
作者:admin 日期:2008-06-26
一朋友发了个文件过来,是从http://www.mzdbt.com/torrents/dat/Today.dat下载的,问我能不能解析出其中的内容.
分析过程费了点时间,毕竟经验不足,头一次....
不过还好,总算勉强整出来了....
其大致结构如下:
[整个文件内包含记录的数量,4字节]
[固定的0D 00,2字节]
(某一文件块开始)
[当前块的字节数,2字节]
[BSTR] x N...(这里有多个BSTR,还有一些没看出作用的节,就直接用相应长度字节数组或变量占位)
(下一文件块开始)
[当前块的字节数,2字节]
[BSTR] x N...
(如此循环)
于是写出VB结构如下:
只要每个块的字节数对上了,就可以很简单地读取了:
这样的话,MyData()里就是每一节的内容了.
最终界面如图:

整个工程在这里下载:
点击下载此文件
PS:
极度BS一下瑞星!这份代码编译后竟然被报vbDownloader病毒....
分析过程费了点时间,毕竟经验不足,头一次....
不过还好,总算勉强整出来了....
其大致结构如下:
[整个文件内包含记录的数量,4字节]
[固定的0D 00,2字节]
(某一文件块开始)
[当前块的字节数,2字节]
[BSTR] x N...(这里有多个BSTR,还有一些没看出作用的节,就直接用相应长度字节数组或变量占位)
(下一文件块开始)
[当前块的字节数,2字节]
[BSTR] x N...
(如此循环)
于是写出VB结构如下:
复制内容到剪贴板
程序代码

Private Type MyType
cbSize As Integer '整个结构所占内存大小
GameName As String '游戏名称
BTURL As String 'BT下载地址
GameType As String '游戏类型
NoneInt As Integer 'BSTR长度描述,丢弃
FileSize As Long '文件大小
RemStr As String '备注
UpdateFile As String '要更新的文件名(貌似)
DateAndSN As String '时间与序号
NoneByte6(5) As Byte '6个空字节
NoneBSTR_1 As String '未知BSTR
NoneByte3(2) As Byte '3个空字节
ExeName As String '主执行文件名
NoneBSTR_2 As String '未知BSTR
End Type
cbSize As Integer '整个结构所占内存大小
GameName As String '游戏名称
BTURL As String 'BT下载地址
GameType As String '游戏类型
NoneInt As Integer 'BSTR长度描述,丢弃
FileSize As Long '文件大小
RemStr As String '备注
UpdateFile As String '要更新的文件名(貌似)
DateAndSN As String '时间与序号
NoneByte6(5) As Byte '6个空字节
NoneBSTR_1 As String '未知BSTR
NoneByte3(2) As Byte '3个空字节
ExeName As String '主执行文件名
NoneBSTR_2 As String '未知BSTR
End Type
只要每个块的字节数对上了,就可以很简单地读取了:
复制内容到剪贴板
程序代码

Dim MyData() As MyType
Private Function GetTxt(ByVal FileName As String) As Long
Dim MaxNum As Long
On Error Resume Next
Open FileName For Binary As #1
Get #1, , MaxNum '得到文件总数,4字节
ReDim MyData(MaxNum - 1)
Get #1, Seek(1) + 2, MyData '跳两字节,是一个固定的13,00
Close #1
GetTxt = MaxNum
End Function
Private Function GetTxt(ByVal FileName As String) As Long
Dim MaxNum As Long
On Error Resume Next
Open FileName For Binary As #1
Get #1, , MaxNum '得到文件总数,4字节
ReDim MyData(MaxNum - 1)
Get #1, Seek(1) + 2, MyData '跳两字节,是一个固定的13,00
Close #1
GetTxt = MaxNum
End Function
这样的话,MyData()里就是每一节的内容了.
最终界面如图:

整个工程在这里下载:

PS:
极度BS一下瑞星!这份代码编译后竟然被报vbDownloader病毒....

评论: 2 | 引用: 0 | 查看次数: 1398


病毒?很夸张的说....


老马加油啊!
