rar壓縮文件加密過(guò)程及破解可行性分析v2

上傳人:小** 文檔編號(hào):48251349 上傳時(shí)間:2022-01-01 格式:DOC 頁(yè)數(shù):21 大?。?91KB
收藏 版權(quán)申訴 舉報(bào) 下載
rar壓縮文件加密過(guò)程及破解可行性分析v2_第1頁(yè)
第1頁(yè) / 共21頁(yè)
rar壓縮文件加密過(guò)程及破解可行性分析v2_第2頁(yè)
第2頁(yè) / 共21頁(yè)
rar壓縮文件加密過(guò)程及破解可行性分析v2_第3頁(yè)
第3頁(yè) / 共21頁(yè)

下載文檔到電腦,查找使用更方便

24 積分

下載資源

還剩頁(yè)未讀,繼續(xù)閱讀

資源描述:

《rar壓縮文件加密過(guò)程及破解可行性分析v2》由會(huì)員分享,可在線閱讀,更多相關(guān)《rar壓縮文件加密過(guò)程及破解可行性分析v2(21頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

1、Rar壓縮文件加密過(guò)程及破解可行性分析1. rar壓縮文件簡(jiǎn)介Rar是一種目前廣泛使用的文件壓縮格式,它能夠?qū)崿F(xiàn)對(duì)文件的壓縮、加密和分塊等功 能。Rar格式的壓縮文件以.rar后綴結(jié)束,其他常見(jiàn)的文件壓縮格式還有zip格式。與ZIP格式壓縮文件相比,同樣是無(wú)損數(shù)據(jù)壓縮,RAR文件通常壓縮比要高, 但是壓縮速度較慢。 因?yàn)镽AR文件頭也要占據(jù)一定空間,在數(shù)據(jù)壓縮余地不大時(shí),壓縮過(guò)的文件可能比原文件 要大。RAR的一個(gè)主要優(yōu)點(diǎn)是可以把文件壓縮目標(biāo)分割到多個(gè)文件,并且很容易從這樣的 分割的壓縮文件解壓出源文件。另外,RAR也支持緊縮格式,把所有文件壓縮到同一個(gè)數(shù)據(jù)區(qū)以加大壓縮比,代價(jià)是解壓一個(gè)單獨(dú)的

2、文件時(shí)必須解壓其前面的所有文件。RAR中也可以加入冗余的修復(fù)信息,在文件損壞但是修復(fù)信息足夠完好時(shí)可以對(duì)壓縮包進(jìn)行修復(fù)。很多工具軟件都可以用來(lái)產(chǎn)生Rar格式的壓縮文件,但目前最常用的是 Winrar,軟件截圖如下圖1所示。圖1 Winrar工具截圖目前Rar壓縮格式的最新版本是5.30,并且不同版本產(chǎn)生的壓縮文件的格式會(huì)有所不同。在上圖1 “壓縮文件格式”選項(xiàng)中選擇“ RAR ”表示產(chǎn)生的壓縮文件采用Rar 4.0版本壓縮文件格式,而“ RAR5 ”表示采用Rar 5.0版本壓縮文件格式??紤]到這兩種壓縮格式目前都 在廣泛使用,在后面的介紹中我們會(huì)對(duì)這兩種壓縮文件的加密過(guò)程分別進(jìn)行介紹,但重點(diǎn)

3、以Rar5.0壓縮格式為主。2. Rar壓縮文件格式Rar 5.0版本的壓縮文件格式如下圖2所示。一個(gè)壓縮文件由許多不同的塊(頭)組成,淺綠色部分表示可選塊,紫色部分是必選塊。下面分別對(duì)主要塊的功能進(jìn)行簡(jiǎn)要介紹。Self-extract ing module (opti on al)RAR 5.0 sig natureArchive en crypti on header (opti on al)Main archive headerArchive comme nt service header (opti on al)File header 1Service headers (NTFS AC

4、L, streams, etc.) for precedi ng file(opti on al)J JFile header NService headers (NTFS ACL, streams, etc.) for precedi ng file(opti on al)Recovery record (opti on al)End of archive header圖2 Rar 5.0壓縮文件格式Self-extracting module :可選塊,表示壓縮文件是否可以自行解壓縮。當(dāng)在使用 Winrar對(duì)文件進(jìn)行壓縮時(shí),如果選擇了 “創(chuàng)建自解壓格式壓縮文件”選項(xiàng),生成的壓縮文件則是一個(gè)

5、可執(zhí)行文件,不需要專門的壓縮工具來(lái)進(jìn)行解壓縮操作,執(zhí)行該文件則會(huì)對(duì)壓縮的文件進(jìn)行解壓縮,還原出被壓縮的文件。RAR 5.0 signature簽名塊,該塊的作用是區(qū)分壓縮文件的版本。 對(duì)于RAR 5.0 版本,該塊共有 8個(gè)字節(jié),內(nèi)容為 0x52 0x61 0x72 0x21 0x1A 0x07 0x01 0x00。如果是 4.0 版本,則該塊長(zhǎng)度是 7 個(gè)字節(jié):0x52 0x61 0x72 0x21 0x1A 0x07 0x00。Archive encryption header :加密頭,該頭保存解密壓縮文件所需要信息,包括對(duì)用戶 輸入密碼的驗(yàn)證、對(duì)加密數(shù)據(jù)解密等方面的信息。下面對(duì)該頭的各

6、個(gè)字段進(jìn)行具體說(shuō)明。字段名稱類型介紹Header CRC32uin t32整個(gè)加密頭的CRC校驗(yàn)值Header sizevint整個(gè)加密頭的長(zhǎng)度,以字節(jié)為單位Header typevint用來(lái)區(qū)分不冋的頭部類型,該頭類型為4Header flagsvintFlags com mon for all headers:0x0001Extra area is prese nt in the end of header.0x0002Data area is prese nt in the end of header.0x0004Blocks with unknown type and this fla

