电脑太卡怎么办-softmanager怎么关闭
2023年4月2日发(作者:4k对齐)
RAR文件格式的研究
[摘要]随着科技的发展,RAR文件的使用已经渗透到人们生活,越来越多的工具被开发出
来处理压缩文件,例如Winrar,zip,gzip等等,这些工具都为用户提供了良好的管理界面环
境。RAR文件中蕴藏着丰富的个人信息,发掘分析其中的有用线索是调查取证的重要手段,
而其首要条件就是需要对RAR文件进行格式解析。本文利用RAR实验室提供的Unrar程序
对rar数据文件进行格式解析,从而为证据信息获取提供重要手段。
[关键词]Winrar文件压缩文件格式分析加密解密Unrar
TheResearchofRarFiles’Format
AbstractWiththerapiddevelopmentandapplicationofcomputerandnetwork,theusageofRARfiles
usingcomputermoreandmorefurious,moreandmoretoolswhichcomeoutfordealingwith
compressedfiles,suchaswinrar,zip,
ingandextractingtheuseablecluesisvery
eflyyouhavetoparsethefileformatof
functionswillbeanimportantinformation-gainingtools.
KeyWordsWinrarFilesCompressed-FileFormatsanalysisEncryption-and-decryptionUnrar
function
目录
引言......................................................................................................................................1
第一章RAR简介.............................................................................................................2
第二章RAR
2.1实例.........................................................................................................................3
2.2文件块结构............................................................................................................3
2.2.1标记块............................................................................................................4
2.2.2压缩文件头.....................................................................................................4
2.2.3文件头............................................................................................................5
2.2.4结尾块............................................................................................................8
2.2.5旧风格的块类型.............................................................................................8
第三章RAR文件解压流程.............................................................................................11
3.1压缩文件处理步骤.................................................................................................11
3.2压缩文件处理流程图..............................................................................................13
第四章加密RAR文件数据的处理..................................................................................14
4.1密钥的生成............................................................................................................14
4.2源数据的恢复........................................................................................................14
第五章Unrar源程序分析...............................................................................................15
5.1典型函数分析........................................................................................................15
5.1.1RAR外围处理函数.......................................................................................15
5.1.2文件头处理函数...........................................................................................18
5.1.3RAR文件数据处理函数................................................................................20
5.1.4其余处理函数...............................................................................................22
5.2RAR解压缩的代码.................................................................................................24
第六章总结与展望.........................................................................................................26
致谢语......................................................................................................错误!未定义书签。
参考文献............................................................................................................................28
RAR文件格式的研究
第1页
引言
随着科学技术水平的快速发展,越来越多的科研和工程应用部门对数据压缩和解压缩技
术提出了更高的要求。RAR作为现在最流行的数据压缩软件而备受关注,RAR的压缩技术,
密钥生成技术,加解密技术成为大家热衷研究的课题。
很多人都有过这样的经历:用RAR对自己的文件或文档进行有效地管理,对一些较重要
的进行加密处理,可是一段时间之后需要使用时,却忘记了密码,用过各种手段之后不得不
以失败告终。同样针对网络犯罪,传输经过加密后的RAR压缩文件,这时对RAR信息的取
证极为重要,从中挖掘、捕获直接的犯罪信息成为调查取证的重要手段。
利用RAR文件进行取证,首要的任务就是要解析RAR文件的数据格式以及解压的方法,
将经过加密的二进制文件数据还原成为课件的文本文档格式。
本文分为六个部分:
第一章RAR简介
第二章RAR压缩文件格式分析
第三章RAR文件解压流程
第四章加密RAR文件中数据的处理
第五章Unrar源程序分析
第六章总结与展望
RAR文件格式的研究
第2页
第一章RAR简介
RAR是一种专利文件格式,用于数据压缩与归档打包,开发者尤金·罗谢尔(Eugene
Roshal),所以RAR的全名是:RoshalARchive。首个公开版本RAR1.3发布于1993年[1]。
Roshal最初编写了Dos版本的编码和解码程序,后来被移植到很多平台,例如比较著
名的Windows平台上的WinRAR。EugeneRoshal公开了解码程序的源代码,但是编
码程序仍然是私有的[2]。
RAR因为其独特的压缩算法,能够在无损数据压缩的基础上,达到很高的压缩比,
同时压缩速度也不会很低[3]。因为RAR文件头需要占据一定空间,在数据压缩余地不
大时,压缩过的文件可能比源文件要大,除此之外RAR文件中可能会加入冗余数据用
户恢复记录,在压缩包本身受损但恢复记录够多是可以对受损压缩包进行恢复。但是R
AR最主要的一个优点是分卷压缩,可以把文件压缩目标分割到多个文件,并且很容易
从这样的分割的压缩文件中解压出源文件[4]。另外,RAR也可以把所有文件压缩到同一
个数据区以加大压缩比,代价就是解压一个单独的文件是必须解压其前面所有文件[5]。
RAR同时也拥有成熟的加密算法,2.0版本前加密算法未公开,2.0后使用AES算
法加密,在没有密码情况下目前只有暴力破解。
RAR文件格式的研究
第3页
第二章RAR压缩文件格式分析
前面一章简要介绍了RAR的历史,本章将会从RAR文件的格式入手,对一个标准的
RAR文件进行分析,深入了解RAR文件中的每一个块,甚至每一个字节的含义。
2.1实例
创建文件,添加进文件名为的文本文件,该文本文件中包含以下
字符串:Helloworld!
在Ultra中加载rar文件:
图文件的二进制编码
2.2文件块结构
压缩文件由可变长度的块组成。这些块的顺序可以变化,但是第一块必须是一个在压缩
文件头后的标记块[6]。
现在公开的块类型有[7]:标记块,压缩文件头块,文件头块,注释头,用户身份信息,
子块和恢复记录块等。
每一块均由下列结构开始:
HEAD_CRC2字节所有块或块部分的CRC
HEAD_TYPE1字节块类型
HEAD_FLAGS2字节块标记
HEAD_SIZE2字节块大小
如果块标记的第一位被置1的话,还存在:
ADD_SIZE4字节可选结构-增加块大小
所以文件大小的计算分两种情况,当块标记HEAD_FLAGS首位未置1,则总块大小就
是HEAD_SIZE,当块标记HEAD_FLAGS首位置1,可选结构存在,则总块大小为
RAR文件格式的研究
第4页
HEAD_SIZE+ADD_SIZE[8]。
2.2.1标记块(MARK_HEAD)
HEAD_CRC2字节总是0x6152
HEAD_TYPE1字节头类型0x72
HEAD_FLAGS2字节总是0x1a21
HEAD_SIZE2字节块大小=0x0007,即7个字节
Test文件:HEAD_CRC:
HEAD_TYPE:
HEAD_FLAGS:
HEAD_SIZE:
所以这里标记块的大小固定是7个字节,且是一个固定的字节序列。
2.2.2压缩文件头(MAIN_HEAD)
HEAD_CRC2字节HEAD_TYPE到RESERVED2的CRC结构
HEAD_TYPE1字节头类型:0x73
HEAD_FLAGS2字节位标记:
0x0001-卷属性(压缩文件卷)
0x0002-压缩文件注释存在
RAR3.x使用分开的注释块,不设置这个标记。
0x0004-压缩文件锁定属性
0x0008-固实属性(固实压缩文件)
0x0010-新的卷命名法则('')
0x0020-用户信息存在
RAR3.x不设置这个标记。
0x0040-恢复记录存在
0x0080-块头被加密
0x0100-第一卷(只有RAR3.0及以后版本设置)
其中的其它位为内部使用保留
RAR文件格式的研究
第5页
HEAD_SIZE2字节压缩文件头总大小(包括压缩文件注释)
RESERVED12字节保留
RESERVED24字节保留
对于压缩文件头里的位标记,如果它的第九位被置1,块头被加密,也就是通常所说的
加密文件名,打开这样加密的rar文件时,需要先输入密码才能看到压缩包内的文件列表。
图2-2压缩文件中压缩文件头的格式
这里头类型是0x73表示是压缩文件头块,位标记为0x0000未有位被置1,如果块头被
加密则位标记应为0x8000,文件头大小为0x0D00,所以这个压缩文件头块占用13个字节,
保留字节用0x00填充。
2.2.3文件头(FILE_HEAD)
HEAD_CRC2字节从HEAD_TYPE到FILEATTR的CRC结构和文件
名
HEAD_TYPE1字节头类型:0x74
HEAD_FLAGS2字节位标记:
0x01-文件在前一卷中继续
0x02-文件在后一卷中继续
0x04-文件使用密码加密
0x08-文件注释存在
RAR3.x使用分开的注释块,不设置这个标记。
0x10-前一文件信息被使用(固实标记)
(对于RAR2.0和以后版本)
765位(对于RAR2.0和以后版本)
RAR文件格式的研究
第6页
000-字典大小64KB
001-字典大小128KB
010-字典大小256KB
011-字典大小512KB
100-字典大小1024KB
101-字典大小2048KB
110-字典大小4096KB
111-文件作为字典
0x100-HIGH_PACK_SIZE和HIGH_UNP_SIZE结构存在。这些结构仅
用在非常大(大于2GB)的文档,对于小文件这些结构不存在。[9]
0x200-FILE_NAME包含用0隔开的普通的和Unicode编码的文件名。
所以NAME_SIZE结构长度等于普通文件名的长度加Unicode
编码文件名的长度再加1。
如果此标记存在,单FILE_NAME不包含0字节,它意味文件
使用UTF-8编码。[10]
0x400-头在文件名后包含附加的8位,它对于增加加密的安全性是必需
的。(所谓的'Salt')。
0x800-版本标记。他是老文件版本,版本号作为';n'附加到文件名后。
0x1000-扩展时间区域存在。
0x8000-此位总被设置,所以完整的块的大小是HEAD_SIZE+PACK_SIZE
(如果0x100位被设置,再加上HIGH_PACK_SIZE)
HEAD_SIZE2字节文件头的全部大小(包含文件名和注释)
PACK_SIZE4字节已压缩文件大小
UNP_SIZE4字节未压缩文件大小
HOST_OS1字节保存压缩文件使用的操作系统
0-MSDOS
1-OS/2
2-Win32
3-Unix
4-MacOS
RAR文件格式的研究
第7页
5-BeOS
FILE_CRC4字节文件CRC
FTIME4字节MSDOS标准格式的日期和时间
UNP_VER1字节解压文件所需要最低RAR版本
版本编码方法10*主版本+副版本。
METHOD1字节压缩方式
0x30-存储
0x31-最快压缩
0x32-快速压缩
0x33-标准压缩
0x34-较好压缩
0x35-最好压缩
NAME_SIZE2字节文件名大小
ATTR4字节文件属性
HIGH_PACK_SIZE4字节
压缩文件大小64位值的高4字节。可选值,只有HEAD_FLAGS中的0x100位被设
置才存在。[11]
HIGH_UNP_SIZE4字节
未压缩文件大小64位值的高4字节。可选值,只有HEAD_FLAGS中的0x100位被
设置才存在。
FILE_NAME文件名-NAME_SIZE字节大小字符串
SALT[12]8字节如果(HEAD_FLAGS&0x400)!=0则存在
EXT_TIME可变大小如果(HEAD_FLAGS&0x1000)!=0则存在
RAR文件格式的研究
第8页
图2-3压缩文件中文件头的格式[13]
在这个块中,存在两个crc值,一个是文件头块中从位标记到文件名这42个字节的校验,
后一个则是压缩包中所含文件的crc校验,解压时,会计算解压后生成文件的crc值,如果
等于这里的crc,则解压完成,如果不同,则报错中断。
2.2.4结尾块
HEAD_CRC2字节从HEAD_TYPE到HEAD_SIZE的crc校验值
HEAD_TYPE1字节头类型0x7B
HEAD_FLAGS2字节位标记
HEAD_SIZE2字节注释头大小
与标记块类似的是,结尾块也是一个固定字节串的块,依次是0xC43D7B00400700。
2.2.5旧风格的块类型
除以上格式块以外,还存在一些旧风格的块类型,不过在新的版本中已经不存在了。
注释头块:
HEAD_CRC2字节从HEAD_TYPE到COMM_CRC的crc校验值
HEAD_TYPE1字节头类型0x75
HEAD_FLAGS2字节位标记
HEAD_SIZE2字节注释头大小
UNP_SIZE2字节未压缩注释大小
UNP_VER1字节提取注释的RAR最低版本
RAR文件格式的研究
第9页
METHOD1字节压缩方法
COMM_CRC2字节注释CRC
COMMENT注释正文
额外信息块:
HEAD_CRC2字节块CRC
HEAD_TYPE1字节头类型0x76
HEAD_FLAGS2字节位标记
HEAD_SIZE2字节总块大小
INFO额外信息正文
字块[14]:
在压缩文件中任意文件头块后面都可以附加一个字块。这个字块依赖于它前面的这个主
块。当更新时新版本的RAR压缩包可能会删除或者移动这个字块。
字块包含下面几个部分:
HEAD_CRC2字节块crc
HEAD_TYPE1字节头类型:0x77
HEAD_FLAGS2字节位标记
HEAD_SIZE2字节总块大小
DATA_SIZE4字节总数据块大小
SUB_TYPE2字节子块类型
RESERVED1字节保留字段,必须为0
其余字段由SUB_TYPE决定其余字段类型
以SUB_TYPE为0x100为例,0x100定义子块类型为扩展属性类型,一般用于压缩一
些文件属性信息较详细的文件。
字段中可以包括以下格式:
HEAD_CRC2字节块CRC
HEAD_TYPE1字节头类型:0x77
HEAD_FLAGS2字节位标记
HEAD_SIZE2字节总块大小
DATA_SIZE4字节总数据大小
SUB_TYPE2字节0x100//定义子块为扩展属性类型
RAR文件格式的研究
第10页
[15]
RESERVED1字节全0//以上为子块中固定格式
UNP_SIZE4字节未压缩扩展属性大小//以下为扩展属性附加字段
UNP_VER1字节RAR版本信息
METHOD1字节压缩方法
EA_CRC4字节扩展属性CRC
RAR文件格式的研究
第11页
第三章RAR文件解压流程
上一章节分析了RAR文件的格式,本章要从RAR文件的解压开始,进一步分析一般情
况下是如何处理RAR文件的,详细了解文件解压处理的流程。
3.1压缩文件处理步骤
文件的处理过程可以简要分成下面几步,其中省略了压缩包的打开和关闭过程和内存分
配的步骤。RAR文件具体步骤如下:
1.读取和检查标记块
一般情况下就是需要读取文件首个7字节,检查是否与固定情况相同,如果相同
则表明这是一个RAR文件。
2.读取压缩文件头
这里读取紧接下来的7字节,首先检查第三个字节,即块类型是否为0x73,其次
检查位标记的两个字节,特别需要注意的是0x0008位和0x0080位。如果0x08位为1,
则压缩包使用固实压缩方法处理。
固实压缩包是用一种特殊压缩方式压缩的RAR压缩包,它把压缩包中的所有文
件当成一个连续数据流来看待。固实压缩只被RAR格式的压缩包支持,ZIP压缩包不支
持。使用固实压缩可以明显提高压缩比,特别是在添加大量的小文件时。
如果0x80位为1的话,则表示从下一个块开始所有数据均被加密处理,如果需
要解压,或者需要了解任何有关压缩文件的信息都需要进行数据恢复处理。
3.读取(先跳过HEAD_SIZE-sizeof(MAIN_HEAD)字节)
这里需要跳过压缩文件头,将指针指向下一个块,也就是文件头块的开始位置,
然后读取紧接下来的7字节。
4.如果发现压缩文件结尾则压缩文件处理终止,否则读取7字节到结构
HEAD_CRC,HEAD_TYPE,HEAD_FLAGS,HEAD_SIZE中。
接下来的这几个步骤构成了一个循环体,所以需要设置一个检验条件,因为每个
压缩包的最后一个块都是结尾块,而且是一个固定的字符串,这个时候只需要比较字符
串就可以判断是否压缩文件终止。
5.检查HEAD_TYPE
RAR文件格式的研究
第12页
ifHEAD_TYPE==0x74
读取文件头(开始的7字节必须读取)
读取或跳过HEAD_SIZE-sizeof(FILE_HEAD)字节
if(HEAD_FLAGS&0x100)
读取或跳过HIGH_PACK_SIZE*0x100000000+PACK_SIZE字节
else
读取或跳过PACK_SIZE字节
else
读取correspondingHEAD_TYPE块:
读取HEAD_SIZE-7字节
if(HEAD_FLAGS&0x8000)
读取ADD_SIZE字节
步骤4
RAR文件格式的研究
第13页
3.2压缩文件处理流程图
图3-1压缩文件处理流程图
文件处理中止
读取或跳过HIGH_PACK_SIZE*
0x100000000+PACK_SIZE字节
读取和检查标记块
读取压缩文件头
读取或跳过HEAD_SIZE-sizeof(MAIN_HEAD)字节
发现文件尾
读取7字节到结构HEAD_CRC,HEAD_TYPE,
HEAD_FLAGS,HEAD_SIZE中
检查头类型是否为74
HEAD_FLAGS&0x100==1
读取correspondingHEAD_TYPE块
读取HEAD_SIZE-7字节
if(HEAD_FLAGS&0x8000)读取
ADD_SIZE字节
读取文件头并且读取或跳过HEAD_SIZE-sizeof(FILE_HEAD)字节
读取或跳过PACK_SIZE字节
是
否
是
是
否
否
RAR文件格式的研究
第14页
第四章加密RAR文件数据的处理
从第一章的分析我们知道,当压缩文件头的位标记的0x0080位置1,或者文件头块的第
0x0004位置1,则RAR文件被加密,那么说明需要密码才能解压,所以需要先用密码将加
密文件中的数据恢复成原始压缩数据,才能用上面所述步骤解压。
4.1密钥的生成
将明文的密码与Salt一起,通过HASH算法,生成两个16字节的密钥。生成的2个16
字节中,其中一个是KEY,也就是AES算法的参数,另一个16字节为initVector,用于处
理加密数据的第一个16字节。
4.2源数据的恢复
加密RAR文件中的数据是采用AES算法的rijndael标准应用,由于AES算法是对称的,
所以解密的过程,是加密过程的逆运算。但解密时AES算法过程与加密所用的不一样,这是
是因为解密过程中由KEY生成的子密钥表不一样。仍然需要我们将密码输入,与salt一起生
成两个16字节密钥,KEY和initVector。然后才能用这两个参数处理下面的源数据恢复的操
作处理。
RAR文件格式的研究
第15页
第五章Unrar源程序分析
Unrar源程序是专门配套用来解压RAR文件的程序,以Linux版本为例,可以通过gcc
编译和link连接后生成可执行文件,生成的可执行文件可以用来解压任意RAR文件。
Unrar源程序包中包括58个头文件和58个C++文件,以及一个makefile编译文件,这
是RAR实验室首度公开的源码程序。
5.1典型函数分析
Unrar中常见的函数大概分外围处理函数,文件头处理函数,数据处理函数和其余处理
函数。
5.1.1RAR外围处理函数
====================================================================
HANDLEPASCALRAROpenArchive(structRAROpenArchiveData*ArchiveData)
====================================================================
用途
打开RAR压缩包,并且为压缩分配内存空间
参数
ArchiveData:指针指向RAROpenArchiveData结构体
结构体RAROpenArchiveData:
ArcName//压缩包文件名
输入参数,指向压缩包文件名,文件名必须是一个以0结尾的字符串
OpenMode//打开方式
输入参数
RAR文件格式的研究
第16页
OpenMode有以下几种打开方式
方式一:RAR_OM_LIST(只读取文件头)
这种打开方式只会读取压缩包中文件头字段信息
方式二:RAR_OM_EXTRACT
这种打开方式会解压出压缩包中所有文件并且进行CRC检验
RAR_OM_LIST_INCSPLIT
这种打开方式同样只会读取压缩包中的文件头字段信息。但是如果在这个
模式下打开压缩包,之后运行函数RARReadHeader[Ex]会返回所有文件的头信息,而在
RAR_OM_LIST的模式下这些头信息会自动忽略。所以以RAR_OM_LIST_INCSPLIT模式
处理RAR时,会得到一系列的文件头,这些文件头信息中间会用“filecontinuedfromprevious
volume”这样的字样隔开。
OpenResult//结果的返回信息
输出参数
一个RAR文件的打开可能出现以下几种结果:
CmtBuf
输入参数,指针指向压缩包注释信息的缓冲区,注释信息最大64Kb,同样也必须以0
结尾,如果注释大于分配的缓冲区大小,剩余信息就会被截断。如果CmtBuf被设置成0的
话,就不需要提取注释信息。
CmtBufSize
输入参数,指出压缩包注释信息缓冲区的大小
CmtSize
输出参数,实际读出的注释信息的大小,不能超过分配的空间大小
CmtState
输出参数,CmtState的状态有以下几种情况:
RAR文件格式的研究
第17页
====================================================================
HANDLEPASCALRAROpenArchiveEx(structRAROpenArchiveDataEx
*ArchiveData)
====================================================================
用途:
具体用途与RAROpenArchive相似,但是RAROpenArchiveDataEx能够允许使用
Unicode统一编码的文件名,并且能够返回压缩包标志位信息。
以下列出参数RAROpenArchiveDataEx结构体的信息,其余字段信息和函数返回值的
具体描述省略,可以参考RAROpenArchive。
====================================================================
intPASCALRARCloseArchive(HANDLEhArcData)
====================================================================
用途:
关闭RAR压缩包,并且释放所有分配的内存。一般在对压缩包的所有处理完成之后运
行,也可是压缩包处理过程出现错误被迫中止。
参数:
hArcData
这个参数是运行函数RAROpenArchive获取的数据。
RAR文件格式的研究
第18页
返回值
5.1.2文件头处理函数
====================================================================
intPASCALRARReadHeader(HANDLEhArcData,structRARHeaderData
*HeaderData)
====================================================================
用途
读取压缩文件头
参数
hArcData
这个参数是运行函数RAROpenArchive获取的数据。
HeaderData
指针指向RARHeaderData结构体:
结构体字段的参数具体描述:
ArcName
输出参数,输出RAR文件名,此文件名必须是以0为结尾的字符串。
FileName
RAR文件格式的研究
第19页
输出参数,输出以OEM(DOS)编码的文件名,也必须是以0为结尾的字符串。
Flags
输出参数,文件头块的位标记
PackSize
输出参数,标明文件压缩后的大小或者如果文件被分卷则表示每一分卷的大小。
UnpSize
输出参数,文件未压缩是的大小
HostOS
输出参数,保存压缩文件使用的操作系统
FileCRC
输出参数,未压缩文件的crc,如果文件被分卷,则之后最后一个分卷才含有正确的
crc值,并且只能用RAR_OM_LIST_INCSPLIT模式才能获取。
FileTime
输出参数,MSDOS标准格式的时间和日期
UnpVer
输出参数,解压文件所需要的最低RAR版本
Method
输出参数,压缩方式
FileAttr
输出参数,文件属性
CmtBuf
输入参数,注释缓冲区
CmtBufSize
输入参数,注释缓冲区大小
CmtSize
输出参数,读进缓冲区的注释大小
CmtState
输出参数
Returnvalues
RAR文件格式的研究
第20页
====================================================================
intPASCALRARReadHeaderEx(HANDLEhArcData,structRARHeaderDataEx
*HeaderData)
====================================================================
用途
与函数RARReadHeader类似
5.1.3RAR文件数据处理函数
====================================================================
intPASCALRARProcessFile(HANDLEhArcData,
intOperation,
char*DestPath,
RAR文件格式的研究
第21页
char*DestName)
====================================================================
用途
从当前位置移动到下一个文件的位置,并且从压缩包中解压出当前文件,如果是在
RAR_OM_LIST模式下运行的话,则不解压直接移动到下一个位置。
参数
hArcData
这个参数是运行函数RAROpenArchive获取的数据。
Operation
文件操作
有以下三种情况:
第一种:RAR_SKIP
直接移动到压缩包中的下一个文件处,但是如果是在RAR_OM_LIST模式下的话,
或者压缩包被固实处理,则当前文件还是会被处理,并且速度会慢于正常情况下的处理。
第二种:RAR_TEST
测试当前文件,移动到下一个文件处。同样如果是在RAR_OM_LIST模式下的话操
作将等同于RAR_SKIP。
第三种:RAR_EXTRACT
加压当前文件,移动到下一个文件处。同样如果是在RAR_OM_LIST模式下的话操
作将等同于RAR_SKIP。
DestPath
指针指向文件解压后要放到的路径,必须是一个以0为结尾的字符串。如果此参数被
设置成NULL,则在当前目录下解压缩。只有DestName是NULL是此参数才有意义。
DestName
指针指向一个包含全路径和名称的字符,这里路径为解压路径,名称为希望另存的名
称,如果为NULL,则使用默认的名称。如果DestName被定义了,则会自动更改压缩包的
路径和名称设置。
DestPath和DestName都必须用OEM编码。如果需要的话,可以调用CharToOem
函数将文本转化为OEM编码。
Returnvalues
RAR文件格式的研究
第22页
注:如果中途需要中止解压,可以直接输入return-1。
====================================================================
intPASCALRARProcessFileW(HANDLEhArcData,
intOperation,
wchar_t*DestPath,
wchar_t*DestName)
====================================================================
用途:
RARProcessFile的代码版本,功能与RARProcessFile类似
5.1.4其余处理函数
====================================================================
voidPASCALRARSetCallback(HANDLEhArcData,
intPASCAL(*CallbackProc)(UINTmsg,LPARAMUserData,
LPARAMP1,LPARAMP2),LPARAMUserData);
====================================================================
用途
设置一个用户定义的回调函数来处理Unrar活动。
参数
hArcData
这个参数是运行函数RAROpenArchive获取的数据。
CallbackProc
指针指向用户定义的回调函数
这个回调函数可以有下面几个参数
RAR文件格式的研究
第23页
Msg处理事件的类型。
UserData用户定义的传递给RARSetCallback的值
P1andP2事件依赖的参数
可以处理的事件类型有:
UCM_CHANGEVOLUME改变分卷,参数不同是有以下两种处理方式:
P1指向下一卷中以0为结尾的名称
P2该函数调用模式有:
UCM_PROCESSDATA处理解压后的数据,他可以用来
处理文件虽然被解压了却没有出现在磁盘上的情况。提示用户修
改参数值或者return-1中止操作。
P1可以用来指向解压后产生的数据,但是不能修改。
P2解压后的数据大小,可以用来检验它是否超过最高字典大小
(RAR3.8为4MB)
UCM_NEEDPASSWORD当文件名被加密时,提示必
须输入密码才能查看文件名。甚至在处理加密了压缩包而未加
密文件名的RAR文件是,它可以用来代替函数
RARSetPassword。
P1指针指向用来存储密码的缓冲区,如果要查看文件名,
这个缓冲区中的必须存在一个可行的密码
P2密码缓冲区的大小。
UserData
用户传递给回调函数的数据
Unrar中的任何其他函数都不能调用callback函数。
====================================================================
voidPASCALRARSetPassword(HANDLEhArcData,char*Password);
====================================================================
RAR文件格式的研究
第24页
用途
设置密码来解密文件
参数
hArcData
这个参数是运行函数RAROpenArchive获取的数据。
Password
必须指向以0为结尾的密码字符串。
====================================================================
voidPASCALRARGetDllVersion();
====================================================================
用途
返回API版本信息
5.2调用Unrar解压缩的代码
以上定义了程序中所有用到的数据类型。
RAR文件格式的研究
第25页
这一段代码是程序的主体,但只是解压中一个最基本情况的应用,会用到独特的库文件
。
RAR文件格式的研究
第26页
总结与展望
RAR文件解析研究范围十分广泛。在网络发展初期,由于带宽有限,人们不断地寻找可
以讲数据压缩同时又能完全恢复的技术,于是RAR文件压缩技术就有了初步的发展。随着信
息技术的发展,数据量成指数级增长,所传送的数据量大大增加,超过了网络带宽所能承受
的极限:同时,由于大量的文档和数据需要存储和备份,也给数据的存储带来极大地压力。
因此有必要RAR格式信息以及解压的具体内容,以促进压缩技术的研究。
本文从压缩文件的格式分析入手,对压缩包中的块结构分别进行解析,进而讨论了压缩
文件一般处理情况和加密情况下的处理方法,加密情况下需要先使用密码进行源数据的恢复,
最后分析了解压程序Unrar源码中一些常见函数的详细解析。
本文的研究还有许多不足和值得改进之处,以后的研究方向可以更深入的从以下方面考
虑:
1、研究更多可能存在的RAR格式。
2、分析研究整个解压过程的细节。
3、定位加密,解密模块,为将来有效地破解提供有用的信息。
致谢语
第27页
厦门大学本科论文参考文献
第28页
参考文献
[1]LangdonG/matofRARfiles[J].IEEETransOnComm,1981,29(6):858-867.
[2]陆军/刘大昕.RAR常数级压缩方法中随机文件字节频率统计研究[J].微电子学与计算
机,2007,24(9):49-51.
[3]ZivJ/rsalalgorithmforsequentialdatacompression[J].IEEETransactionson
InformationTheory,1977,23(3):337-343.
[4]VersionHistory.2005:Availableat/WinRARVersion.
[5]李世畅/杨朝军/陶洋.Linux嵌入式系统的优化[J].重庆邮电学报,2008,14(4):61-64.
[6]王平.LZW无损压缩算法的实现与研究[J].计算机工程,2007,28(8):98-99.
[7].2008:Availableat/.
[8]王虹.文件系统的管理方法[J].河南科学,2007,21(3):375-378.
[9]WinZipComputing,’sNewinWinZip9.0.2005:Availableat/
[10]陈浩.压缩工具[M].上海:上海科学技术出版公司,2008.
[11]RARlab:WinRARArchiver.2005:RAR—What’bleathttp://
/.
[12]尤霞光.信息技术基础[M].北京:中国电力出版社,2007.
[13]GaryS.-/RaphaelC.-ecurityoftheWinRARencryptionfeature[J]..
Secur,2006,5(2):115-123.
[14]洪锦魁.WinZip8.X压缩解压缩[M].北京:海洋出版社,2001.
[15]朱明方/朱峰.压缩软件精华工具集[M].北京:清华大学出版社,1996.
[16]胡鸣.Windows网络编程技术[M].北京:科学出版社,2008.
更多推荐
rar mac
发布评论