RAR文件格式的研究_第1頁
RAR文件格式的研究_第2頁
RAR文件格式的研究_第3頁
RAR文件格式的研究_第4頁
RAR文件格式的研究_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

RAR文件格式的研究[摘要]隨著科技的開展,RAR文件的使用已經(jīng)滲透到人們生活,越來越多的工具被開發(fā)出來處理壓縮文件,例如Winrar,zip,gzip等等,這些工具都為用戶提供了良好的管理界面環(huán)境。RAR文件中蘊(yùn)藏著豐富的個人信息,開掘分析其中的有用線索是調(diào)查取證的重要手段,而其首要條件就是需要對RAR文件進(jìn)行格式解析。本文利用RAR實驗室提供的Unrar程序?qū)ar數(shù)據(jù)文件進(jìn)行格式解析,從而為證據(jù)信息獲取提供重要手段。[關(guān)鍵詞]Winrar文件壓縮文件格式分析加密解密UnrarTheResearchofRarFiles’FormatAbstractWiththerapiddevelopmentandapplicationofcomputerandnetwork,theusageofRARfilesusingcomputermoreandmorefurious,moreandmoretoolswhichcomeoutfordealingwithcompressedfiles,suchaswinrar,zip,pzipetc.Thesetoolsallprovideafriendlyuser-interface.TherearerichpersonalinformationcontaininginRARfiles.Analyzingandextractingtheuseablecluesisverysignificantforcase-investigationandevidence-gaining.ButchieflyyouhavetoparsethefileformatofRARfiles.RARlabprividestheunrarfunctionswhichcanbeusedtodotheparsingwork.Thesefunctionswillbeanimportantinformation-gainingtools.KeyWordsWinrarFilesCompressed-FileFormatsanalysisEncryption-and-decryptionUnrarfunction目錄引言1第一章RAR簡介2第二章RAR2.1實例32.2文件塊結(jié)構(gòu)32.2.1標(biāo)記塊42.2.2壓縮文件頭42.2.3文件頭52.2.4結(jié)尾塊82.2.5舊風(fēng)格的塊類型8第三章RAR文件解壓流程113.1壓縮文件處理步驟113.2壓縮文件處理流程圖13第四章加密RAR文件數(shù)據(jù)的處理144.1密鑰的生成144.2源數(shù)據(jù)的恢復(fù)14第五章Unrar源程序分析155.1典型函數(shù)分析155.1.1RAR外圍處理函數(shù)155.1.2文件頭處理函數(shù)185.1.3RAR文件數(shù)據(jù)處理函數(shù)205.1.4其余處理函數(shù)225.2RAR解壓縮的代碼24第六章總結(jié)與展望26致謝語27參考文獻(xiàn)28引言隨著科學(xué)技術(shù)水平的快速開展,越來越多的科研和工程應(yīng)用部門對數(shù)據(jù)壓縮和解壓縮技術(shù)提出了更高的要求。RAR作為現(xiàn)在最流行的數(shù)據(jù)壓縮軟件而備受關(guān)注,RAR的壓縮技術(shù),密鑰生成技術(shù),加解密技術(shù)成為大家熱衷研究的課題。很多人都有過這樣的經(jīng)歷:用RAR對自己的文件或文檔進(jìn)行有效地管理,對一些較重要的進(jìn)行加密處理,可是一段時間之后需要使用時,卻忘記了密碼,用過各種手段之后不得不以失敗告終。同樣針對網(wǎng)絡(luò)犯罪,傳輸經(jīng)過加密后的RAR壓縮文件,這時對RAR信息的取證極為重要,從中挖掘、捕獲直接的犯罪信息成為調(diào)查取證的重要手段。利用RAR文件進(jìn)行取證,首要的任務(wù)就是要解析RAR文件的數(shù)據(jù)格式以及解壓的方法,將經(jīng)過加密的二進(jìn)制文件數(shù)據(jù)復(fù)原成為課件的文本文檔格式。本文分為六個局部:第一章RAR簡介第二章RAR壓縮文件格式分析第三章RAR文件解壓流程第四章加密RAR文件中數(shù)據(jù)的處理第五章Unrar源程序分析第六章總結(jié)與展望第一章 RAR簡介RAR是一種專利文件格式,用于數(shù)據(jù)壓縮與歸檔打包,開發(fā)者尤金·羅謝爾〔EugeneRoshal〕,所以RAR的全名是:RoshalARchive。首個公開版本發(fā)布于1993年[1]。Roshal最初編寫了Dos版本的編碼和解碼程序,后來被移植到很多平臺,例如比擬著名的Windows平臺上的WinRAR。EugeneRoshal公開了解碼程序的源代碼,但是編碼程序仍然是私有的[2]。RAR因為其獨特的壓縮算法,能夠在無損數(shù)據(jù)壓縮的根底上,到達(dá)很高的壓縮比,同時壓縮速度也不會很低[3]。因為RAR文件頭需要占據(jù)一定空間,在數(shù)據(jù)壓縮余地不大時,壓縮過的文件可能比源文件要大,除此之外RAR文件中可能會參加冗余數(shù)據(jù)用戶恢復(fù)記錄,在壓縮包本身受損但恢復(fù)記錄夠多是可以對受損壓縮包進(jìn)行恢復(fù)。但是RAR最主要的一個優(yōu)點是分卷壓縮,可以把文件壓縮目標(biāo)分割到多個文件,并且很容易從這樣的分割的壓縮文件中解壓出源文件[4]。另外,RAR也可以把所有文件壓縮到同一個數(shù)據(jù)區(qū)以加大壓縮比,代價就是解壓一個單獨的文件是必須解壓其前面所有文件[5]。RAR同時也擁有成熟的加密算法,版本前加密算法未公開,后使用AES算法加密,在沒有密碼情況下目前只有暴力破解。第二章 RAR壓縮文件格式分析前面一章簡要介紹了RAR的歷史,本章將會從RAR文件的格式入手,對一個標(biāo)準(zhǔn)的RAR文件進(jìn)行分析,深入了解RAR文件中的每一個塊,甚至每一個字節(jié)的含義。實例創(chuàng)立Helloworld.rar文件,添加進(jìn)文件名為的文本文件,該文本文件中包含以下字符串:Helloworld!在Ultra中加載rar文件:圖2-1 Helloworld.rar文件的二進(jìn)制編碼2.2文件塊結(jié)構(gòu)壓縮文件由可變長度的塊組成。這些塊的順序可以變化,但是第一塊必須是一個在壓縮文件頭后的標(biāo)記塊[6]?,F(xiàn)在公開的塊類型有[7]:標(biāo)記塊,壓縮文件頭塊,文件頭塊,注釋頭,用戶身份信息,子塊和恢復(fù)記錄塊等。每一塊均由以下結(jié)構(gòu)開始:HEAD_CRC 2字節(jié)所有塊或塊局部的CRCHEAD_TYPE 1字節(jié)塊類型HEAD_FLAGS 2字節(jié)塊標(biāo)記HEAD_SIZE2字節(jié)塊大小如果塊標(biāo)記的第一位被置1的話,還存在:ADD_SIZE4字節(jié)可選結(jié)構(gòu)-增加塊大小所以文件大小的計算分兩種情況,當(dāng)塊標(biāo)記HEAD_FLAGS首位未置1,那么總塊大小就是HEAD_SIZE,當(dāng)塊標(biāo)記HEAD_FLAGS首位置1,可選結(jié)構(gòu)存在,那么總塊大小為HEAD_SIZE+ADD_SIZE[8]。2.2.1標(biāo)記塊(MARK_HEAD)HEAD_CRC 2字節(jié)總是0x6152HEAD_TYPE 1字節(jié)頭類型0x72HEAD_FLAGS 2字節(jié)總是0x1a21HEAD_SIZE 2字節(jié)塊大小=0x0007,即7個字節(jié)Test文件:HEAD_CRC: HEAD_TYPE: HEAD_FLAGS: HEAD_SIZE:所以這里標(biāo)記塊的大小固定是7個字節(jié),且是一個固定的字節(jié)序列。2.2.2壓縮文件頭(MAIN_HEAD)HEAD_CRC 2字節(jié) HEAD_TYPE到RESERVED2的CRC結(jié)構(gòu)HEAD_TYPE 1字節(jié)頭類型:0x73HEAD_FLAGS 2字節(jié)位標(biāo)記:0x0001-卷屬性(壓縮文件卷)0x0002-壓縮文件注釋存在RAR3.x使用分開的注釋塊,不設(shè)置這個標(biāo)記。0x0004-壓縮文件鎖定屬性0x0008-固實屬性(固實壓縮文件)0x0010-新的卷命名法那么('volname.partN.rar')0x0020-用戶信息存在RAR3.x不設(shè)置這個標(biāo)記。0x0040-恢復(fù)記錄存在0x0080-塊頭被加密0x0100-第一卷(只有RAR3.0及以后版本設(shè)置)其中的其它位為內(nèi)部使用保存HEAD_SIZE 2字節(jié)壓縮文件頭總大小〔包括壓縮文件注釋〕RESERVED1 2字節(jié)保存RESERVED2 4字節(jié)保存對于壓縮文件頭里的位標(biāo)記,如果它的第九位被置1,塊頭被加密,也就是通常所說的加密文件名,翻開這樣加密的rar文件時,需要先輸入密碼才能看到壓縮包內(nèi)的文件列表。圖2-2 壓縮文件中壓縮文件頭的格式這里頭類型是0x73表示是壓縮文件頭塊,位標(biāo)記為0x0000未有位被置1,如果塊頭被加密那么位標(biāo)記應(yīng)為0x8000,文件頭大小為0x0D00,所以這個壓縮文件頭塊占用13個字節(jié),保存字節(jié)用0x00填充。2.2.3文件頭(FILE_HEAD)HEAD_CRC 2字節(jié)從HEAD_TYPE到FILEATTR的CRC結(jié)構(gòu)和文件名HEAD_TYPE 1字節(jié)頭類型:0x74HEAD_FLAGS 2字節(jié)位標(biāo)記:0x01-文件在前一卷中繼續(xù)0x02-文件在后一卷中繼續(xù)0x04-文件使用密碼加密0x08-文件注釋存在RAR3.x使用分開的注釋塊,不設(shè)置這個標(biāo)記。0x10-前一文件信息被使用(固實標(biāo)記)(對于RAR2.0和以后版本)765位(對于RAR2.0和以后版本)000-字典大小64KB001-字典大小128KB010-字典大小256KB011-字典大小512KB100-字典大小1024KB101-字典大小2048KB110-字典大小4096KB111-文件作為字典0x100-HIGH_PACK_SIZE和HIGH_UNP_SIZE結(jié)構(gòu)存在。這些結(jié)構(gòu)僅用在非常大(大于2GB)的文檔,對于小文件這些結(jié)構(gòu)不存在。[9]0x200-FILE_NAME包含用0隔開的普通的和Unicode編碼的文件名。所以NAME_SIZE結(jié)構(gòu)長度等于普通文件名的長度加Unicode編碼文件名的長度再加1。如果此標(biāo)記存在,單FILE_NAME不包含0字節(jié),它意味文件使用UTF-8編碼。[10]0x400-頭在文件名后包含附加的8位,它對于增加加密的平安性是必需的。(所謂的'Salt')。0x800-版本標(biāo)記。他是老文件版本,版本號作為';n'附加到文件名后。0x1000-擴(kuò)展時間區(qū)域存在。0x8000-此位總被設(shè)置,所以完整的塊的大小是HEAD_SIZE+PACK_SIZE(如果0x100位被設(shè)置,再加上HIGH_PACK_SIZE)HEAD_SIZE 2字節(jié)文件頭的全部大小(包含文件名和注釋)PACK_SIZE 4字節(jié)已壓縮文件大小UNP_SIZE 4字節(jié)未壓縮文件大小HOST_OS 1字節(jié)保存壓縮文件使用的操作系統(tǒng) 0-MSDOS1-OS/22-Win323-Unix4-MacOS5-BeOSFILE_CRC 4字節(jié)文件CRCFTIME 4字節(jié) MSDOS標(biāo)準(zhǔn)格式的日期和時間UNP_VER 1字節(jié)解壓文件所需要最低RAR版本版本編碼方法10*主版本+副版本。METHOD 1字節(jié)壓縮方式0x30-存儲0x31-最快壓縮0x32-快速壓縮0x33-標(biāo)準(zhǔn)壓縮0x34-較好壓縮0x35-最好壓縮NAME_SIZE 2字節(jié)文件名大小ATTR 4字節(jié)文件屬性HIGH_PACK_SIZE 4字節(jié)壓縮文件大小64位值的高4字節(jié)。可選值,只有HEAD_FLAGS中的0x100位被設(shè)置才存在。[11]HIGH_UNP_SIZE 4字節(jié)未壓縮文件大小64位值的高4字節(jié)。可選值,只有HEAD_FLAGS中的0x100位被設(shè)置才存在。FILE_NAME 文件名-NAME_SIZE字節(jié)大小字符串SALT[12] 8字節(jié)如果(HEAD_FLAGS&0x400)!=0那么存在EXT_TIME 可變大小如果(HEAD_FLAGS&0x1000)!=0那么存在圖2-3 壓縮文件中文件頭的格式[13]在這個塊中,存在兩個crc值,一個是文件頭塊中從位標(biāo)記到文件名這42個字節(jié)的校驗,后一個那么是壓縮包中所含文件的crc校驗,解壓時,會計算解壓后生成文件的crc值,如果等于這里的crc,那么解壓完成,如果不同,那么報錯中斷。2.2.4結(jié)尾塊HEAD_CRC 2字節(jié)從HEAD_TYPE到HEAD_SIZE的crc校驗值HEAD_TYPE 1字節(jié)頭類型0x7BHEAD_FLAGS2字節(jié)位標(biāo)記HEAD_SIZE 2字節(jié)注釋頭大小與標(biāo)記塊類似的是,結(jié)尾塊也是一個固定字節(jié)串的塊,依次是0xC43D7B00400700。2.2.5舊風(fēng)格的塊類型除以上格式塊以外,還存在一些舊風(fēng)格的塊類型,不過在新的版本中已經(jīng)不存在了。注釋頭塊:HEAD_CRC 2字節(jié)從HEAD_TYPE到COMM_CRC的crc校驗值HEAD_TYPE 1字節(jié)頭類型0x75HEAD_FLAGS 2字節(jié)位標(biāo)記HEAD_SIZE 2字節(jié)注釋頭大小UNP_SIZE2字節(jié)未壓縮注釋大小UNP_VER1字節(jié)提取注釋的RAR最低版本METHOD 1字節(jié)壓縮方法COMM_CRC 2字節(jié)注釋CRCCOMMENT注釋正文額外信息塊:HEAD_CRC 2字節(jié)塊CRCHEAD_TYPE 1字節(jié)頭類型0x76HEAD_FLAGS 2字節(jié)位標(biāo)記HEAD_SIZE 2字節(jié)總塊大小INFO額外信息正文字塊[14]:在壓縮文件中任意文件頭塊后面都可以附加一個字塊。這個字塊依賴于它前面的這個主塊。當(dāng)更新時新版本的RAR壓縮包可能會刪除或者移動這個字塊。字塊包含下面幾個局部:HEAD_CRC 2字節(jié)塊crcHEAD_TYPE 1字節(jié)頭類型:0x77HEAD_FLAGS 2字節(jié)位標(biāo)記HEAD_SIZE 2字節(jié)總塊大小DATA_SIZE 4字節(jié)總數(shù)據(jù)塊大小SUB_TYPE 2字節(jié)子塊類型RESERVED 1字節(jié)保存字段,必須為0其余字段由SUB_TYPE決定其余字段類型以SUB_TYPE為0x100為例,0x100定義子塊類型為擴(kuò)展屬性類型,一般用于壓縮一些文件屬性信息較詳細(xì)的文件。字段中可以包括以下格式:HEAD_CRC 2字節(jié)塊CRCHEAD_TYPE 1字節(jié)頭類型:0x77HEAD_FLAGS 2字節(jié)位標(biāo)記HEAD_SIZE 2字節(jié)總塊大小DATA_SIZE 4字節(jié)總數(shù)據(jù)大小SUB_TYPE 2字節(jié)0x100 //定義子塊為擴(kuò)展屬性類型[15]RESERVED 1字節(jié)全0 //以上為子塊中固定格式UNP_SIZE4字節(jié)未壓縮擴(kuò)展屬性大小 //以下為擴(kuò)展屬性附加字段UNP_VER1字節(jié) RAR版本信息METHOD 1字節(jié)壓縮方法EA_CRC 4字節(jié)擴(kuò)展屬性CRC第三章 RAR文件解壓流程上一章節(jié)分析了RAR文件的格式,本章要從RAR文件的解壓開始,進(jìn)一步分析一般情況下是如何處理RAR文件的,詳細(xì)了解文件解壓處理的流程。3.1壓縮文件處理步驟文件的處理過程可以簡要分成下面幾步,其中省略了壓縮包的翻開和關(guān)閉過程和內(nèi)存分配的步驟。RAR文件具體步驟如下:1.讀取和檢查標(biāo)記塊一般情況下就是需要讀取文件首個7字節(jié),檢查是否與固定情況相同,如果相同那么說明這是一個RAR文件。2.讀取壓縮文件頭這里讀取緊接下來的7字節(jié),首先檢查第三個字節(jié),即塊類型是否為0x73,其次檢查位標(biāo)記的兩個字節(jié),特別需要注意的是0x0008位和0x0080位。如果0x08位為1,那么壓縮包使用固實壓縮方法處理。固實壓縮包是用一種特殊壓縮方式壓縮的RAR壓縮包,它把壓縮包中的所有文件當(dāng)成一個連續(xù)數(shù)據(jù)流來看待。固實壓縮只被RAR格式的壓縮包支持,ZIP壓縮包不支持。使用固實壓縮可以明顯提高壓縮比,特別是在添加大量的小文件時。如果0x80位為1的話,那么表示從下一個塊開始所有數(shù)據(jù)均被加密處理,如果需要解壓,或者需要了解任何有關(guān)壓縮文件的信息都需要進(jìn)行數(shù)據(jù)恢復(fù)處理。3.讀取〔先跳過HEAD_SIZE-sizeof(MAIN_HEAD)字節(jié)〕這里需要跳過壓縮文件頭,將指針指向下一個塊,也就是文件頭塊的開始位置,然后讀取緊接下來的7字節(jié)。4.如果發(fā)現(xiàn)壓縮文件結(jié)尾那么壓縮文件處理終止,否那么讀取7字節(jié)到結(jié)構(gòu)HEAD_CRC,HEAD_TYPE,HEAD_FLAGS,HEAD_SIZE中。接下來的這幾個步驟構(gòu)成了一個循環(huán)體,所以需要設(shè)置一個檢驗條件,因為每個壓縮包的最后一個塊都是結(jié)尾塊,而且是一個固定的字符串,這個時候只需要比擬字符串就可以判斷是否壓縮文件終止。5.檢查HEAD_TYPEifHEAD_TYPE==0x74讀取文件頭(開始的7字節(jié)必須讀取)讀取或跳過HEAD_SIZE-sizeof(FILE_HEAD)字節(jié)if(HEAD_FLAGS&0x100)讀取或跳過HIGH_PACK_SIZE*0x100000000+PACK_SIZE字節(jié)else讀取或跳過PACK_SIZE字節(jié)else讀取correspondingHEAD_TYPE塊:讀取HEAD_SIZE-7字節(jié)if(HEAD_FLAGS&0x8000)讀取ADD_SIZE字節(jié)6.goto步驟43.2壓縮文件處理流程圖文件處理中止文件處理中止讀取或跳過HIGH_PACK_SIZE*0x100000000+PACK_SIZE字節(jié)讀取和檢查標(biāo)記塊讀取壓縮文件頭讀取或跳過HEAD_SIZE-sizeof(MAIN_HEAD)字節(jié)發(fā)現(xiàn)文件尾讀取7字節(jié)到結(jié)構(gòu)HEAD_CRC,HEAD_TYPE,HEAD_FLAGS,HEAD_SIZE中檢查頭類型是否為74HEAD_FLAGS&0x100==1讀取correspondingHEAD_TYPE塊讀取HEAD_SIZE-7字節(jié)if(HEAD_FLAGS&0x8000)讀取ADD_SIZE字節(jié)讀取文件頭并且讀取或跳過HEAD_SIZE-sizeof(FILE_HEAD)字節(jié)讀取或跳過PACK_SIZE字節(jié)是否是是否否圖3-1 壓縮文件處理流程圖第四章 加密RAR文件數(shù)據(jù)的處理從第一章的分析我們知道,當(dāng)壓縮文件頭的位標(biāo)記的0x0080位置1,或者文件頭塊的第0x0004位置1,那么RAR文件被加密,那么說明需要密碼才能解壓,所以需要先用密碼將加密文件中的數(shù)據(jù)恢復(fù)成原始壓縮數(shù)據(jù),才能用上面所述步驟解壓。4.1密鑰的生成將明文的密碼與Salt一起,通過HASH算法,生成兩個16字節(jié)的密鑰。生成的2個16字節(jié)中,其中一個是KEY,也就是AES算法的參數(shù),另一個16字節(jié)為initVector,用于處理加密數(shù)據(jù)的第一個16字節(jié)。4.2源數(shù)據(jù)的恢復(fù)加密RAR文件中的數(shù)據(jù)是采用AES算法的rijndael標(biāo)準(zhǔn)應(yīng)用,由于AES算法是對稱的,所以解密的過程,是加密過程的逆運(yùn)算。但解密時AES算法過程與加密所用的不一樣,這是是因為解密過程中由KEY生成的子密鑰表不一樣。仍然需要我們將密碼輸入,與salt一起生成兩個16字節(jié)密鑰,KEY和initVector。然后才能用這兩個參數(shù)處理下面的源數(shù)據(jù)恢復(fù)的操作處理。Unrar源程序分析Unrar源程序是專門配套用來解壓RAR文件的程序,以Linux版本為例,可以通過gcc編譯和link連接后生成可執(zhí)行文件,生成的可執(zhí)行文件可以用來解壓任意RAR文件。Unrar源程序包中包括58個頭文件和58個C++文件,以及一個makefile編譯文件,這是RAR實驗室首度公開的源碼程序。5.1典型函數(shù)分析Unrar中常見的函數(shù)大概分外圍處理函數(shù),文件頭處理函數(shù),數(shù)據(jù)處理函數(shù)和其余處理函數(shù)。5.1.1RAR外圍處理函數(shù)====================================================================HANDLEPASCALRAROpenArchive(structRAROpenArchiveData*ArchiveData)====================================================================用途翻開RAR壓縮包,并且為壓縮分配內(nèi)存空間參數(shù)ArchiveData:指針指向RAROpenArchiveData結(jié)構(gòu)體結(jié)構(gòu)體RAROpenArchiveData:ArcName //壓縮包文件名輸入?yún)?shù),指向壓縮包文件名,文件名必須是一個以0結(jié)尾的字符串OpenMode //翻開方式輸入?yún)?shù)OpenMode有以下幾種翻開方式方式一:RAR_OM_LIST〔只讀取文件頭〕這種翻開方式只會讀取壓縮包中文件頭字段信息方式二:RAR_OM_EXTRACT這種翻開方式會解壓出壓縮包中所有文件并且進(jìn)行CRC檢驗RAR_OM_LIST_INCSPLIT這種翻開方式同樣只會讀取壓縮包中的文件頭字段信息。但是如果在這個模式下翻開壓縮包,之后運(yùn)行函數(shù)RARReadHeader[Ex]會返回所有文件的頭信息,而在RAR_OM_LIST的模式下這些頭信息會自動忽略。所以以RAR_OM_LIST_INCSPLIT模式處理RAR時,會得到一系列的文件頭,這些文件頭信息中間會用“filecontinuedfrompreviousvolume〞這樣的字樣隔開。OpenResult //結(jié)果的返回信息輸出參數(shù)一個RAR文件的翻開可能出現(xiàn)以下幾種結(jié)果:CmtBuf輸入?yún)?shù),指針指向壓縮包注釋信息的緩沖區(qū),注釋信息最大64Kb,同樣也必須以0結(jié)尾,如果注釋大于分配的緩沖區(qū)大小,剩余信息就會被截斷。如果CmtBuf被設(shè)置成0的話,就不需要提取注釋信息。CmtBufSize輸入?yún)?shù),指出壓縮包注釋信息緩沖區(qū)的大小CmtSize輸出參數(shù),實際讀出的注釋信息的大小,不能超過分配的空間大小CmtState輸出參數(shù),CmtState的狀態(tài)有以下幾種情況:====================================================================HANDLEPASCALRAROpenArchiveEx(structRAROpenArchiveDataEx*ArchiveData)====================================================================用途:具體用途與RAROpenArchive相似,但是RAROpenArchiveDataEx能夠允許使用Unicode統(tǒng)一編碼的文件名,并且能夠返回壓縮包標(biāo)志位信息。以以下出參數(shù)RAROpenArchiveDataEx結(jié)構(gòu)體的信息,其余字段信息和函數(shù)返回值的具體描述省略,可以參考RAROpenArchive。====================================================================intPASCALRARCloseArchive(HANDLEhArcData)====================================================================用途:關(guān)閉RAR壓縮包,并且釋放所有分配的內(nèi)存。一般在對壓縮包的所有處理完成之后運(yùn)行,也可是壓縮包處理過程出現(xiàn)錯誤被迫中止。參數(shù):hArcData這個參數(shù)是運(yùn)行函數(shù)RAROpenArchive獲取的數(shù)據(jù)。返回值5.1.2文件頭處理函數(shù)====================================================================intPASCALRARReadHeader(HANDLEhArcData,structRARHeaderData*HeaderData)====================================================================用途讀取壓縮文件頭參數(shù)hArcData這個參數(shù)是運(yùn)行函數(shù)RAROpenArchive獲取的數(shù)據(jù)。HeaderData指針指向RARHeaderData結(jié)構(gòu)體:結(jié)構(gòu)體字段的參數(shù)具體描述:ArcName輸出參數(shù),輸出RAR文件名,此文件名必須是以0為結(jié)尾的字符串。FileName輸出參數(shù),輸出以O(shè)EM(DOS)編碼的文件名,也必須是以0為結(jié)尾的字符串。Flags輸出參數(shù),文件頭塊的位標(biāo)記PackSize輸出參數(shù),標(biāo)明文件壓縮后的大小或者如果文件被分卷那么表示每一分卷的大小。UnpSize輸出參數(shù),文件未壓縮是的大小HostOS輸出參數(shù),保存壓縮文件使用的操作系統(tǒng)FileCRC輸出參數(shù),未壓縮文件的crc,如果文件被分卷,那么之后最后一個分卷才含有正確的crc值,并且只能用RAR_OM_LIST_INCSPLIT模式才能獲取。FileTime輸出參數(shù),MSDOS標(biāo)準(zhǔn)格式的時間和日期UnpVer輸出參數(shù),解壓文件所需要的最低RAR版本Method輸出參數(shù),壓縮方式FileAttr輸出參數(shù),文件屬性CmtBuf輸入?yún)?shù),注釋緩沖區(qū)CmtBufSize輸入?yún)?shù),注釋緩沖區(qū)大小CmtSize輸出參數(shù),讀進(jìn)緩沖區(qū)的注釋大小CmtState輸出參數(shù)Returnvalues====================================================================intPASCALRARReadHeaderEx(HANDLEhArcData,structRARHeaderDataEx*HeaderData)====================================================================用途與函數(shù)RARReadHeader類似5.1.3RAR文件數(shù)據(jù)處理函數(shù)====================================================================intPASCALRARProcessFile(HANDLEhArcData,intOperation,char*DestPath,char*DestName)====================================================================用途從當(dāng)前位置移動到下一個文件的位置,并且從壓縮包中解壓出當(dāng)前文件,如果是在RAR_OM_LIST模式下運(yùn)行的話,那么不解壓直接移動到下一個位置。參數(shù)hArcData這個參數(shù)是運(yùn)行函數(shù)RAROpenArchive獲取的數(shù)據(jù)。Operation文件操作有以下三種情況:第一種:RAR_SKIP直接移動到壓縮包中的下一個文件處,但是如果是在RAR_OM_LIST模式下的話,或者壓縮包被固實處理,那么當(dāng)前文件還是會被處理,并且速度會慢于正常情況下的處理。第二種:RAR_TEST測試當(dāng)前文件,移動到下一個文件處。同樣如果是在RAR_OM_LIST模式下的話操作將等同于RAR_SKIP。第三種:RAR_EXTRACT加壓當(dāng)前文件,移動到下一個文件處。同樣如果是在RAR_OM_LIST模式下的話操作將等同于RAR_SKIP。DestPath指針指向文件解壓后要放到的路徑,必須是一個以0為結(jié)尾的字符串。如果此參數(shù)被設(shè)置成NULL,那么在當(dāng)前目錄下解壓縮。只有DestName是NULL是此參數(shù)才有意義。DestName指針指向一個包含全路徑和名稱的字符,這里路徑為解壓路徑,名稱為希望另存的名稱,如果為NULL,那么使用默認(rèn)的名稱。如果DestName被定義了,那么會自動更改壓縮包的路徑和名稱設(shè)置。DestPath和DestName都必須用OEM編碼。如果需要的話,可以調(diào)用CharToOem函數(shù)將文本轉(zhuǎn)化為OEM編碼。Returnvalues注:如果中途需要中止解壓,可以直接輸入return-1。====================================================================intPASCALRARProcessFileW(HANDLEhArcData,intOperation,wchar_t*DestPath,wchar_t*DestName)====================================================================用途:RARProcessFile的代碼版本,功能與RARProcessFile類似其余處理函數(shù)====================================================================voidPASCALRARSetCallback(HANDLEhArcData,intPASCAL(*CallbackProc)(UINTmsg,LPARAMUserData,LPARAMP1,LPARAMP2),LPARAMUserData);====================================================================用途設(shè)置一個用戶定義的回調(diào)函數(shù)來處理Unrar活動。參數(shù)hArcData這個參數(shù)是運(yùn)行函數(shù)RAROpenArchive獲取的數(shù)據(jù)。CallbackProc指針指向用戶定義的回調(diào)函數(shù)這個回調(diào)函數(shù)可以有下面幾個參數(shù)Msg處理事件的類型。UserData用戶定義的傳遞給RARSetCallback的值P1andP2事件依賴的參數(shù)可以處理的事件類型有:UCM_CHANGEVOLUME改變分卷,參數(shù)不同是有以下兩種處理方式:P1指向下一卷中以0為結(jié)尾的名稱P2該函數(shù)調(diào)用模式有:UCM_PROCESSDATA處理解壓后的數(shù)據(jù),他可以用來處理文件雖然被解壓了卻沒有出現(xiàn)在磁盤上的情況。提示用戶修改參數(shù)值或者return-1中止操作。P1可以用來指向解壓后產(chǎn)生的數(shù)據(jù),但是不能修改。P2解壓后的數(shù)據(jù)大小,可以用來檢驗它是否超過最高字典大小〔為4MB〕UCM_NEEDPASSWORD當(dāng)文件名被加密時,提示必須輸入密碼才能查看文件名。甚至在處理加密了壓縮包而未加密文件名的RAR文件是,它可以用來代替函數(shù)RARSetPassword。P1指針指向用來存儲密碼的緩沖區(qū),如果要查看文件名,這個緩沖區(qū)中的必須存在一個可行的密碼P2密碼緩沖區(qū)的大小。UserData用戶傳遞給回調(diào)函數(shù)的數(shù)據(jù)Unrar中的任何其他函數(shù)都不能調(diào)用callback函數(shù)。====================================================================voidPASCALRARSetPassword(HANDLEhArcData,char*Password);====================================================================用途設(shè)置密碼來解密文件參數(shù)hArcData這個參數(shù)是運(yùn)行函數(shù)RAROpenArchive獲取的數(shù)據(jù)。Password必須指向以0為結(jié)尾的密碼字符串。=======================

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論