7、g mustbe skipped whe n updati ng an archive.0x0008Data area is con ti nuing from previous volume.0x0010Data area is con ti nuing in n ext volume.0x0020Block depe nds on precedi ng file block.0x0040Preserve a child block if host block ismodified.En cryptio n versionvint加密算法版本。目前只支持AES-256En cryptio n

8、 flagsvint0x0001 Password check data is prese nt.KDF cou nt1字節(jié)PBKDF2函數(shù)的迭代次數(shù),和版本有關(guān)Salt16字節(jié):PBKDF2函數(shù)的鹽Check Value12字節(jié)用來(lái)驗(yàn)證密碼的有效性。Main archive header :主頭,包含整個(gè)壓縮文件的一些基本屬性信息,各個(gè)字段的含義 如下表所示。字段名稱類型介紹Header CRC32uin t32整個(gè)加密頭的CRC校驗(yàn)值Header sizevint整個(gè)加密頭的長(zhǎng)度,以字節(jié)為單位Header typevint用來(lái)區(qū)分不冋的頭部類型,該頭類型為1Header flagsvint

9、和加密頭該字段含義一樣Extra area sizevintExtra area大小。當(dāng)0x0001 header flag設(shè)置時(shí)該字段存 在。Archive flagsvint0x0001Volume. Archive is a part of multivolume set.0x0002Volume number field is present. This flag isprese nt in all volumes except first.0x0004 Solid archive.0x0008 Recovery record is prese nt.0x0010 Locked arc

10、hive.Volume nu mbervintOptional field, present only if 0x0002 archive flag is setExtra areaOptional area containing additional header fields, present only if 0x0001 header flag is set.File header:文件頭,用來(lái)具體描述被壓縮的文件各方面的信息,每個(gè)被壓縮的文件對(duì) 應(yīng)一個(gè)文件頭,各字段含義如下表所示。字段名稱類型介紹Header CRC32uin t32整個(gè)加密頭的CRC校驗(yàn)值Header sizevin

11、t整個(gè)加密頭的長(zhǎng)度,以字節(jié)為單位Header typevint用來(lái)區(qū)分不冋的頭部類型,該頭類型為2Header flagsvint和加密頭該字段含義一樣Extra area sizevintExtra area大小。當(dāng)0x0001 header flag設(shè)置時(shí)該字段存 在。Data sizevint數(shù)據(jù)區(qū)域的大小File flagsvint0x0001Directory file system object (file header onl y).0x0002 Time field in Unix format is prese nt.0x0004 CRC32 field is prese n

12、t.0x0008 Un packed size is unknown.Un packed sizevint解壓文件大小Attributesvint操作系統(tǒng)特定的文件屬性mtimeuin t32File modificati on time in Un ix time format. Opti on al, prese nt if 0x0002 file flag is set.Data CRC32uin t32可選項(xiàng),文件的 CRC校驗(yàn)值。Compressi on in formatio nvint壓縮算法、參數(shù)等。Host OSvint0x0000 Win dows.0x0001Unix.N

13、ame len gthvint文件名長(zhǎng)度Name?字節(jié)文件名Extra area可選,用來(lái)記錄文件相關(guān)的額外信息Data area壓縮的文件數(shù)據(jù)文件頭中的Data area保存的就是壓縮的文件數(shù)據(jù)。如果選擇了對(duì)文件內(nèi)容加密,那么Data area中保存的就是經(jīng)過(guò)壓縮、加密后的數(shù)據(jù),并且文件頭中的Extra area區(qū)域就會(huì)包含一個(gè)加密記錄塊,用來(lái)保存該加密文件對(duì)應(yīng)的加密相關(guān)元數(shù)據(jù)信息,加密記錄塊的結(jié)構(gòu)和前面介紹的加密頭結(jié)構(gòu)類似,其結(jié)構(gòu)如下表所示。字段名稱類型介紹Sizevint整個(gè)加密記錄塊的長(zhǎng)度,以字節(jié)為單位Typevint用來(lái)區(qū)分Extra area中不冋類型的記錄塊,值為0x01Vers

14、io nvint加密算法版本。目前只支持AES-256,值為0Flagsvint0x0001 Password check data is prese nt.0x0002 Use tweaked checksums in stead of pla in checksums.該字段值默認(rèn)為 0x0003KDF cou nt1字節(jié)PBKDF2函數(shù)的迭代次數(shù),和版本有關(guān)Salt16字節(jié)PBKDF2函數(shù)的鹽IV16字節(jié):AES-256初始化向量Check Value12字節(jié)用來(lái)驗(yàn)證密碼的有效性。End of archive marker :結(jié)尾標(biāo)記頭,該頭是壓縮文件的結(jié)束標(biāo)記。解壓過(guò)程中解壓工 具不會(huì)

15、讀取和處理結(jié)尾標(biāo)記頭后面的任何信。該塊的各個(gè)字段如下表所示。Header CRC32uin t32結(jié)尾標(biāo)記頭的CRC校驗(yàn)值Header sizevint整個(gè)結(jié)尾標(biāo)記頭的長(zhǎng)度,以字節(jié)為單位Header typevint用來(lái)區(qū)分不冋的頭部類型,該頭類型為5Header flagsvint和加密頭該字段含義一樣End of archive flagsvint0x0001壓縮文件是卷但不是所有卷中的最后一個(gè)上面我們僅僅對(duì)壓縮文件格式中一些主要的塊(頭)進(jìn)行了描述和解釋, 其他的可選塊由于和文件的加密過(guò)程無(wú)關(guān)因此這里不做介紹,如果讀者感興趣可以自行參考RAR 5.0archive format。3. R

