电脑太卡怎么办-softmanager怎么关闭

rar mac
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