簡述
在:實驗吧/隱寫術/小家伙挺可愛中遇到了zip偽加密這個概念,於是乎找了很多資料,來簡單記錄下我的心路歷程吧~^_^~
原理
zip偽加密是在文件頭的加密標志位做修改,進而再打開文件時識被別為加密壓縮包。
背景
首先,我們來看zip文件頭協議。這里以中文資料為證,但是仍然建議大家去http://www.pkware.com 閱讀官方文檔,雖然英文讀起來有些困難。
一個 ZIP 文件由三個部分組成:
壓縮源文件數據區+壓縮源文件目錄區+壓縮源文件目錄結束標志
查看詳情
實例
下面給出西普的一個實例:
壓縮源文件數據區:
50 4B 03 04:這是頭文件標記(0x04034b50)
14 00:解壓文件所需 pkware 版本
00 00:全局方式位標記(有無加密)
08 00:壓縮方式
5A 7E:最后修改文件時間
F7 46:最后修改文件日期
16 B5 80 14:CRC-32校驗(1480B516)
19 00 00 00:壓縮后尺寸(25)
17 00 00 00:未壓縮尺寸(23)
07 00:文件名長度
00 00:擴展記錄長度
6B65792E7478740BCECC750E71ABCE48CDC9C95728CECC2DC849AD284DAD0500
壓縮源文件目錄區:
50 4B 01 02:目錄中文件文件頭標記(0x02014b50)
3F 00:壓縮使用的 pkware 版本
14 00:解壓文件所需 pkware 版本
00 00:全局方式位標記(有無加密,這個更改這里進行偽加密,改為09 00打開就會提示有密碼了)
08 00:壓縮方式
5A 7E:最后修改文件時間
F7 46:最后修改文件日期
16 B5 80 14:CRC-32校驗(1480B516)
19 00 00 00:壓縮后尺寸(25)
17 00 00 00:未壓縮尺寸(23)
07 00:文件名長度
24 00:擴展字段長度
00 00:文件注釋長度
00 00:磁盤開始號
00 00:內部文件屬性
20 00 00 00:外部文件屬性
00 00 00 00:局部頭部偏移量
6B65792E7478740A00200000000000010018006558F04A1CC5D001BDEBDD3B1CC5D001BDEBDD3B1CC5D001
壓縮源文件目錄結束標志:
50 4B 05 06:目錄結束標記
00 00:當前磁盤編號
00 00:目錄區開始磁盤編號
01 00:本磁盤上紀錄總數
01 00:目錄區中紀錄總數
59 00 00 00:目錄區尺寸大小
3E 00 00 00:目錄區對第一張磁盤的偏移量
00 00:ZIP 文件注釋長度
猜想
所以如果把一個zip文件的文件頭或者加密標志位進行適當修改,那就可能會改變文件的可讀性了唄!
測試(一)
親測例子:先壓縮一個1.zip,再用Winhex打開,如下圖:
壓縮源文件數據區:
50 4B 03 04:這是頭文件標記
14 00:解壓文件所需 pkware 版本
00 00:全局方式位標記(有無加密)
08 00:壓縮方式
07 76:最后修改文件時間
F2 48:最后修改文件日期
……
壓縮源文件目錄區:
50 4B 01 02:目錄中文件文件頭標記(0x02014b50)
1F 00:壓縮使用的 pkware 版本
14 00:解壓文件所需 pkware 版本
00 00:全局方式位標記(有無加密,這個更改這里進行偽加密,改為09 00打開就會提示有密碼了)
08 00:壓縮方式
07 76:最后修改文件時間
F2 48:最后修改文件日期
……
綜上所述,如果把第二個加密標記位的00 00改為09 00,打開就會提示有密碼:
![]()
於是乎,這樣就達到了zip偽加密的目的,可是這里又有一個疑問了,你可能會問,為什么改成09,而不是其他的數字呢,其實改成09只是舉的一個例子,只要末位是奇數,就代表加密,反之,末位是偶數代表未加密(這是我猜想的,具體操作也符合我的猜想,可我不知道這個原理是什么,如果你了解的話,歡迎來分享分享~^_^)
【注】本文轉自:http://blog.csdn.net/ETF6996/article/details/51946250