16、ar壓縮文件加密過(guò)程在采用Winrar對(duì)文件進(jìn)行壓縮和加密時(shí),根據(jù)選擇使用RAR “壓縮文件格式”的不同以及是否選中“加密文件名”選項(xiàng)(如圖 3所示),文件的加密過(guò)程會(huì)有所不同,加密后生 成的文件格式也會(huì)存在差別。在不考慮ZIP壓縮格式和其他與加密過(guò)程無(wú)關(guān)的選項(xiàng)的情況下, 使用Winrar對(duì)文件進(jìn)行壓縮時(shí)一共有 4種不同選擇:RAR壓縮格式,不加密文件名;RAR5 壓縮格式,不加密文件名;RAR壓縮格式,加密文件名; RAR5壓縮格式,加密文件名。這里主要以選擇“ RAR5壓縮格式,不加密文件名”情況為例,詳細(xì)介紹其加密和解密過(guò)程, 然后對(duì)其他不同選擇下的加解密過(guò)程進(jìn)行說(shuō)明。圖3與winrar

17、加密相關(guān)的選項(xiàng)3.1 RAR5壓縮格式,不加密文件名選擇“ RAR5壓縮格式,不加密文件名”情況下文件的加密過(guò)程如下圖4所示。如果將Winrar軟件看成一個(gè)功能黑盒,它接受的輸入是用戶提供的密碼和需要加密的原文件,然 后輸出加密后的壓縮文件。在Winrar軟件內(nèi)部,具體的加密過(guò)程按如下步驟進(jìn)行。1) 初始化操作。隨機(jī)產(chǎn)生16字節(jié)長(zhǎng)度的鹽 salt、16字節(jié)長(zhǎng)度的初始化向量IV ,設(shè)置count=32768, KeyLength=256。2) 進(jìn)行PBKDF2運(yùn)算。以用戶輸入密碼password和步驟1)中的salt、count、KeyLength作為PBKDF2函數(shù)的輸入?yún)?shù)進(jìn)行運(yùn)算,產(chǎn)生32

18、字節(jié)的AES加密密鑰Key。即Key =PBKDF2 (salt, password, count, KeyLength )。請(qǐng)自行查閱 PBKDF2 算法相關(guān)介紹。原文件KeyLength(256)Salt (16 字節(jié)) Count (32768)PBKDF2計(jì)算程過(guò)密加件、|文arHashKey (32 字節(jié)) +16輪HMAC -SHA256IV(16字節(jié))ntKey (32 字節(jié))Xor摘要 (32字節(jié))文件加密 記錄PSW check (8字節(jié))+32輪XorData CRC32(4字節(jié))AES-256加密CRC計(jì)算壓縮標(biāo)記主頭i !i!文件頭111i文件內(nèi)容文件頭2文件內(nèi)容Dat

19、aCRC32Extra area圖4Rar5壓縮格式下文件內(nèi)容的加密過(guò)程3) 產(chǎn)生HashKey。在步驟2)中的PBKDF2算法計(jì)算結(jié)果的基礎(chǔ)上,額外增加16次迭代 計(jì)算,產(chǎn)生32字節(jié)長(zhǎng)度的HashKey,該密鑰用于在后期產(chǎn)生文件內(nèi)容的校驗(yàn)值。4) 產(chǎn)生PSWcheck。在步驟3)HashKey的基礎(chǔ)上,額外增加 16次迭代計(jì)算,產(chǎn)生 32字 節(jié)長(zhǎng)度的PswCheckValue ,對(duì)PswCheckValue進(jìn)行類似異或操作 1后賦值給8字節(jié)長(zhǎng)度 的PSWcheck,該值隨加密文件一起保存,作用是在解密時(shí)實(shí)現(xiàn)對(duì)用戶密碼的驗(yàn)證。注 1:【PSWchecki = PswCheckValueiA P

20、swCheckV aluei+8A ,】5) 計(jì)算文件校驗(yàn)值。對(duì)文件進(jìn)行CRC計(jì)算,得到4字節(jié)長(zhǎng)度的CRC校驗(yàn)值value。將value 作為HMAC-SHA256 函數(shù)的“消息”參數(shù), HashKey作為HMAC-SHA256 函數(shù)的“密 鑰”參數(shù),產(chǎn)生32字節(jié)長(zhǎng)度的消息摘要 digest,即卩digest = HMAC-SHA256 ( HashKey, value)。然后對(duì)digest進(jìn)行類似異或操作2,得到4字節(jié)長(zhǎng)度的Data CRC32校驗(yàn)值。Data CRC32校驗(yàn)值隨加密文件一起保存,既能實(shí)現(xiàn)對(duì)用戶密碼的驗(yàn)證,也能實(shí)現(xiàn)對(duì)文件內(nèi)容 的校驗(yàn)。文件內(nèi)容校驗(yàn)也可以采用其他校驗(yàn)方式,但默認(rèn)

21、情況下是CRC32校驗(yàn)。注 2:【for (int 1=0;1<32;1+) CRC32A=digestl << (I & 3) * 8)】6)對(duì)文件內(nèi)容進(jìn)行壓縮。7) 壓縮后內(nèi)容加密。以IV為AES-256初始化向量、Key為加密密鑰,對(duì)步驟 6)中壓縮 后的文件內(nèi)容進(jìn)行 AES-256加密,得到加密后的內(nèi)容。8) 按照1) 7)相同的步驟對(duì)所有文件進(jìn)行壓縮和加密,并按照?qǐng)D2所示文件格式進(jìn)行保 存從而得到壓縮后的文件。在經(jīng)過(guò)壓縮和加密過(guò)程后生成的壓縮文件中,需要保存salt、count、IV、PSWcheck和Data CRC32值。其中 Data CRC32保存在

