文件的解密(关于迅雷的) ( 积分: 150 )

  • 主题发起人 主题发起人 暗夜中独舞
  • 开始时间 开始时间

暗夜中独舞

Unregistered / Unconfirmed
GUEST, unregistred user!
今天发现一个问题向大家请教一下:
迅雷有个记录历史下载的文件,在安装目录下的Profiles文件夹内。
里面的文件貌似是加密过的,我用写字板打开,这是一段,
D'8<?閘.http://download.rising.com.cn/for_down/rav2007dver/ravolusr.exe
我看了下除了下载地址,其他都看不起初了几乎
然后我用HEdit打开看了下,有些中文比如路径却是可以看清楚的。

现在我想问一下,我该怎么还原这个文件?能清楚地看清楚这文件里面记载的内容呢?
 
为什么都不理我呀???
 
在完全不知道该文件的文件结构的情况下,要分析文件的结构,还要解密文件内容,这个成本代价太高了。所以没有人愿意帮你想。
 
大概告诉我思路一下 具体的我自己去想
 
你打算干吗?
大概看了一下,是利用了结构化存储技术,并没有使用加密技术。至于破解,你可以参看一下相关文章。
 
我就是打算把迅雷的下载记录提取出来
没有加密技术的话就好办了
结构化存储技术?文章?
有资料的提供一下吧。。。。
我也搜下了~~~
 
按段的长度来取,你看看到你能看到的记录那段路经(记录路经的前面一般也会留四个字节来作为标记)的前面有多少字节,然后过掉字节就能取到你的路经了,大概原理就是这样子吧。
 
刚刚认真搜了搜 大概懂得了 什么是结构化存储文件
但是不知道怎么和那个迅雷的文件关联起来
应该要先分析文件的存储结构吧?然后定义一个结构体??
大伙帮帮忙 告诉我一下大概该怎么做了呀?
 
里面的文件我看了一下,有些是结构化文件,有些不是。
对于那些结构化文件,要分析文件的结构不难,但是要分析具体的内容就很难了。
就我的迅雷该文件夹下
History6.dat
history6.dat.rescue
index.dat
只有这三个文件是结构化文件,文件的结构看得很清除,具体内容我没有去研究,楼主有想要分析些文件要把每个 存储流 读出来分析吧。
例如History6.dat的结构如下:
History6.dat
History
CAT_STREAM
_XLC0000000000000002
CAT_STREAM
_XLC0000000000000008
CAT_STREAM
_XLC0000000000000009
CAT_STREAM
_XLC057192f921571601
CAT_STREAM
_XLC057192f921575b03
CAT_STREAM
_XLC057192f921576b04
CAT_STREAM
_XLC057192f921577502
CAT_STREAM
_XLC0000000000000003
CAT_STREAM
Version
RunTasks

对于分析其它非结构化存储文件,那就太难了。
 
楼上的谢了呵呵 但是就是 我不大理解你那一堆字母和数字是什么意思呀??文件结构是怎么看出了的??
还有,什么是存储流哦?
 
结构化文件的结构就好像文件系统的目录树,
子存储:相当于文件夹
存储流:相当于文件
那些字母是我把 History6.dat 的文件结构展开到 TTreeView 后在保存下来的。
要检测一个文件是否为结构化文件可以用函数:StgIsStorageFile
uses
ActiveX

function CheckFile(const AFileName: String): Boolean;
var
ws: WideString;
begin
ws := AFileName;
Result := (StgIsStorageFile(PWideChar(ws)) = S_OK);
end;
 
用以下方法可以展开结构化文件的结构到 TTreeView
const
c_OpenStorage = STGM_READWRITE or STGM_DIRECT or STGM_SHARE_EXCLUSIVE;

function TForm1.ProcessFile(AFileName: WideString; tv: TTreeView): Boolean;
var
Hr: HResult;
Root: IStorage;
begin
Hr := StgOpenStorage(PWideChar(AFileName), nil,c_OpenStorage,nil,0,Root);
Result := SUCCEEDED(Hr);
if not Result then begin Exit;
tv.Items.Clear;
tv.Items.Add(nil,ExtractFileName(AFileName));
EnumInStorage(Root,tv,tv.Items[0]);
tv.Items[0].Expand(False);
end;


procedure TForm1.EnumInStorage(AStor: IStorage; tv: TTreeView; tn: TTreeNode);
var
Hr: HResult;
Enum: IEnumSTATSTG;
SubNode: TTreeNode;
StatStg: TStatStg;
SubStor: IStorage;
HrSubStor: HResult;
NumFetched: Integer;
begin
Hr := AStor.EnumElements(0,nil,0,Enum);
if not Succeeded(Hr) then Exit;
repeat
Hr := Enum.Next(1,StatStg,@NumFetched);
if(Hr <> S_OK) then continue;
case StatStg.dwType of
STGTY_STORAGE: begin //子存储
SubNode := tv.Items.AddChild(tn,'[' + String(StatStg.pwcsName) + ']');
HrSubStor := AStor.OpenStorage(StatStg.pwcsName,nil,c_OpenStorage,
nil,0,SubStor);
if(SUCCEEDED(HrSubStor)) then EnumInStorage(SubStor,tv,SubNode);
end;
STGTY_STREAM: tv.Items.AddChild(tn,StatStg.pwcsName); //存储流
end;
until (Hr <> S_OK);
end;
 
多人接受答案了。
 
后退
顶部