压缩包详解及伪加密
0x01 壓縮包詳解及分類歸納
壓縮包被官方認為是一個計算機軟件,可以減小文件中的比特和字節總數,達到節省磁盤空間等作用
ZIP基本原理
查找文件內的重復字節,并建立一個相同字節的“詞典”文件,并用一個代碼表示,比如在文件里有幾處有一個相同的詞“中華人民共和國”,用一個代碼表示并寫入“詞典”文件,這樣就可以達到縮小文件的目的
壓縮包作用
壓縮算法
有很多不同的壓縮文件格式,例如ZIP、RAR、7Z等
實際上這只是不同的壓縮規范,就算是同樣的格式,例如都是ZIP,其中的壓縮算法可能也是不一樣的,例如ZIP可以使用Shrinking、Reducing、Deflate等算法
某個壓縮文件壓縮率高不高,不但要看其文件格式,更要看其具體使用的算法(例如ZIP和7Z都可以使用Deflate算法)
壓縮軟件
- WinRAR
- 好壓(Haozip)
- WinZip
- 7-Zip
- WinMount
- Peazip
- UHARC
- FreeARC
- 360壓縮
0x02 ZIP
ZIP是一種支持無損數據壓縮的存檔文件格式
ZIP 文件可能包含一個或多個可能已壓縮的文件或目錄,ZIP 文件格式允許使用多種壓縮算法,盡管DEFLATE是最常見的,這種格式最初創建于 1989 年,并首次在PKWARE, Inc.的PKZIP實用程序中實現
ZIP 文件通常使用文件擴展名 .zip 或 .ZIP 以及 MIME媒體類型
ZIP 被許多程序用作基本文件格式,通常使用不同的名稱,通過用戶界面導航文件系統時,代表 ZIP 文件的圖形圖標通常顯示為文檔或其他突出顯示拉鏈的對象
ZIP設計
.ZIP文件用于存儲文件,ZIP 允許使用許多不同的方法壓縮包含的文件,以及簡單地存儲文件而不壓縮它,每個文件單獨存儲,允許使用不同方法壓縮同一存檔中的不同文件
由于 ZIP 存檔中的文件是單獨壓縮的,因此可以提取它們或添加新文件,而無需對整個存檔應用壓縮或解壓縮
這與壓縮tar文件的格式形成對比,這種隨機訪問處理不容易實現
目錄放置在 ZIP 文件的末尾,這標識了 ZIP 中的文件,并標識了該文件在 ZIP 中的位置,這允許 ZIP 閱讀器加載文件列表,而無需閱讀整個 ZIP 存檔
ZIP 存檔還可以包含與 ZIP 存檔無關的額外數據,這允許通過將程序代碼添加到 ZIP 存檔并將文件標記為可執行文件,將 ZIP 存檔制作成自解壓存檔(解壓縮其包含數據的應用程序),最后存儲目錄還可以通過將壓縮文件附加到無害文件(例如 GIF 圖像文件)來隱藏壓縮文件
.ZIP格式使用32位 CRC 算法并包括存檔目錄結構的兩個副本,以提供更好的數據丟失保護
ZIP結構
ZIP 文件通過位于存檔結構末尾的中央目錄記錄的結尾來正確識別,以便輕松附加新文件
如果中央目錄記錄的結尾指示非空存檔,則存檔中每個文件或目錄的名稱應在中央目錄條目中指定,以及有關該條目的其他元數據和 ZIP 文件的偏移量,指向到實際的錄入數據
這允許相對快速地執行存檔的文件列表,因為不必讀取整個存檔即可查看文件列表
ZIP 文件中的條目還在本地文件頭中包含此信息,以實現冗余。只有在文件末尾的中央目錄中指定的文件才有效,掃描 ZIP 文件以查找本地文件頭是無效的(除非存檔損壞),因為中央目錄可能會聲明某些文件已被刪除而其他文件已被更新
例如,我們可以從包含文件 A、B 和 C 的 ZIP 文件開始。然后刪除文件 B 并更新文件 C
這可以通過在原始 ZIP 文件的末尾附加一個新文件 C 并添加一個僅列出文件 A 和新文件 C 的新中央目錄來實現
當 ZIP 最初設計時,通過軟盤傳輸文件很常見,但是寫入磁盤非常耗時,如果你有一個很大的 zip 文件,可能跨越多個磁盤,并且只需要更新幾個文件,而不是讀取和重寫所有文件,那么讀取舊的中央目錄,追加新文件會快得多然后附加一個更新的中央目錄
中央目錄中文件條目的順序不必與檔案中文件條目的順序一致
存儲在 ZIP 存檔中的每個條目都由本地文件頭引入,其中包含有關文件的信息,例如注釋、文件大小和文件名,然后是可選的“額外”數據字段,然后是能壓縮的、能加密的文件數據。“額外”數據字段是 ZIP 格式可擴展性的關鍵
“額外”字段用于支持 ZIP64 格式、與 WinZip 兼容的 AES 加密、文件屬性和更高分辨率的 NTFS 或 Unix 文件時間戳。通過“額外”字段可以進行其他擴展。規范要求 ZIP 工具忽略它們無法識別的額外字段
ZIP 格式使用特定的 4 字節“簽名”來表示文件中的各種結構。每個文件條目都由特定的簽名標記,中央目錄記錄的結尾用其特定的簽名來表示,中央目錄中的每個條目都以 4 字節的中央文件頭簽名開頭
ZIP 規范中沒有 BOF 或 EOF 標記,通常 ZIP 文件中的第一件事是 ZIP 條目,可以通過其本地文件頭簽名輕松識別
ZIP組成
下面圖片給出的0x04034b50是我們在二進制軟件中看到的倒序,也就是我們看到的504b0304
504b0304為標識頭,這部分也經常以504b0304開頭,這一部分也稱為文件實體,所有長度字段都以字節為單位計算長度
前面提到的中央目錄文件頭,也稱為目錄源數據,記錄的是文件目錄信息,經常以504b0102開頭
中央目錄記錄結束 (EOCD)
在所有中央目錄條目之后是中央目錄(EOCD)記錄的結尾,這標志著 ZIP 文件的結尾,也稱為目錄源數據結束標識,通常以505b0506
0x03 偽加密
修改全局方式位標記
壓縮源文件目錄區:
- 50 4B 01 02:目錄區文件頭標記
- 1F 00:壓縮使用的 pkware 版本 或3F 00
- 14 00:解壓文件所需 pkware 版本
- 00 00:全局方式位標記(偽加密,改為 09 00 就提示有密碼了)
原理就是修改了zip的全局方式位標記后,打開顯示需要密碼,實際沒有密碼
之前有提過zip存在三個部分,第二個部分的全局方式位標記是偽加密的關鍵
再次打開之后就會顯示密碼
無加密
數據區 的全局加密應當為 00 00
目錄區 的全局方式位標記應當為 00 00
假加密
數據區 的全局加密應當為 00 00
目錄區 的全局方式位標記應當為 09 00
真加密
數據區 的全局加密應當為 09 00
目錄區 的全局方式位標記應當為 09 00
binwalk
binwalk工具的命令
binwalk -e 文件名可以無視偽加密,直接從壓縮包中提取文件
直接破解壓縮包密碼
可以使用Ziperello
References: https://en.wikipedia.org/總結
- 上一篇: keil5报警告warning:impl
- 下一篇: 范式通俗理解:1NF、2NF、3NF和B