22、文件頭,salt、count、IV、PSWcheck保存在文件 頭extra data中的文件加密記錄中,在解密階段需要讀取這些域?qū)γ艽a進(jìn)行驗(yàn)證。解密過(guò)程基本上是文件加密過(guò)程的逆過(guò)程,對(duì)加密壓縮文件的解密過(guò)程如下。1) 讀取加密壓縮文件的標(biāo)記和主頭部分,確定RAR版本。2) 讀取文件頭。讀取第一個(gè)文件對(duì)應(yīng)的文件頭,獲取Salt、Count、PSWcheck、IV和DataCRC32 值。3)進(jìn)行PBKDF2計(jì)算。以Salt、Count、用戶密碼password和KeyLength為參數(shù)進(jìn)行 PBKDF2 計(jì)算,得到文件解密密鑰 Key、PSWcheck和HashKey。該步驟和加密過(guò)程中 2)

23、、3)、4) 步驟相同,詳見(jiàn)加密過(guò)程。4) 用戶密碼驗(yàn)證。將步驟 3)中產(chǎn)生的PSWcheck值和步驟1)中從文件讀取的 PSWcheck 值進(jìn)行比較,如果相同,則說(shuō)明驗(yàn)證通過(guò),繼續(xù)5);不同則表明用戶輸入密碼錯(cuò)誤,用 戶重新輸入密碼轉(zhuǎn) 3),否則結(jié)束。5) 文件解密。根據(jù)初始化向量IV和3)中產(chǎn)生的解密密鑰 Key,對(duì)文件1加密后的內(nèi)容進(jìn) 行解密,得到壓縮后的文件內(nèi)容。6) 文件解壓。對(duì)5 )中得到的文件內(nèi)容進(jìn)行解壓縮,得到文件1原始內(nèi)容,即原文件。7) 對(duì)原文件進(jìn)行CRC計(jì)算,將計(jì)算得到的校驗(yàn)值作為HMAC-SHA256 的輸入消息,HashKey作為密鑰,產(chǎn)生消息摘要。然后對(duì)消息摘要進(jìn)行

24、類似異或運(yùn)算,得到文件的校 驗(yàn)值CRC32。詳見(jiàn)加密過(guò)程步驟 5)。8) 將7)中計(jì)算得到的 CRC32值和步驟2)中讀取的Data CRC32進(jìn)行比較,相同則說(shuō)明 用戶密碼正確并且文件沒(méi)有損壞,轉(zhuǎn)9);否則說(shuō)明文件損壞,退出。9) 依次對(duì)所有文件重復(fù)進(jìn)行2) 8),直到所有文件均被解壓。以上步驟中對(duì)壓縮文件中各個(gè)域的讀取參考第2節(jié)中對(duì)文件格式的介紹。3.2 RAR5壓縮格式,加密文件名耶fc麗ms 瞬日常履甘nAd' 叵后WIeSJ Jfetm *Wi«2r-50nCfnS 0 awsn1.010.995 ? F3W.72B305.200 F&M H劉眞i2015/

25、11/1 S.B BFAD.ewe* Ti-fl'fSgft Bi刪*呂迂ZMtafrfitocftirtrThr SrcurJty ?£ Eer JJcrlmliFg圖5壓縮文件在不加密文件名下的解壓縮操作在壓縮過(guò)程中,如果不選擇“加密文件名”選項(xiàng),這樣產(chǎn)生的壓縮文件用戶即使不知道 壓縮文件的密碼,也可以查看壓縮文件中的包含的文件名稱、文件大小、修改時(shí)間等信息, 如圖5所示。顯然,有時(shí)候我們對(duì)文件的保密要求比較高,并不想讓非授權(quán)用戶獲得這些信息,因此就需要對(duì)這些文件元數(shù)據(jù)進(jìn)行加密。由于這些信息保存在壓縮文件的主頭、文件頭等元數(shù)據(jù)塊中,因此要加密文件名等相關(guān)信息,就需要對(duì)這些

26、部分元數(shù)據(jù)信息進(jìn)行加密。事實(shí)上,對(duì)這些信息的加密是通過(guò)在壓縮文件格式中實(shí)現(xiàn)一個(gè)加密頭,然后再利用加密頭加密這部分元數(shù)據(jù)信息達(dá)到的。前面介紹過(guò)加密頭是可選的, 加密頭的作用正在于此, 用來(lái)實(shí)現(xiàn)對(duì)文件名等信息的加密。因此,對(duì)于“加密文件名”情況下,對(duì)文件的加密過(guò)程分為兩個(gè)階段,第一階段是利用文件頭中的加密記錄實(shí)現(xiàn)對(duì)文件內(nèi)容的加密,然后利用加密頭實(shí)現(xiàn)對(duì)主頭、文件頭等元數(shù)據(jù)塊的加密,下圖6簡(jiǎn)要顯示了這兩階段加密過(guò)程。加密-加3E標(biāo)記加密頭主頭文件頭1密 記 錄文件內(nèi)容加密詆圖6文件的兩階段加密過(guò)程對(duì)于利用文件頭中的加密記錄去加密數(shù)據(jù)部分,該過(guò)程和前面的介紹不加密文件名選擇下的過(guò)程是一樣的,這里不再贅述

27、,這里主要對(duì)加密頭加密元數(shù)據(jù)塊的過(guò)程進(jìn)行介紹。圖7顯示了加密頭對(duì)主頭、文件頭等元數(shù)據(jù)塊的加密過(guò)程。KeyLength(256)程過(guò)密加塊據(jù)數(shù)一元RSalt (16字節(jié))Count (32768)PSW check(8字節(jié))IV(16字節(jié))PBKDF2計(jì)算+32輪XorKey (32字節(jié))AES-256加密標(biāo)記加密頭主頭文件頭1文件內(nèi)容J J圖7Rar5壓縮格式下元數(shù)據(jù)塊加密過(guò)程從上圖7可以看出,利用加密頭對(duì)主頭、文件頭等部分的加密和前面介紹的對(duì)數(shù)據(jù)部分的加密過(guò)程類似,但又有相應(yīng)的簡(jiǎn)化。首先通過(guò)PBKDF2運(yùn)算得到加密密鑰,利用該加密密鑰去加密主頭、文件頭等元數(shù)據(jù)塊,然后將Salt、Count、

