ZIP可以,RAR或者其他的不行
首先看看前置知識:
感謝大佬https://blog.csdn.net/u011377996/article/details/79286958
爲了方便大家,這裏直接複製過來
原理
zip僞加密是在文件頭的加密標誌位做修改,進而再打開文件時識被別爲加密壓縮包。
背景
首先,我們來看zip文件頭協議。這裏以中文資料爲證,但是仍然建議大家去http://www.pkware.com 閱讀官方文檔,雖然英文讀起來有些困難。
實例
下面給出西普的一個實例:
壓縮源文件數據區:
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只是舉的一個例子,只要末位是奇數,就代表加密,反之,末位是偶數代表未加密(這是我猜想的,具體操作也符合我的猜想,可我不知道這個原理是什麼,如果你瞭解的話,歡迎來分享分享~_)
測試(二)
猜想:
既然加密標誌位可以修改,那頭文件標記位應該也能修改吧,試試咯~:
把文本區原來顯示的PK位的50 4B改成其他數據,再打開zip文件:
顯然,這樣也使zip文件不可讀!
識別真假加密
無加密
壓縮源文件數據區的全局加密應當爲00 00
且壓縮源文件目錄區的全局方式位標記應當爲00 00
假加密
壓縮源文件數據區的全局加密應當爲00 00
且壓縮源文件目錄區的全局方式位標記應當爲09 00
真加密
壓縮源文件數據區的全局加密應當爲09 00
且壓縮源文件目錄區的全局方式位標記應當爲09 00