暴力破解
利用 ARCHPR
明文攻擊
明文攻擊指的是有一個加密的ZIP和一個未加密的壓縮包中包含的文件,由於同一個ZIP壓縮包里的所有文件都是使用同一個加密密鑰來加密的,所以可以使用已知文件推測出密鑰並解密ZIP文件的攻擊方式。
解題思路:
假設題目提供了一張圖片和一個壓縮包,發現壓縮包加密,且壓縮包中有一張圖片和外面的圖片命名是一樣的,猜測為明文攻擊。使用軟件將圖片進行壓縮后發現,壓縮包中的圖片和壓縮后的圖片的CRC32值是一樣的,確認為明文攻擊。
做法:
打開ARCHPR,打開待解密的壓縮包,選擇“攻擊類型”為“明文”,點擊“明文”選項選擇剛才將圖片壓縮的壓縮包。點擊“開始”后就開始進行破解,得到密鑰。
【注:不同的壓縮軟件使用的壓縮算法不同,自行壓縮的那個壓縮包需要同題目給的壓縮包的壓縮算法一直才能進行明文攻擊(常見壓縮軟件:好壓、winRAR、7z、快壓、360壓縮)】
ARCHPR掩碼
選擇攻擊類型為掩碼,abc???,abc為已知字符,???代表未知字符(用三個問號表示)
CRC32碰撞(適合字節小的壓縮包文件)
CRC的全稱是循環冗余校驗(Cyclic Redundancy Check, CRC),不同長度的常數對應着不同的CRC實現算法,可用來校驗文件是否出錯但並不能用於自動糾錯。
解題思路:
題目解壓打開發現有多個壓縮包可嘗試CRC32碰撞
做法:
編寫腳本,嘗試使用CRC32碰撞還原出所有壓縮包中文件的內容
參考大神寫的腳本
import zipfile
import string
import binascii
def CrackCrc(crc):
for i in dic:
for j in dic:
for p in dic:
#for q in dic:
s = i + j + p
if crc == (binascii.crc32(s) & 0xffffffff):
#在 Python 2.x 的版本中,binascii.crc32 所計算出來的 CRC 值域為[-2^31, 2^31-1] 之間的有符號整數,為了要與一般CRC結果作比對,需要將其轉為無符號整數,所以加上& 0xffffffff來進行轉換。如果是 Python 3.x 的版本,其計算結果為 [0, 2^32-1] 間的無符號整數,因此不需額外加上& 0xffffffff
#print s
f.write(s)
return
def CrackZip():
for I in range(36):
file = 'flag' + str(I) + '.zip'
f = zipfile.ZipFile(file, 'r')
GetCrc = f.getinfo('flag.txt')
crc = GetCrc.CRC
#以上3行為獲取壓縮包CRC32值的步驟
#print hex(crc)
CrackCrc(crc)
dic = string.ascii_letters + string.digits + '+/='
f = open('out.txt', 'w')
CrackZip()
f.close()
如果壓縮包文件為6字節
可利用工具https://github.com/theonlypwner/crc32
使用方法:
python crc32.py reverse crc32密文(16進制形式)
zip偽加密
組成:壓縮源文件數據區+壓縮源文件目錄區+壓縮源文件目錄結束標志
ZIP的文件頭標識固定為0×50 4B 03 04
核心目錄區的標記為0x 50 4B 01 02
核心目錄結束標記0×50 4B 05 06
解題思路
查看壓縮源文件目錄區的全布局方式標記
50 4B 01 02 3F 00 14 00 09 00
第9、10位00 00,即為全布局方式標記,由此判斷有無加密(偽加密的關鍵)
【注:全局方式位標記的四個數字中只有第二個數字對其有影響,其它的不管為何值,都不影響它的加密屬性!】
第二個數字為奇數時 –>加密
第二個數字為偶數時 –>未加密
做法
將全局方式位標記改為00 00
圖片中隱藏壓縮包
binwalk或foremost分離
以jpg文件為例,jpg文件以FF D9結尾,而圖片瀏覽器會忽略FF D9后面的內容,此次可在其后面加入其它文件
針對此類題目,可將圖片拖進十六進制編輯器,觀察文件格式
或者直接拉進kali binwalk/foremost 掃描分離