28、PSWcheck、IV保存在加密頭中用于解壓縮時(shí)對(duì)用戶密碼進(jìn)行驗(yàn)證。事實(shí)上,IV并不是保存在加密頭中,而是保存在元數(shù)據(jù)塊之前,每一個(gè)元數(shù)據(jù)塊對(duì)應(yīng)一個(gè)IV。這里需要特別指出的是,對(duì)元數(shù)據(jù)塊和數(shù)據(jù)部分加密都用到了PBKDF2算法,需要用戶提供用戶密碼,但它們實(shí)際上采用的是同一個(gè)密碼,因此在采用壓縮工具對(duì)文件進(jìn)行壓縮過(guò)程中,只需要提供一個(gè)用戶密碼即可。并且,默認(rèn)情況下加密頭和加密記錄中保存的Salt、Count值都一樣。因此在解壓縮時(shí),只在解密元數(shù)據(jù)塊時(shí)進(jìn)行PBKDF2計(jì)算對(duì)用戶密碼進(jìn)行驗(yàn)證,在解密文件數(shù)據(jù)部分時(shí)不需要再進(jìn)行PBKDF2計(jì)算來(lái)驗(yàn)證密碼,并且直接使用解密元數(shù)據(jù)塊過(guò)程中 PBKDF2算法

29、產(chǎn)生的密鑰來(lái)解密文件的文件內(nèi)容,但要注意的是初始化向 量IV發(fā)生了改變。3.3 RAR壓縮格式,不加密文件名8所示。在采用RAR壓縮格式,不加密文件名的選擇下,文件的壓縮加密過(guò)程如下圖Salt (8字節(jié))標(biāo)記主頭111文件頭1 :拼接原文件SHA-1 (262144 次)11fIV(16字節(jié))CRC計(jì)算壓縮Key (16 字節(jié))文件內(nèi)容文件內(nèi)容文件頭2Data CRC32(4字節(jié))AES-128加密SaltDataCRC32圖8 “ RAR壓縮格式+不加密文件名”模式下文件的壓縮加密過(guò)程在對(duì)文件進(jìn)行壓縮加密的過(guò)程中,首先將 Salt和用戶密碼拼接,然后對(duì)拼接后的結(jié)果 進(jìn)行262144次循環(huán)的S

30、HA-1計(jì)算(實(shí)際上在262144次年循環(huán)中,每次循環(huán)包含兩個(gè) SHA-1 計(jì)算),產(chǎn)生加密密鑰Key和初始化向量IV。最后對(duì)壓縮后的文件內(nèi)容進(jìn)行AES-128加密,得到加密后內(nèi)容。同時(shí),為了便于解壓縮階段能夠?qū)τ脩裘艽a進(jìn)行驗(yàn)證,還需要對(duì)原文件內(nèi)容進(jìn)行CRC計(jì)算,并將CRC校驗(yàn)值Data CRC32保存在文件頭中。在解壓縮階段,以同樣的方式得到加密密鑰Key和初始化向量IV后,對(duì)加密的文件內(nèi)容進(jìn)行AES-128解密操作,然后對(duì)解密的文件內(nèi)容解壓縮,還原出原文件內(nèi)容。最后對(duì)原 文件內(nèi)容進(jìn)行 CRC計(jì)算,如果計(jì)算得到的校驗(yàn)值和文件頭中保存的Data CRC32校驗(yàn)值相同,則表明用戶提供的密碼正確,

31、否則表明用戶密碼錯(cuò)誤或者文件內(nèi)容損壞。從上面的過(guò)程可以看出,RAR壓縮格式下加密過(guò)程與RAR5壓縮格式下加密過(guò)程存在較大的差別。1. 前者采用 262144次SHA-1計(jì)算作為密鑰導(dǎo)出函數(shù),而后者采用PBKDF2函數(shù)(count=32768 )作為密鑰導(dǎo)出函數(shù)。2. 前者采用AES-128加密算法對(duì)文件內(nèi)容加密,后者采用AES-256加密算法對(duì)文件內(nèi)容加密。3. 前者只有對(duì)文件內(nèi)容進(jìn)行解密后通過(guò)CRC校驗(yàn)值比對(duì)才能判斷用戶密碼是否正確或者文件內(nèi)容損壞,但不能夠?qū)Χ哌M(jìn)行區(qū)分,后者能夠在早期通過(guò)PBKDF2計(jì)算產(chǎn)生的PSWcheck值進(jìn)行比較來(lái)判斷,在不相同的情況下能夠區(qū)分出到底是用戶密碼錯(cuò)誤還

32、是文件 內(nèi)容損壞。3.4 RAR壓縮格式,加密文件名在壓縮過(guò)程中選擇 RAR壓縮格式,加密文件名,相比于不加密文件名,只需要在后者 的基礎(chǔ)上增加對(duì)文件頭等元數(shù)據(jù)塊的加密操作。對(duì)文件頭的加密過(guò)程和對(duì)前面介紹的文件內(nèi)容的加密過(guò)程一樣,如圖9所示,這里不做過(guò)多的介紹。在解壓縮階段,需要首先解密出文件頭等元數(shù)據(jù)塊信息,需要進(jìn)行262144次SHA-1計(jì)算產(chǎn)生解密文件頭等需要用到的解密密鑰Key和初始化向量IV ,然后對(duì)元數(shù)據(jù)塊的信息進(jìn)行AES-128解密操作。如果用戶密碼正確,則可以通過(guò)文件頭提供的信息進(jìn)一步對(duì)文件內(nèi) 容進(jìn)行解密,否則無(wú)法正確解析文件頭等元數(shù)據(jù)塊,并且文件頭部的CRC校驗(yàn)無(wú)法通過(guò),解壓

