发明名称 一种基于内容的Rar文件雕复方法
摘要 本发明涉及一种基于内容的Rar文件雕复方法。目前的方法文件恢复效果不好。本发明方法首先根据用户输入信息定位到需进行文件雕复操作的磁盘分区,通过使用系统API函数获取磁盘分区的必要信息;其次在磁盘分区上搜索Rar文件的文件头块、文件数据块和文件尾块,并记录磁盘分区中的这三种数据块的起始位置;然后对产生的文件头块、文件数据块和文件尾块的集合进行预处理;最后雕复Rar文件。本发明方法运行速度快,精确度高,能在短时间内准确的搜索出组成Rar文件的各个部分。
申请公布号 CN102053880B 申请公布日期 2012.08.08
申请号 CN201110002234.6 申请日期 2011.01.07
申请人 杭州电子科技大学 发明人 徐明;卫英杰;郑宁;张海平;徐建
分类号 G06F11/14(2006.01)I 主分类号 G06F11/14(2006.01)I
代理机构 杭州求是专利事务所有限公司 33200 代理人 杜军
主权项 1.一种基于内容的Rar文件雕复方法,其特征在于该方法包括以下步骤:步骤(1)根据用户输入信息定位到需进行文件雕复操作的磁盘分区,通过使用系统API函数获取磁盘分区的必要信息,所述的必要信息包括磁盘分区的大小、扇区数和簇数目;步骤(2)在磁盘分区上搜索Rar文件的文件头块、文件数据块和文件尾块,并记录磁盘分区中的这三种数据块的起始位置;所述的文件头块包括Marker Block、Archive Header和Comment Block;所述的文件数据块包括File Header和Data;所述的文件尾块为End Block;对于文件头块搜索是通过字符串匹配方法寻找到Marker Block,跳过Marker Block,利用Head-CRC字段验证Archive Header和Comment Block确保文件头块的正确性;对于文件数据块搜索是先利用Head-Type字段通过字符串匹配的方法进行搜索,然后利用Head-CRC字段验证File Header;对于文件尾块搜索是通过字符串匹配的方法在磁盘分区上寻找该块;步骤(3)对步骤(2)产生的文件头块、文件数据块和文件尾块的集合进行预处理,具体是:通过文件头块、文件数据块和文件尾块的起始位置,利用各个块内部字段排列顺序,依次获取各个块的大小信息并保存;步骤(4)雕复Rar文件,具体包括以下步骤:4-1集合文件数据块,选择该集合<i>D</i>中起始位置最小的文件数据块作为当前处理块<i>X</i>,以<i>X</i>为首节点创建代表当前待恢复Rar文件的链表<i>L</i>,并删除集合<i>D</i>中的文件数据块<i>X</i>;4-2寻找起始位置<img file="2011100022346100001DEST_PATH_IMAGE001.GIF" wi="24" he="26" />,如果能寻找到起始位置<img file="95577DEST_PATH_IMAGE001.GIF" wi="24" he="26" />满足<img file="2011100022346100001DEST_PATH_IMAGE002.GIF" wi="250" he="29" />的文件数据块<i>Y</i>,则将<img file="75035DEST_PATH_IMAGE001.GIF" wi="24" he="26" />与<i>A</i><sub><i>X</i></sub>作比较,分为情况①和情况②;如果没有找到满足条件的<img file="917089DEST_PATH_IMAGE001.GIF" wi="24" he="26" />,则转入步骤4-4;情况①:<img file="2011100022346100001DEST_PATH_IMAGE003.GIF" wi="67" he="28" />;如果<img file="2011100022346100001DEST_PATH_IMAGE004.GIF" wi="114" he="30" />,那么表明文件数据块<i>X</i>与文件数据块<i>Y</i>之间存在断点,则转入步骤4-3,如果<img file="2011100022346100001DEST_PATH_IMAGE005.GIF" wi="111" he="30" />,那么表明文件数据块<i>X</i>与文件数据块<i>Y</i>是连续的,不存在断点,则将文件数据块<i>Y</i>作为当前处理块<i>X</i>,并将<i>Y</i>插入至链表<i>L</i>尾部,删除集合<i>D</i>中的文件数据块<i>Y,</i>转入步骤4-2;如果<img file="2011100022346100001DEST_PATH_IMAGE006.GIF" wi="111" he="30" />,那么表明文件数据块<i>X</i>与文件数据块<i>Y</i>不属于同一个Rar文件,那么转入步骤4-2;情况②:<img file="2011100022346100001DEST_PATH_IMAGE007.GIF" wi="70" he="28" />;转入步骤4-3;其中<i>A</i><sub><i>X</i></sub>代表文件数据块<i>X</i>的起始位置,<i>S</i><sub><i>X</i></sub>代表文件数据块<i>X</i>的大小,<i>C</i>代表一个簇的大小;4-3通过枚举解压测试方法寻找文件数据块的断点,具体是:根据文件数据块<i>X</i>的起始位置<i>A</i><sub><i>X</i></sub>和文件数据块<i>Y</i>的起始位置<i>A</i><sub><i>Y</i></sub>,从<img file="2011100022346100001DEST_PATH_IMAGE008.GIF" wi="132" he="32" />开始,至<img file="DEST_PATH_IMAGE009.GIF" wi="132" he="32" />结束,以一个簇大小为步长,设置固定大小的滑动窗口,利用Rar文件数据解码模块测试文件数据块,以此确定断点;如果没有找到断点,那么转入步骤4-2;如果找到了断点,那么将文件数据块<i>Y</i>作为当前处理块<i>X</i>,并将<i>Y</i>插入至链表<i>L</i>尾部,删除集合<i>D</i>中的文件数据块<i>Y,</i>转入步骤4-2;4-4确定当前待恢复Rar文件的文件尾块,具体是:集合文件尾块,如果能从该集合<i>E</i>中寻找到起始位置<img file="552777DEST_PATH_IMAGE001.GIF" wi="24" he="26" />满足<img file="429466DEST_PATH_IMAGE002.GIF" wi="250" he="29" />的文件尾块<i>Y</i>,则将<img file="251928DEST_PATH_IMAGE001.GIF" wi="24" he="26" />与<i>A</i><sub><i>X</i></sub>作比较,分为情况Ⅰ和情况Ⅱ;如果没有找到满足条件的文件尾块<i>Y</i>,则转入步骤4-7;情况Ⅰ:<img file="581278DEST_PATH_IMAGE003.GIF" wi="67" he="28" />;如果<img file="780179DEST_PATH_IMAGE004.GIF" wi="114" he="30" />,那么表明文件数据块<i>X</i>与文件尾块<i>Y</i>之间存在断点,则转入步骤4-5,如果<img file="449057DEST_PATH_IMAGE005.GIF" wi="111" he="30" />,那么表明文件数据块<i>X</i>与文件尾块<i>Y</i>是连续的,不存在断点,则将<i>Y</i>插入至链表<i>L</i>尾部,并删除集合<i>E</i>中的文件尾块<i>Y</i>,转入步骤4-6,如果<img file="504738DEST_PATH_IMAGE006.GIF" wi="111" he="30" />,那么表明文件数据块<i>X</i>与文件尾块<i>Y</i>不属于同一个Rar文件,那么转入步骤4-4;情况Ⅱ:<img file="259067DEST_PATH_IMAGE007.GIF" wi="70" he="28" />;转入步骤4-5;4-5通过枚举解压测试方法寻找文件数据块的断点,具体是:根据文件数据块<i>X</i>的起始位置<i>A</i><sub><i>X</i></sub>和文件尾块<i>Y</i>的起始位置<i>A</i><sub><i>Y</i></sub>,从<img file="58396DEST_PATH_IMAGE008.GIF" wi="132" he="32" />开始,至<img file="581781DEST_PATH_IMAGE009.GIF" wi="132" he="32" />结束,以一个簇大小为步长,设置固定大小的滑动窗口,利用Rar文件数据解码模块测试文件数据块,以此确定断点;如果没有找到断点,那么转入步骤4-4;如果找到了断点,那么表明找到了一个缺失文件头的Rar文件,将<i>Y</i>插入至链表<i>L</i>尾部,删除集合<i>E</i>中的文件尾块<i>Y</i>,转入步骤4-6;4-6将链表<i>L</i>的首节点作为文件数据块<i>Y</i>,集合文件头块,如果能从该集合<i>H</i>中寻找到起始位置<i>A</i><sub><i>X</i></sub>满足<img file="11626DEST_PATH_IMAGE002.GIF" wi="250" he="29" />的文件头块<i>X</i>,表明找到了一个完整的Rar文件,将文件头块<i>X</i>插入至链表<i>L</i>头部,删除集合<i>H</i>中的文件头块<i>X</i>,转入步骤4-9;如果没有找到满足条件的文件头块<i>X</i>,则转入步骤4-8;4-7为由步骤4-4产生缺失尾部的Rar文件添加构造的文件尾部,转入至步骤4-6;4-8为由步骤4-6产生缺失头部的Rar文件添加构造的文件头部,使其成为完整有效的Rar文件;4-9遍历链表<i>L,</i>输出完整的Rar文件,从而完成一个Rar文件的雕复;判断数据块集合<i>D</i>是否为空,如果数据块集合<i>D</i>为空,那么结束雕复过程,如果数据块集合<i>D</i>为非空,那么转入步骤4-1。
地址 310018 浙江省杭州市下沙高教园区2号大街