rar,zip檔案加密判斷

2021-09-28 13:55:54 字數 4797 閱讀 2132

rar官方文件:

一.rar加密判斷:

rar文件格式如下:   

自解壓模組(可選)

rar 5.0簽名

歸檔加密頭(可選)

主歸檔頭

歸檔注釋服務頭(可選)

檔案頭1

前乙個檔案的服務頭(ntfs acl,流等)(可選)。

...

檔案頭n個

先前檔案的服務頭(ntfs acl,流等)(可選)。

恢復記錄(可選)。

歸檔頭的末尾。

rar5.0以後的簽名格式為:0x52 0x61 0x72 0x21 0x1a 0x07 0x01 0x00,以前的簽名格式為0x52 0x61 0x72 0x21 0x1a 0x07 0x00。兩者加密判斷方式不同,5.0以前的只需要判斷文件第24個位元組第3位是否為1,為1加密(文件格式官方位址未找到,可參考以後的版本判斷加密方式稍顯複雜。需要在檔案頭中找出extra area區域位置,如果它的值是0x01則檔案加密。需注意的:

1.vint 可變長度整數。可以包含乙個或多個位元組,其中每個位元組的低7位包含整數資料,而每個位元組中的最高位是連續標誌。如果最高位為0,則這是序列中的最後乙個位元組。因此,第乙個位元組包含整數和連續標誌的7個最低有效位。第二個位元組(如果存在)包含下乙個7位,依此類推。

2.文件中存在多個歸檔頭,只能通過header type確認歸檔頭型別。且每個歸檔大小需要通過header size計算下乙個歸檔頭位置。直到找到需要的歸檔頭

檔案頭結構如下:

header crc32

uint32

header size

vint

標頭資料的大小,從「 標頭型別」字段開始,直至(包括可選的)額外區域。在當前的實現中,該欄位不得超過3個位元組,從而導致最大標頭大小為2 mb

header type

vint

2 為檔案頭, 3 為服務頭

header flags

vint

所有標頭共有的標誌

extra area size

vint

extra area大小. 可選字段, 當 header flag為0x0001時存在

data size

vint

size of data area.可選字段,僅當設定了0x0002標頭標誌時才存在。對於檔案標題,此欄位包含打包的檔案大小

file flags

vint

這些標頭型別的特定標誌:

0x0001目錄檔案系統物件(僅檔案標頭)。

0x0002存在unix格式的時間字段。

0x0004 crc32欄位存在。

0x0008開啟包裝的尺寸是未知的。 如果設定了標誌0x0008,則未打包的大小字段仍然存在,但必須忽略,並且必須執行提取,直到到達壓縮流的末尾。如果實際檔案大小大於作業系統報告的大小,或者檔案大小未知(例如,除從stdin歸檔到多卷歸檔時的最後乙個卷以外的所有卷),則可以設定此標誌。

unpacked size

vint

解壓縮的檔案或服務資料大小。

attributes

vint

如果是檔案頭,則為作業系統特定的檔案屬性。可以用於特定資料需求,也可以保留,並為服務標頭設定為0

mtime

uint32

unix時間格式的檔案修改時間。可選,如果設定了0x0002檔案標誌,則存在。

data crc32

uint32

已解壓縮的檔案或服務資料的crc32。對於在卷之間拆分的檔案,它包含當前卷中除最後檔案部分以外的所有檔案部分所包含的檔案打包資料的crc32。可選,如果設定了0x0004檔案標誌,則存在。

compression information

vint

低6位(0x003f掩碼)包含壓縮演算法的版本,導致可能的0-63值。當前版本是0。

第7位(0x0040)定義固態標誌。如果已設定,rar將在處理之前的檔案後繼續使用剩下的壓縮字典。只能為檔案頭設定,而不能為服務頭設定。

位8-10(掩碼為0x0380)定義了壓縮方法。當前僅使用值0-5。0表示無壓縮。

位11-14(0x3c00)定義提取資料所需的字典大小的最小大小。值0表示128 kb,1-256 kb,...,14-2048 mb,15-4096 mb。

host os

vint

用於建立存檔的作業系統的型別。

0x0000 windows。

0x0001 unix。

name length

vint

檔案或服務標頭名稱的長度。

name

? bytes

可變長度字段,包含utf-8格式的名稱長度位元組,不帶零。

對於檔案頭,這是已歸檔檔案的名稱。正斜槓字元用作unix和windows名稱的路徑分隔符。對於unix名稱,反斜槓被視為名稱的一部分,對於windows檔名稱,反斜槓被視為無效字元。名稱型別由「 主機作業系統」字段定義。

如果unix檔名包含無法正確轉換為unicode和utf-8的任何高階ascii字元,我們會將此類字元對映到0xe080-0xe0ff私有unicode區域,並在結果字串中插入0xfffe unicode非字元以表明它包含已對映字元,提取時需要轉換回去。沒有定義0xfffe的具體位置,我們需要搜尋整個字串。此類對映的名稱不可移植,並且只能在建立它們的同一系統上正確解壓縮。

對於服務標題,此欄位包含服務標題的名稱。現在使用以下名稱:

cmt質量保證

存檔快速開啟的資料

訪問控制列表

ntfs檔案許可權

stmntfs備用資料流

rr恢復記錄

extra area

...包含附加標頭字段的可選區域,僅當設定了0x0001標頭標誌時才存在。

vint

可選資料區,僅當設定了0x0002標頭標誌時才存在。如果是檔案頭,則儲存檔案資料;對於服務頭,則儲存服務資料。根據壓縮方法中的值, 可以對壓縮資訊進行未壓縮(壓縮方法0)或壓縮。

檔案和服務標頭使用相同型別的額外區域記錄:

typenamedescription

0x01

file encryption

檔案加密資訊。

0x02

file hash

檔案資料雜湊

0x03

file time

高精度檔案時間。

0x04

file version

檔案版本號

0x05

redirection

檔案系統重定向。

0x06

unix owner

unix所有者和組資訊

0x07

service data

服務標頭資料

檔案加密記錄

如果檔案資料被加密,則存在該記錄。

size

vint

type

vint

0x01

version

vint

加密演算法的版本。現在僅支援0版本(aes-256)。

flags

vint

0x0001存在密碼檢查資料。

0x0002使用調整過的校驗和而不是普通校驗和。 如果存在標誌0x0002,則rar轉換保留校驗和的檔案或服務資料的完整性,因此它取決於加密金鑰。它使得不可能根據校驗和猜測檔案內容。它會影響檔案頭中的資料crc32和額外區域中檔案雜湊記錄中的校驗和。

kdf count

1 byte

pbkdf2函式的迭代數的二進位制對數。rar可以拒絕處理超過某個閾值的kdf計數。閾值的具體值取決於版本。

salt

16 bytes

設定加密檔案解密金鑰的salt值。

iv16 bytes

aes-256初始化向量

check value

12 bytes

用於驗證密碼有效性的值。僅當設定了0x0001加密標誌時才存在。前8個位元組是使用額外的pbkdf2輪次計算的,最後4個位元組是額外的校驗和。與標準標頭crc32一起,我們具有64位校驗和,以可靠地驗證此字段的完整性並區分無效的密碼和損壞的資料。可以在unrar源**中找到更多詳細資訊。

二.zip加密方式判斷

zip檔案格式:

zip檔案格式結構:

[本地檔案頭1]

[檔案資料1]

[資料描述符1]。 。

。[本地檔案頭n]

[檔案資料n]

[資料描述符n]

[存檔解密頭](efs)

[存檔額外資料記錄](efs)

[**目錄]

[zip64**目錄記錄結尾]

[zip64**目錄定位器結尾]

[**目錄記錄的結尾]

a.本地檔案頭格式:

本地檔案頭簽名4個位元組(0x04034b50)

需要提取2個位元組的版本

通用位標誌2個位元組

壓縮方式2位元組

最後的mod檔案時間2個位元組

最後的mod檔案日期2個位元組

crc-32 4位元組

壓縮大小4位元組

未壓縮大小4位元組

檔名長度2個位元組

額外的字段長度2個位元組

檔名(可變大小)

額外字段(可變大小)

其中本地檔案頭中通用標誌位的第1位被設定則表示,檔案加密,但是需要注意的是,並不是每個檔案頭的該位置表示都能反映是否加密,比如存在多層資料夾的情況,該檔案頭表示的是資料夾(即當需要提取2個位元組的版本為a時),那麼通用標誌位不能反映是否加密。

linux下開啟rar zip檔案

如何在linux下開啟.rar檔案?可以用rarlinux軟體 首先進入root帳戶,然後進入rarlinux 4.1.1.b2.tar.gz檔案所在目錄,以下為命令列操作方式 tar xvf rarlinux 3.9.b2.tar.gz cd rar make 安裝完成!使用 linux自帶的un...

Centos下解壓rar zip檔案的方法

zip檔案的操作 zip r data.zip data 解釋 將data資料夾壓縮成了data.zip格式。unzip data.zip 解釋 將data.zip檔案解壓到當前資料夾。下面是一些詳細的說明 1.我想把乙個檔案abc.txt和乙個目錄dir1壓縮成為yasuo.zip zip r y...

C 根據加密頭資訊,判斷檔案是否為加密檔案

針對某種加密程式,會對本地檔案加密,並且會在檔案頭寫入加密頭資訊 可以使用ue進行檔案二進位制檢視 現在貼上一段 讀取當前檔案的加密頭資訊,判斷該檔案是否為加密檔案。cpp view plain copy intcldscanfiledlg filedecryptstatus wchar t v s...