33、縮失敗。用戶密碼 password元數(shù)據(jù)塊(文件頭等)*拼接拼接SHA-1(262144次)Key (16 字節(jié))AES-128加密IV(16字節(jié))標(biāo)記主頭i文件頭1 j11數(shù)據(jù)部分!文件頭2數(shù)據(jù)部分SaltSaltSaltedSa eDC:2圖9 “ RAR壓縮格式+加密文件名”模式下文件的壓縮加密過(guò)程4.結(jié)論本文首先針對(duì) winrar壓縮軟件使用過(guò)程中4中不同的壓縮選擇,即“ RAR5壓縮格式, 不加密文件名” 、“ RAR5 壓縮格式, 加密文件名” 、“ RAR 壓縮格式, 不加密文件名” 、“RAR 壓縮格式,加密文件名” ,介紹了 RAR 壓縮加密文件的加解密過(guò)程。隨后分析了不同選

34、擇 下密碼驗(yàn)證過(guò)程的復(fù)雜性,發(fā)現(xiàn)對(duì)于普通計(jì)算機(jī)采用字典方式去破解 RAR 壓縮文件是不可 行的,而是否能夠利用 FPGA 去實(shí)施字典破解還需要進(jìn)一步的研究和分析。Rar3文件格式壓縮文件包含多個(gè)可變長(zhǎng)度的塊,塊的順序可以改變,但第一個(gè)塊和第二個(gè)塊分別是marker塊和壓縮文件頭塊。每個(gè)塊都以如下域開(kāi)始:HEAD_CRC :2B,塊的CRC校驗(yàn)碼HEAD_TYPE :1B,塊類型HEAD_FLAGS : 2B,塊標(biāo)志位HEAD_SIZE :2B,塊大小ADD_SIZE :4B,可選域,額外的塊大小,僅在(HEAD_FLAGS & 0x8000) !=0 時(shí)才存在。如果 ADD_SIZE

35、不存在,塊大小就是 HEAD_SIZE ,否則,塊大小時(shí)HEAD_SIZE+ADD_SIZE 。每個(gè)塊的HEAD_FLAGS的如下位含義都一樣:0x4000 :如果設(shè)置,則舊版本 RAR會(huì)忽略該塊,并且當(dāng)壓縮文件更新時(shí)刪除該塊。如 果不設(shè)置,當(dāng)壓縮文件更新時(shí),該塊被復(fù)制到新的壓縮文件。0x8000 :如果設(shè)置, ADD_SIZE 域存在。塊類型包含如下:HEAD_TYPE=0x72HEAD_TYPE=0x73HEAD_TYPE=0x74HEAD_TYPE=0x75HEAD_TYPE=0x76HEAD_TYPE=0x77HEAD_TYPE=0x78HEAD_TYPE=0x79HEAD_TYPE=

36、0x7amarker 塊壓縮文件頭塊文件頭塊舊版本注釋頭塊 舊版本認(rèn)證信息塊 舊版本子塊舊版本恢復(fù)記錄塊 舊版本認(rèn)證信息塊 子塊注釋塊不會(huì)單獨(dú)存在,而是在其他塊中使用。按照如下流程處理壓縮文件:1. 讀并校驗(yàn) marker塊;2讀壓縮文件頭3. 讀或者跳過(guò) HEAD_SIZE-sizeof(MAIN_HEAD)字節(jié)4. 如果到了壓縮文件尾,就中止處理,否則,讀7字節(jié)數(shù)據(jù)到HEAD_CRC , HEAD_TYPE, HEAD_FLAGS,HEAD_SIZE。5. 分析 HEAD_TYPE,如果HEAD_TYPE=0x74 ,讀文件頭(前面7B已經(jīng)讀取),讀或者跳過(guò)HEAD_SIZE-sizeof

37、(FILE_HEAD)字節(jié)。如 果 (HEAD_FLAGS&0 x100), 讀 或 者 跳 過(guò)HIGH_PACK_SIZE*0 x100000000+PACK_SIZE 字節(jié)否則,讀或者跳過(guò) PACK_SIZE字節(jié)否則,讀相應(yīng)的 HEAD_TYPE 塊:讀 HEAD_SIZE-7 字節(jié) 女口果(HEAD_FLAGS & 0x8000),讀 ADD_SIZE 字節(jié)。6. 返回第4步塊格式Marker 塊(MARK._HEAD )HEAD_CRC :2B,0x6152HEAD_TYPE :1B,0x72HEAD_FLAGS :2B,0x1a21HEAD_SIZE :2B,0x00

