歡迎來到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
裝配圖網(wǎng)
ImageVerifierCode 換一換
首頁 裝配圖網(wǎng) > 資源分類 > DOC文檔下載  

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

  • 資源ID:48251349       資源大?。?span id="cae20sb" class="font-tahoma">591KB        全文頁數(shù):21頁
  • 資源格式: DOC        下載積分:24積分
快捷下載 游客一鍵下載
會員登錄下載
微信登錄下載
三方登錄下載: 微信開放平臺登錄 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要24積分
郵箱/手機(jī):
溫馨提示:
用戶名和密碼都是您填寫的郵箱或者手機(jī)號,方便查詢和重復(fù)下載(系統(tǒng)自動生成)
支付方式: 支付寶    微信支付   
驗(yàn)證碼:   換一換

 
賬號:
密碼:
驗(yàn)證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會被瀏覽器默認(rèn)打開,此種情況可以點(diǎn)擊瀏覽器菜單,保存網(wǎng)頁到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無水印,預(yù)覽文檔經(jīng)過壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標(biāo)題沒有明確說明有答案則都視為沒有答案,請知曉。

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

Rar壓縮文件加密過程及破解可行性分析1. rar壓縮文件簡介Rar是一種目前廣泛使用的文件壓縮格式,它能夠?qū)崿F(xiàn)對文件的壓縮、加密和分塊等功 能。Rar格式的壓縮文件以.rar后綴結(jié)束,其他常見的文件壓縮格式還有zip格式。與ZIP格式壓縮文件相比,同樣是無損數(shù)據(jù)壓縮,RAR文件通常壓縮比要高, 但是壓縮速度較慢。 因?yàn)镽AR文件頭也要占據(jù)一定空間,在數(shù)據(jù)壓縮余地不大時(shí),壓縮過的文件可能比原文件 要大。RAR的一個(gè)主要優(yōu)點(diǎn)是可以把文件壓縮目標(biāo)分割到多個(gè)文件,并且很容易從這樣的 分割的壓縮文件解壓出源文件。另外,RAR也支持緊縮格式,把所有文件壓縮到同一個(gè)數(shù)據(jù)區(qū)以加大壓縮比,代價(jià)是解壓一個(gè)單獨(dú)的文件時(shí)必須解壓其前面的所有文件。RAR中也可以加入冗余的修復(fù)信息,在文件損壞但是修復(fù)信息足夠完好時(shí)可以對壓縮包進(jìn)行修復(fù)。很多工具軟件都可以用來產(chǎn)生Rar格式的壓縮文件,但目前最常用的是 Winrar,軟件截圖如下圖1所示。圖1 Winrar工具截圖目前Rar壓縮格式的最新版本是5.30,并且不同版本產(chǎn)生的壓縮文件的格式會有所不同。在上圖1 “壓縮文件格式”選項(xiàng)中選擇“ RAR ”表示產(chǎn)生的壓縮文件采用Rar 4.0版本壓縮文件格式,而“ RAR5 ”表示采用Rar 5.0版本壓縮文件格式??紤]到這兩種壓縮格式目前都 在廣泛使用,在后面的介紹中我們會對這兩種壓縮文件的加密過程分別進(jìn)行介紹,但重點(diǎn)以Rar5.0壓縮格式為主。2. Rar壓縮文件格式Rar 5.0版本的壓縮文件格式如下圖2所示。一個(gè)壓縮文件由許多不同的塊(頭)組成,淺綠色部分表示可選塊,紫色部分是必選塊。下面分別對主要塊的功能進(jì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 ACL, 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對文件進(jìn)行壓縮時(shí),如果選擇了 “創(chuàng)建自解壓格式壓縮文件”選項(xiàng),生成的壓縮文件則是一個(gè)可執(zhí)行文件,不需要專門的壓縮工具來進(jìn)行解壓縮操作,執(zhí)行該文件則會對壓縮的文件進(jìn)行解壓縮,還原出被壓縮的文件。RAR 5.0 signature簽名塊,該塊的作用是區(qū)分壓縮文件的版本。 對于RAR 5.0 版本,該塊共有 8個(gè)字節(jié),內(nèi)容為 0x52 0x61 0x72 0x21 0x1A 0x07 0x01 0x00。如果是 4.0 版本,則該塊長度是 7 個(gè)字節(jié):0x52 0x61 0x72 0x21 0x1A 0x07 0x00。Archive encryption header :加密頭,該頭保存解密壓縮文件所需要信息,包括對用戶 輸入密碼的驗(yàn)證、對加密數(shù)據(jù)解密等方面的信息。下面對該頭的各個(gè)字段進(jìn)行具體說明。字段名稱類型介紹Header CRC32uin t32整個(gè)加密頭的CRC校驗(yàn)值Header sizevint整個(gè)加密頭的長度,以字節(jié)為單位Header typevint用來區(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 flag 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 flagsvint0x0001 Password check data is prese nt.KDF cou nt1字節(jié)PBKDF2函數(shù)的迭代次數(shù),和版本有關(guān)Salt16字節(jié):PBKDF2函數(shù)的鹽Check Value12字節(jié)用來驗(yàn)證密碼的有效性。Main archive header :主頭,包含整個(gè)壓縮文件的一些基本屬性信息,各個(gè)字段的含義 如下表所示。字段名稱類型介紹Header CRC32uin t32整個(gè)加密頭的CRC校驗(yàn)值Header sizevint整個(gè)加密頭的長度,以字節(jié)為單位Header typevint用來區(qū)分不冋的頭部類型,該頭類型為1Header flagsvint和加密頭該字段含義一樣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 archive.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:文件頭,用來具體描述被壓縮的文件各方面的信息,每個(gè)被壓縮的文件對 應(yīng)一個(gè)文件頭,各字段含義如下表所示。字段名稱類型介紹Header CRC32uin t32整個(gè)加密頭的CRC校驗(yàn)值Header sizevint整個(gè)加密頭的長度,以字節(jié)為單位Header typevint用來區(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 nt.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.Name len gthvint文件名長度Name?字節(jié)文件名Extra area可選,用來記錄文件相關(guān)的額外信息Data area壓縮的文件數(shù)據(jù)文件頭中的Data area保存的就是壓縮的文件數(shù)據(jù)。如果選擇了對文件內(nèi)容加密,那么Data area中保存的就是經(jīng)過壓縮、加密后的數(shù)據(jù),并且文件頭中的Extra area區(qū)域就會包含一個(gè)加密記錄塊,用來保存該加密文件對應(yīng)的加密相關(guān)元數(shù)據(jù)信息,加密記錄塊的結(jié)構(gòu)和前面介紹的加密頭結(jié)構(gòu)類似,其結(jié)構(gòu)如下表所示。字段名稱類型介紹Sizevint整個(gè)加密記錄塊的長度,以字節(jié)為單位Typevint用來區(qū)分Extra area中不冋類型的記錄塊,值為0x01Versio 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é)用來驗(yàn)證密碼的有效性。End of archive marker :結(jié)尾標(biāo)記頭,該頭是壓縮文件的結(jié)束標(biāo)記。解壓過程中解壓工 具不會讀取和處理結(jié)尾標(biāo)記頭后面的任何信。該塊的各個(gè)字段如下表所示。Header CRC32uin t32結(jié)尾標(biāo)記頭的CRC校驗(yàn)值Header sizevint整個(gè)結(jié)尾標(biāo)記頭的長度,以字節(jié)為單位Header typevint用來區(qū)分不冋的頭部類型,該頭類型為5Header flagsvint和加密頭該字段含義一樣End of archive flagsvint0x0001壓縮文件是卷但不是所有卷中的最后一個(gè)上面我們僅僅對壓縮文件格式中一些主要的塊(頭)進(jìn)行了描述和解釋, 其他的可選塊由于和文件的加密過程無關(guān)因此這里不做介紹,如果讀者感興趣可以自行參考RAR 5.0archive format。3. Rar壓縮文件加密過程在采用Winrar對文件進(jìn)行壓縮和加密時(shí),根據(jù)選擇使用RAR “壓縮文件格式”的不同以及是否選中“加密文件名”選項(xiàng)(如圖 3所示),文件的加密過程會有所不同,加密后生 成的文件格式也會存在差別。在不考慮ZIP壓縮格式和其他與加密過程無關(guān)的選項(xiàng)的情況下, 使用Winrar對文件進(jìn)行壓縮時(shí)一共有 4種不同選擇:RAR壓縮格式,不加密文件名;RAR5 壓縮格式,不加密文件名;RAR壓縮格式,加密文件名; RAR5壓縮格式,加密文件名。這里主要以選擇“ RAR5壓縮格式,不加密文件名”情況為例,詳細(xì)介紹其加密和解密過程, 然后對其他不同選擇下的加解密過程進(jìn)行說明。圖3與winrar加密相關(guān)的選項(xiàng)3.1 RAR5壓縮格式,不加密文件名選擇“ RAR5壓縮格式,不加密文件名”情況下文件的加密過程如下圖4所示。如果將Winrar軟件看成一個(gè)功能黑盒,它接受的輸入是用戶提供的密碼和需要加密的原文件,然 后輸出加密后的壓縮文件。在Winrar軟件內(nèi)部,具體的加密過程按如下步驟進(jìn)行。1) 初始化操作。隨機(jī)產(chǎn)生16字節(jié)長度的鹽 salt、16字節(jié)長度的初始化向量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字節(jié)的AES加密密鑰Key。即Key =PBKDF2 (salt, password, count, KeyLength )。請自行查閱 PBKDF2 算法相關(guān)介紹。原文件KeyLength(256)Salt (16 字節(jié)) Count (32768)PBKDF2計(jì)算程過密加件、|文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)容DataCRC32Extra area圖4Rar5壓縮格式下文件內(nèi)容的加密過程3) 產(chǎn)生HashKey。在步驟2)中的PBKDF2算法計(jì)算結(jié)果的基礎(chǔ)上,額外增加16次迭代 計(jì)算,產(chǎn)生32字節(jié)長度的HashKey,該密鑰用于在后期產(chǎn)生文件內(nèi)容的校驗(yàn)值。4) 產(chǎn)生PSWcheck。在步驟3)HashKey的基礎(chǔ)上,額外增加 16次迭代計(jì)算,產(chǎn)生 32字 節(jié)長度的PswCheckValue ,對PswCheckValue進(jìn)行類似異或操作 1后賦值給8字節(jié)長度 的PSWcheck,該值隨加密文件一起保存,作用是在解密時(shí)實(shí)現(xiàn)對用戶密碼的驗(yàn)證。注 1:【PSWchecki = PswCheckValueiA PswCheckV aluei+8A ,】5) 計(jì)算文件校驗(yàn)值。對文件進(jìn)行CRC計(jì)算,得到4字節(jié)長度的CRC校驗(yàn)值value。將value 作為HMAC-SHA256 函數(shù)的“消息”參數(shù), HashKey作為HMAC-SHA256 函數(shù)的“密 鑰”參數(shù),產(chǎn)生32字節(jié)長度的消息摘要 digest,即卩digest = HMAC-SHA256 ( HashKey, value)。然后對digest進(jìn)行類似異或操作2,得到4字節(jié)長度的Data CRC32校驗(yàn)值。Data CRC32校驗(yàn)值隨加密文件一起保存,既能實(shí)現(xiàn)對用戶密碼的驗(yàn)證,也能實(shí)現(xiàn)對文件內(nèi)容 的校驗(yàn)。文件內(nèi)容校驗(yàn)也可以采用其他校驗(yàn)方式,但默認(rèn)情況下是CRC32校驗(yàn)。注 2:【for (int 1=0;1<32;1+) CRC32A=digestl << (I & 3) * 8)】6)對文件內(nèi)容進(jìn)行壓縮。7) 壓縮后內(nèi)容加密。以IV為AES-256初始化向量、Key為加密密鑰,對步驟 6)中壓縮 后的文件內(nèi)容進(jìn)行 AES-256加密,得到加密后的內(nèi)容。8) 按照1) 7)相同的步驟對所有文件進(jìn)行壓縮和加密,并按照圖2所示文件格式進(jìn)行保 存從而得到壓縮后的文件。在經(jīng)過壓縮和加密過程后生成的壓縮文件中,需要保存salt、count、IV、PSWcheck和Data CRC32值。其中 Data CRC32保存在文件頭,salt、count、IV、PSWcheck保存在文件 頭extra data中的文件加密記錄中,在解密階段需要讀取這些域?qū)γ艽a進(jìn)行驗(yàn)證。解密過程基本上是文件加密過程的逆過程,對加密壓縮文件的解密過程如下。1) 讀取加密壓縮文件的標(biāo)記和主頭部分,確定RAR版本。2) 讀取文件頭。讀取第一個(gè)文件對應(yīng)的文件頭,獲取Salt、Count、PSWcheck、IV和DataCRC32 值。3)進(jìn)行PBKDF2計(jì)算。以Salt、Count、用戶密碼password和KeyLength為參數(shù)進(jìn)行 PBKDF2 計(jì)算,得到文件解密密鑰 Key、PSWcheck和HashKey。該步驟和加密過程中 2)、3)、4) 步驟相同,詳見加密過程。4) 用戶密碼驗(yàn)證。將步驟 3)中產(chǎn)生的PSWcheck值和步驟1)中從文件讀取的 PSWcheck 值進(jìn)行比較,如果相同,則說明驗(yàn)證通過,繼續(xù)5);不同則表明用戶輸入密碼錯(cuò)誤,用 戶重新輸入密碼轉(zhuǎn) 3),否則結(jié)束。5) 文件解密。根據(jù)初始化向量IV和3)中產(chǎn)生的解密密鑰 Key,對文件1加密后的內(nèi)容進(jìn) 行解密,得到壓縮后的文件內(nèi)容。6) 文件解壓。對5 )中得到的文件內(nèi)容進(jìn)行解壓縮,得到文件1原始內(nèi)容,即原文件。7) 對原文件進(jìn)行CRC計(jì)算,將計(jì)算得到的校驗(yàn)值作為HMAC-SHA256 的輸入消息,HashKey作為密鑰,產(chǎn)生消息摘要。然后對消息摘要進(jìn)行類似異或運(yùn)算,得到文件的校 驗(yàn)值CRC32。詳見加密過程步驟 5)。8) 將7)中計(jì)算得到的 CRC32值和步驟2)中讀取的Data CRC32進(jìn)行比較,相同則說明 用戶密碼正確并且文件沒有損壞,轉(zhuǎn)9);否則說明文件損壞,退出。9) 依次對所有文件重復(fù)進(jìn)行2) 8),直到所有文件均被解壓。以上步驟中對壓縮文件中各個(gè)域的讀取參考第2節(jié)中對文件格式的介紹。3.2 RAR5壓縮格式,加密文件名耶fc麗ms 瞬日常履甘nAd' 叵后WIeSJ Jfetm *Wi«2r-50nCfnS 0 awsn1.010.995 ? F3W.72B305.200 F&M H劉眞i2015/11/1 S.B BFAD.ewe* Ti-fl'fSgft Bi刪*呂迂ZMtafrfitocftirtrThr SrcurJty ?£ Eer JJcrlmliFg圖5壓縮文件在不加密文件名下的解壓縮操作在壓縮過程中,如果不選擇“加密文件名”選項(xiàng),這樣產(chǎn)生的壓縮文件用戶即使不知道 壓縮文件的密碼,也可以查看壓縮文件中的包含的文件名稱、文件大小、修改時(shí)間等信息, 如圖5所示。顯然,有時(shí)候我們對文件的保密要求比較高,并不想讓非授權(quán)用戶獲得這些信息,因此就需要對這些文件元數(shù)據(jù)進(jìn)行加密。由于這些信息保存在壓縮文件的主頭、文件頭等元數(shù)據(jù)塊中,因此要加密文件名等相關(guān)信息,就需要對這些部分元數(shù)據(jù)信息進(jìn)行加密。事實(shí)上,對這些信息的加密是通過在壓縮文件格式中實(shí)現(xiàn)一個(gè)加密頭,然后再利用加密頭加密這部分元數(shù)據(jù)信息達(dá)到的。前面介紹過加密頭是可選的, 加密頭的作用正在于此, 用來實(shí)現(xiàn)對文件名等信息的加密。因此,對于“加密文件名”情況下,對文件的加密過程分為兩個(gè)階段,第一階段是利用文件頭中的加密記錄實(shí)現(xiàn)對文件內(nèi)容的加密,然后利用加密頭實(shí)現(xiàn)對主頭、文件頭等元數(shù)據(jù)塊的加密,下圖6簡要顯示了這兩階段加密過程。加密-加3E標(biāo)記加密頭主頭文件頭1密 記 錄文件內(nèi)容加密詆圖6文件的兩階段加密過程對于利用文件頭中的加密記錄去加密數(shù)據(jù)部分,該過程和前面的介紹不加密文件名選擇下的過程是一樣的,這里不再贅述,這里主要對加密頭加密元數(shù)據(jù)塊的過程進(jìn)行介紹。圖7顯示了加密頭對主頭、文件頭等元數(shù)據(jù)塊的加密過程。KeyLength(256)程過密加塊據(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ù)塊加密過程從上圖7可以看出,利用加密頭對主頭、文件頭等部分的加密和前面介紹的對數(shù)據(jù)部分的加密過程類似,但又有相應(yīng)的簡化。首先通過PBKDF2運(yùn)算得到加密密鑰,利用該加密密鑰去加密主頭、文件頭等元數(shù)據(jù)塊,然后將Salt、Count、PSWcheck、IV保存在加密頭中用于解壓縮時(shí)對用戶密碼進(jìn)行驗(yàn)證。事實(shí)上,IV并不是保存在加密頭中,而是保存在元數(shù)據(jù)塊之前,每一個(gè)元數(shù)據(jù)塊對應(yīng)一個(gè)IV。這里需要特別指出的是,對元數(shù)據(jù)塊和數(shù)據(jù)部分加密都用到了PBKDF2算法,需要用戶提供用戶密碼,但它們實(shí)際上采用的是同一個(gè)密碼,因此在采用壓縮工具對文件進(jìn)行壓縮過程中,只需要提供一個(gè)用戶密碼即可。并且,默認(rèn)情況下加密頭和加密記錄中保存的Salt、Count值都一樣。因此在解壓縮時(shí),只在解密元數(shù)據(jù)塊時(shí)進(jìn)行PBKDF2計(jì)算對用戶密碼進(jìn)行驗(yàn)證,在解密文件數(shù)據(jù)部分時(shí)不需要再進(jìn)行PBKDF2計(jì)算來驗(yàn)證密碼,并且直接使用解密元數(shù)據(jù)塊過程中 PBKDF2算法產(chǎn)生的密鑰來解密文件的文件內(nèi)容,但要注意的是初始化向 量IV發(fā)生了改變。3.3 RAR壓縮格式,不加密文件名8所示。在采用RAR壓縮格式,不加密文件名的選擇下,文件的壓縮加密過程如下圖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壓縮格式+不加密文件名”模式下文件的壓縮加密過程在對文件進(jìn)行壓縮加密的過程中,首先將 Salt和用戶密碼拼接,然后對拼接后的結(jié)果 進(jìn)行262144次循環(huán)的SHA-1計(jì)算(實(shí)際上在262144次年循環(huán)中,每次循環(huán)包含兩個(gè) SHA-1 計(jì)算),產(chǎn)生加密密鑰Key和初始化向量IV。最后對壓縮后的文件內(nèi)容進(jìn)行AES-128加密,得到加密后內(nèi)容。同時(shí),為了便于解壓縮階段能夠?qū)τ脩裘艽a進(jìn)行驗(yàn)證,還需要對原文件內(nèi)容進(jìn)行CRC計(jì)算,并將CRC校驗(yàn)值Data CRC32保存在文件頭中。在解壓縮階段,以同樣的方式得到加密密鑰Key和初始化向量IV后,對加密的文件內(nèi)容進(jìn)行AES-128解密操作,然后對解密的文件內(nèi)容解壓縮,還原出原文件內(nèi)容。最后對原 文件內(nèi)容進(jìn)行 CRC計(jì)算,如果計(jì)算得到的校驗(yàn)值和文件頭中保存的Data CRC32校驗(yàn)值相同,則表明用戶提供的密碼正確,否則表明用戶密碼錯(cuò)誤或者文件內(nèi)容損壞。從上面的過程可以看出,RAR壓縮格式下加密過程與RAR5壓縮格式下加密過程存在較大的差別。1. 前者采用 262144次SHA-1計(jì)算作為密鑰導(dǎo)出函數(shù),而后者采用PBKDF2函數(shù)(count=32768 )作為密鑰導(dǎo)出函數(shù)。2. 前者采用AES-128加密算法對文件內(nèi)容加密,后者采用AES-256加密算法對文件內(nèi)容加密。3. 前者只有對文件內(nèi)容進(jìn)行解密后通過CRC校驗(yàn)值比對才能判斷用戶密碼是否正確或者文件內(nèi)容損壞,但不能夠?qū)Χ哌M(jìn)行區(qū)分,后者能夠在早期通過PBKDF2計(jì)算產(chǎn)生的PSWcheck值進(jìn)行比較來判斷,在不相同的情況下能夠區(qū)分出到底是用戶密碼錯(cuò)誤還是文件 內(nèi)容損壞。3.4 RAR壓縮格式,加密文件名在壓縮過程中選擇 RAR壓縮格式,加密文件名,相比于不加密文件名,只需要在后者 的基礎(chǔ)上增加對文件頭等元數(shù)據(jù)塊的加密操作。對文件頭的加密過程和對前面介紹的文件內(nèi)容的加密過程一樣,如圖9所示,這里不做過多的介紹。在解壓縮階段,需要首先解密出文件頭等元數(shù)據(jù)塊信息,需要進(jìn)行262144次SHA-1計(jì)算產(chǎn)生解密文件頭等需要用到的解密密鑰Key和初始化向量IV ,然后對元數(shù)據(jù)塊的信息進(jìn)行AES-128解密操作。如果用戶密碼正確,則可以通過文件頭提供的信息進(jìn)一步對文件內(nèi) 容進(jìn)行解密,否則無法正確解析文件頭等元數(shù)據(jù)塊,并且文件頭部的CRC校驗(yàn)無法通過,解壓縮失敗。用戶密碼 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壓縮格式+加密文件名”模式下文件的壓縮加密過程4.結(jié)論本文首先針對 winrar壓縮軟件使用過程中4中不同的壓縮選擇,即“ RAR5壓縮格式, 不加密文件名” 、“ RAR5 壓縮格式, 加密文件名” 、“ RAR 壓縮格式, 不加密文件名” 、“RAR 壓縮格式,加密文件名” ,介紹了 RAR 壓縮加密文件的加解密過程。隨后分析了不同選擇 下密碼驗(yàn)證過程的復(fù)雜性,發(fā)現(xiàn)對于普通計(jì)算機(jī)采用字典方式去破解 RAR 壓縮文件是不可 行的,而是否能夠利用 FPGA 去實(shí)施字典破解還需要進(jìn)一步的研究和分析。Rar3文件格式壓縮文件包含多個(gè)可變長度的塊,塊的順序可以改變,但第一個(gè)塊和第二個(gè)塊分別是marker塊和壓縮文件頭塊。每個(gè)塊都以如下域開始: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 不存在,塊大小就是 HEAD_SIZE ,否則,塊大小時(shí)HEAD_SIZE+ADD_SIZE 。每個(gè)塊的HEAD_FLAGS的如下位含義都一樣:0x4000 :如果設(shè)置,則舊版本 RAR會忽略該塊,并且當(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=0x7amarker 塊壓縮文件頭塊文件頭塊舊版本注釋頭塊 舊版本認(rèn)證信息塊 舊版本子塊舊版本恢復(fù)記錄塊 舊版本認(rèn)證信息塊 子塊注釋塊不會單獨(dú)存在,而是在其他塊中使用。按照如下流程處理壓縮文件:1. 讀并校驗(yàn) marker塊;2讀壓縮文件頭3. 讀或者跳過 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)讀取),讀或者跳過HEAD_SIZE-sizeof(FILE_HEAD)字節(jié)。如 果 (HEAD_FLAGS&0 x100), 讀 或 者 跳 過HIGH_PACK_SIZE*0 x100000000+PACK_SIZE 字節(jié)否則,讀或者跳過 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,0x0007實(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ú)立的注釋塊,不會設(shè)置該標(biāo)志位 0x0004 - Archive lock attribute 0x0008 - solid attribute ( solid archive)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 , 0x74HEAD_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) (針對 2.0 以后版 本)Bit 7,6,5(僅適用于2.0及以后的版本)000 -字典大小64KB001 -字典大小128KB010 -字典大小256KB011 -字典大小512KB100 -字典大小1024KB101 -字典大小2048KB110 -字典大小 4096KB111 -文件是目錄0x100 - HIGH_PACK_SIZE and HIGH_UNP_SIZE fields are prese nt,僅針對大文件(大于2GB ),小文件不存在該位0x200 -文件名包含常用和Unicode編碼的字符,使用 0分隔。在這種情況下,NAME_SIZE等于通常的名字+Unicode編碼的名字+1。如果該位設(shè)置了,但FILE_NAME 不包含0,意味著文件名是用 UTF-8編碼的。0x400 -頭部在文件名后面包含額外的 8字節(jié),用于增加加密的強(qiáng)度(通常稱為鹽 salt)0x800-版本標(biāo)志位,這是一個(gè)舊版本的文件,在文件名后面有;的版本號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)號0 - MS DOS1 - OS/22 - WIN323 - Unix4 - Mac OS5 - BeOSFILE_CRC :4B,文件 CRCFTIME :4B,日期和時(shí)間,以 MS-DOS格式UNP_VER :1B,提取文件所需的 RAR版本,版本號編碼格式:10*major version+ minor vers ionMETHOD :1B,壓縮方法0x30 -存儲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í)存在。FILE_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 0x1a 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的版本號。讀取加密頭(第一次 ReadHeader(),當(dāng)前文件指針是 8,因?yàn)閮H讀取了 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: 16BPswCheck: 8BCsum: 4B將PswCheck進(jìn)行sha256運(yùn)算與csum比較是否相等。En crypted=True第一次 Readheader()完畢。緊接著進(jìn)入第二次 Readheader()函數(shù)。已經(jīng)判斷出文件被加密,開始解密。要求用戶輸入密碼。讀取初始化向量 HeaderslnitV : 16B進(jìn)行密碼破解,破解信息包括:用戶輸入的密碼,鹽salt,Lg2Count,密碼運(yùn)算后的結(jié)果存放在局部變量PswCheck中,然后將計(jì)算出的 PswCheck與前面讀出的 PswCheck進(jìn)行比較,一致則密碼正確。解密算法:PBKDF2()函數(shù):輸入?yún)?shù):密碼,密碼長度,鹽,鹽長度,1<<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次HMAC_SHA256 運(yùn)算, 結(jié)果是 PswCheckvalue。RAR5不加密文件名-解壓縮流程及破解所需信息IsArchive(True)函數(shù):判斷是否是壓縮文件。首先讀取marker塊,判斷RAR的版本號。讀取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-主頭(HEAD_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);沒有對解密有用的 信息。保存當(dāng)前的文件指針,進(jìn)行第二次ReadHeader()。首先讀取 7B,分解讀取的 7B,HeadCRC : 4B,BlockSize :可變的,在當(dāng)前例子中是 1B,大小是87,然后根據(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é)處理 ExtraSize 數(shù)據(jù) ProcessExtra50(&Raw,(size_t )ExtraSize,hd);此部分?jǐn)?shù)據(jù)是加密信息數(shù)據(jù)FHEXTRA_CRYPTLg2Count,Salt,InitV,PswCheck都被讀取出來,這些就是校驗(yàn)密碼是否正確所需要的信息。RAR3加密文件名-解壓縮流程及破解所需信息IsArchive(True)函數(shù):判斷是否是壓縮文件。首先讀取marker塊,判斷RAR的版本號。讀取HEAD3_MAIN(第一次 ReadHeader()。當(dāng)前文件指針是 7,因?yàn)閮H讀取了 marker 塊。首先讀取7B,這是Header塊最小的字節(jié)數(shù)。分解讀取的 7B,HeadCRC : 2BHeaderType: 1B,0x73,HEAD3_MAINFlags: 2BHeadSize: 2B繼續(xù)讀取后續(xù)的數(shù)據(jù),分別是HighPosAV : 2B,PosAV : 4B根據(jù)Flags判斷出文件被加密。第一次讀取ReadHeader結(jié)束。保存文件指針,開始第二次ReadHeader()判斷出文件被加密,要求用戶輸入密碼,然后讀出Salt: 8BHeadersCrypt.SetCryptKeys( false , CRYPT_RAR3p&Cmd->Password,Salt,NULL。,NULL,NULL);后續(xù)讀出的數(shù)據(jù)是 HEAD_FILE,并且需要解密。根據(jù)上面輸入的密碼對 HEAD_FILE 進(jìn)行解密,前 2B是CRC校驗(yàn)值,對讀出的內(nèi)容 進(jìn)行CRC計(jì)算,然后跟 CRC校驗(yàn)值進(jìn)行比較,如果一致,則密碼正確,否則,密碼錯(cuò)誤。采用unRar源代碼對RAR3加密文件名進(jìn)行解密,也是需要交互,不能全部由硬件完成密碼的校驗(yàn)。采用John The Ripper軟件,可以完全由硬件完成。讀取salt值和最后16字節(jié),然后對最后16字節(jié)進(jìn)行解密,16字節(jié)是明文。RAR3不加密文件名-解壓縮流程及破解所需信息破解方案RAR5 :提取 Salt、InitV、PswCheck、Lg2count,寫入文本文件 out.txt 中,然后 oclHashCat 讀取out.txt,破解出密碼。Unrar程序修改:1、 添加Hex_to_Str.h頭文件,里面是16進(jìn)制轉(zhuǎn)換成相應(yīng)字符串的函數(shù),用于將Salt、InitV、 PswCheck轉(zhuǎn)換成字符串寫入文件2、 加密文件名,在 HEAD_CRYPT 處理過程中,讀出 Salt、InitV、PswCheck等寫入文件; 不加密文件名,在 HEAD_FILE 處理過程中,讀出 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,破解出密碼。

注意事項(xiàng)

本文(rar壓縮文件加密過程及破解可行性分析v2)為本站會員(小**)主動上傳,裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。 若此文所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng)(點(diǎn)擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因?yàn)榫W(wǎng)速或其他原因下載失敗請重新下載,重復(fù)下載不扣分。




關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

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

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


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