38、07實(shí)際上,marker 塊的內(nèi)容是確定的: 0x52 0x61 0x72 0x21 0x1a 0x07 0x00壓縮文件頭(MAIN_HEAD)HEAD_CRC :2B, HEAD_TYPE 至U RESERVED2 的 CRCHEAD_TYPE :1B, 0x73HEAD FLAGS :2B0x0001 - Volume attribute (archive volume)0x0002 -壓縮文件注釋塊存在,RAR3.X使用獨(dú)立的注釋塊,不會(huì)設(shè)置該標(biāo)志位 0x0004 - Archive lock attribute 0x0008 - solid attribute ( solid arc

39、hive)0x0010 - New volume naming scheme ( volname.partN.rar ')0x0020 -認(rèn)證信息存在,RAR3.x不使用該標(biāo)志位0x0040 -恢復(fù)記錄存在0x0080 -塊頭被加密0x0100 -第一卷(只在 RAR3.0及以后的版本中出現(xiàn))其他位保留HEAD_SIZE :RESERVED1:2B,壓縮文件頭大小,包含注釋2B,保留RESERVED2:4B,保留文件頭(HEAD_FILE,壓縮文件中的文件)HEAD_CRC :2B,HEAD_TYPE 至U FILEATTR 的 CRC,包含文件名HEAD_TYPE :1B , 0x7

40、4HEAD_FLAGS : 2B0x01 - file con ti nued from previous volume0x02 - file continued in next volume0x04 -文件使用密碼加密0x08 -文件注釋存在,RAR3.X使用獨(dú)立的注釋塊,不設(shè)置該位0x10 - information from previous files is used (solid flag) (針對(duì) 2.0 以后版 本)Bit 7,6,5(僅適用于2.0及以后的版本)000 -字典大小64KB001 -字典大小128KB010 -字典大小256KB011 -字典大小512KB100

41、-字典大小1024KB101 -字典大小2048KB110 -字典大小 4096KB111 -文件是目錄0x100 - HIGH_PACK_SIZE and HIGH_UNP_SIZE fields are prese nt,僅針對(duì)大文件(大于2GB ),小文件不存在該位0x200 -文件名包含常用和Unicode編碼的字符,使用 0分隔。在這種情況下,NAME_SIZE等于通常的名字+Unicode編碼的名字+1。如果該位設(shè)置了,但FILE_NAME 不包含0,意味著文件名是用 UTF-8編碼的。0x400 -頭部在文件名后面包含額外的 8字節(jié),用于增加加密的強(qiáng)度(通常稱為鹽 salt)0x

42、800-版本標(biāo)志位,這是一個(gè)舊版本的文件,在文件名后面有;的版本號(hào)0x1000 -擴(kuò)充的時(shí)間域存在0x8000 -該位始終設(shè)置,所以完整的塊大小是HEAD_SIZE+PACK_SIZE (如果0x100 位設(shè)置,再加上 HIGH_PACK_SIZE)HEAD_SIZE :2B,文件頭大小,包含文件名和注釋PACK_SIZE :4B,壓縮后的文件大小UNP_SIZE :4B,解壓縮后的文件大小HOST_OS :1B,操作系統(tǒng)號(hào)0 - MS DOS1 - OS/22 - WIN323 - Unix4 - Mac OS5 - BeOSFILE_CRC :4B,文件 CRCFTIME :4B,日期和時(shí)

43、間,以 MS-DOS格式UNP_VER :1B,提取文件所需的 RAR版本,版本號(hào)編碼格式:10*major version+ minor vers ionMETHOD :1B,壓縮方法0x30 -存儲(chǔ)0x31 -最快壓縮0x32 -快速壓縮0x33 -標(biāo)準(zhǔn)壓縮0x34 -較好壓縮0x35 -最好壓縮NAME_SIZE :2B,文件名大小ATTR :4B,文件屬性HIGH_PACK_SIZE : 4B,64bit的壓縮文件大小高 4字節(jié),可選域,僅在 0x100位設(shè)置 時(shí)存在。HIGH_UNP_SIZE : 4B,64bit的解壓縮文件大小高 4字節(jié),可選域,僅在 0x100位設(shè) 置時(shí)存在。F

44、ILE_NAME :NAME_SIZE 字節(jié),文件名SALT:8B,鹽值,prese nt if (HEAD_FLAGS & 0x400) != 0EXT_TIME :可變大小,present if (HEAD_FLAGS & 0x1000) != 01. To process an SFX archive you n eed to skip the SFX module searchi ng for the marker block in the archive. There is no marker block sequenee (0x52 0x61 0x72 0x21 0

45、x1a 0x07 0x00) in the SFX module itself.2. The CRC is calculated using the stan dard poly nomial 0xEDB88320. In case the size of the CRC is less tha n 4 bytes, only the low order bytesare used.RAR5加密文件名-解壓縮流程及破解所需信息IsArchive(True)函數(shù):判斷是否是壓縮文件。首先讀取marker塊,判斷RAR的版本號(hào)。讀取加密頭(第一次 ReadHeader(),當(dāng)前文件指針是 8,因?yàn)?/p>

46、僅讀取了 marker塊。首 先讀取7B,這是Header塊最小的字節(jié)數(shù)。分解讀取的7B,HeadCRC: 4B,BlockSize :可變的,在當(dāng)前例子中是 1B,大小是38, 然后根據(jù)BlockSize的大小繼續(xù)讀取剩余的數(shù)據(jù)。計(jì)算Block的CRCHeaderType :可變的,1B, 04-加密頭。Flags :可變的,1B判斷計(jì)算的CRC和讀取的CRC是否一致。NextBlockPos=8+38=46CryptVersion :可變的,1B, 0EncFlags :可變的,1B, 0x01UsePswCheck=TRUELg2Count: 1B, 15Salt: 16BPswChec

47、k: 8BCsum: 4B將PswCheck進(jìn)行sha256運(yùn)算與csum比較是否相等。En crypted=True第一次 Readheader()完畢。緊接著進(jìn)入第二次 Readheader()函數(shù)。已經(jīng)判斷出文件被加密,開(kāi)始解密。要求用戶輸入密碼。讀取初始化向量 HeaderslnitV : 16B進(jìn)行密碼破解,破解信息包括:用戶輸入的密碼,鹽salt,Lg2Count,密碼運(yùn)算后的結(jié)果存放在局部變量PswCheck中,然后將計(jì)算出的 PswCheck與前面讀出的 PswCheck進(jìn)行比較,一致則密碼正確。解密算法:PBKDF2()函數(shù):輸入?yún)?shù):密碼,密碼長(zhǎng)度,鹽,鹽長(zhǎng)度,1<&

48、lt;Lg2Cou nt輸出參數(shù): key, hashkeyvalue,pswcheckvalue。for ( uint I=0;I< SHA256 DIGEST SIZE;I+)PswCheckl% SIZE_PSWCHECK=PswCheckValuel;PBKDF2()采用 HMAC_SHA256()算法。首先將鹽值增加 4B,分別是0001。然后進(jìn)行第一次 HMAC_SHA256運(yùn)算,結(jié)果放在 U1中,將U1復(fù)制到Fn。接著循環(huán)Lg2Count-1次HMAC_SHA256運(yùn)算,結(jié)果是 Key,再 循環(huán)16次HMAC_SHA256 運(yùn)算,結(jié)果是hashkeyvalue,再循環(huán)16次

49、HMAC_SHA256 運(yùn)算, 結(jié)果是 PswCheckvalue。RAR5不加密文件名-解壓縮流程及破解所需信息IsArchive(True)函數(shù):判斷是否是壓縮文件。首先讀取marker塊,判斷RAR的版本號(hào)。讀取HEAD_MAIN(第一次ReadHeader()。當(dāng)前文件指針是 8,因?yàn)閮H讀取了 marker塊。 首先讀取7B,這是Header塊最小的字節(jié)數(shù)。分解讀取的7B,HeadCRC: 4B,BlockSize :可變的,在當(dāng)前例子中是 1B,大小是16, 然后根據(jù)BlockSize的大小繼續(xù)讀取剩余的數(shù)據(jù)。計(jì)算Block的CRCHeaderType:可變的,1B,01-主頭(HE

50、AD_MAIN )。Flags :可變的,1B判斷計(jì)算的CRC和讀取的CRC是否一致。NextBlockPos=8+16=24ExtraSize: 1B,值為 7判斷出是HEAD_MAIN ,ArcFlags : 1B,接著分析ArcFlags的各個(gè)標(biāo)志位處理 Extra 數(shù)據(jù) ProcessExtra50(&Raw,(size_t)ExtraSize,&MainHead);沒(méi)有對(duì)解密有用的 信息。保存當(dāng)前的文件指針,進(jìn)行第二次ReadHeader()。首先讀取 7B,分解讀取的 7B,HeadCRC : 4B,BlockSize :可變的,在當(dāng)前例子中是 1B,大小是87,然

51、后根據(jù)BlockSize的大小繼續(xù)讀取剩余的數(shù)據(jù)。計(jì)算Block的CRCHeaderType:可變的,1B,02-文件頭(HEAD_FILE )。Flags :可變的,1B判斷計(jì)算的CRC和讀取的CRC是否一致。ExtraSize: 1B,值為 60DataSize: 2B,值為 656NextBlockPos=24+92+656=772FileFlags : 1B, 4UnpSize: 2B, 2776FileAttr : 1BFileHashCRC : 4BCompInfo : 2BHostOS : 1BNameSize : 1BFileName : NameSize 字節(jié)處理 Extra

52、Size 數(shù)據(jù) ProcessExtra50(&Raw,(size_t )ExtraSize,hd);此部分?jǐn)?shù)據(jù)是加密信息數(shù)據(jù)FHEXTRA_CRYPTLg2Count,Salt,InitV,PswCheck都被讀取出來(lái),這些就是校驗(yàn)密碼是否正確所需要的信息。RAR3加密文件名-解壓縮流程及破解所需信息IsArchive(True)函數(shù):判斷是否是壓縮文件。首先讀取marker塊,判斷RAR的版本號(hào)。讀取HEAD3_MAIN(第一次 ReadHeader()。當(dāng)前文件指針是 7,因?yàn)閮H讀取了 marker 塊。首先讀取7B,這是Header塊最小的字節(jié)數(shù)。分解讀取的 7B,HeadCR

53、C : 2BHeaderType: 1B,0x73,HEAD3_MAINFlags: 2BHeadSize: 2B繼續(xù)讀取后續(xù)的數(shù)據(jù),分別是HighPosAV : 2B,PosAV : 4B根據(jù)Flags判斷出文件被加密。第一次讀取ReadHeader結(jié)束。保存文件指針,開(kāi)始第二次ReadHeader()判斷出文件被加密,要求用戶輸入密碼,然后讀出Salt: 8BHeadersCrypt.SetCryptKeys( false , CRYPT_RAR3p&Cmd->Password,Salt,NULL。,NULL,NULL);后續(xù)讀出的數(shù)據(jù)是 HEAD_FILE,并且需要解密。根

54、據(jù)上面輸入的密碼對(duì) HEAD_FILE 進(jìn)行解密,前 2B是CRC校驗(yàn)值,對(duì)讀出的內(nèi)容 進(jìn)行CRC計(jì)算,然后跟 CRC校驗(yàn)值進(jìn)行比較,如果一致,則密碼正確,否則,密碼錯(cuò)誤。采用unRar源代碼對(duì)RAR3加密文件名進(jìn)行解密,也是需要交互,不能全部由硬件完成密碼的校驗(yàn)。采用John The Ripper軟件,可以完全由硬件完成。讀取salt值和最后16字節(jié),然后對(duì)最后16字節(jié)進(jìn)行解密,16字節(jié)是明文。RAR3不加密文件名-解壓縮流程及破解所需信息破解方案RAR5 :提取 Salt、InitV、PswCheck、Lg2count,寫入文本文件 out.txt 中,然后 oclHashCat 讀取ou

55、t.txt,破解出密碼。Unrar程序修改:1、 添加Hex_to_Str.h頭文件,里面是16進(jìn)制轉(zhuǎn)換成相應(yīng)字符串的函數(shù),用于將Salt、InitV、 PswCheck轉(zhuǎn)換成字符串寫入文件2、 加密文件名,在 HEAD_CRYPT 處理過(guò)程中,讀出 Salt、InitV、PswCheck等寫入文件; 不加密文件名,在 HEAD_FILE 處理過(guò)程中,讀出 Salt、InitV、PswCheck等寫入文件。3、 添加全局變量InfoExtractDone,當(dāng)提取完上述信息后置為True,結(jié)束程序執(zhí)行。RAR3加密文件名:提取文件最后24字節(jié)數(shù)據(jù),高8字節(jié)為Salt,低16字節(jié)為已知明文,寫入文本文件out.txt中,然后oclHashCat讀取out.txt,破解出密碼。

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

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!