最近在bugku遇到了一道隱寫題,binwalk之後發現裡面有很多個壓縮包。。。。。。然後就無從下手,於是檢視別人大佬的wp才發現是crc32爆破,由於本人第一次遇到這種題目,就記錄一下吧。。
crc想必大家都知道,它的全稱是迴圈冗餘校驗(cyclic redundancy check, crc),用來校驗檔案是否出錯但並不能用於自動糾錯。。emmmm,計組上課好像講過,老師讓我們回去自己學,記得當時只是初略了解了一下,就是在後面加上一小段冗餘位去檢測,詳細規則谷歌一下吧。。。。
這裡我以破解四位crc的壓縮包為例。。。。寫乙個理解之後的指令碼
#coding:utf-8
import binascii
import string
dic=string.printable #各種列印字元
crc = '''你的輸入 '''
# 記得要以0x開頭
defcrackcrc
(crc):
for i in dic :
for j in dic:
for p in dic:
for q in dic:
s=i+j+p+q
if crc == (binascii.crc32(s) & 0xffffffff):
print s
要特別注意
if (binascii.crc32(str(i)) & 0xffffffff) == crc:
在 python 2.x 的版本中,binascii.crc32 所計算出來的 crc 值域為[-2^31, 2^31-1] 之間的有符號整數,為了要與一般crc 結果作比對,需要將其轉為無符號整數,所以加上& 0xffffffff來進行轉換。如果是 python 3.x 的版本,其計算結果為 [0, 2^32-1] 間的無符號整數,因此不需額外加上& 0xffffffff 。
下面就bugku那道多個壓縮包為例,上指令碼
#coding:utf-8
import binascii
import string
import zipfile
# def tansnum(s):
# return int(s, 16) 轉十六進製制
dic=string.printable
defcrackcrc
(crc):
for i in dic :
for j in dic:
for p in dic:
for q in dic:
s=i+j+p+q
if crc == (binascii.crc32(s) & 0xffffffff):
print s
#return
defgetcrc32
(): l=
for b in range(68):
file = 'out' + str(b) + '.zip'
f = zipfile.zipfile(file,'r')
getcrc = f.getinfo('data.txt')
crc = getcrc.crc
return l
if __name__ == "__main__":
#c = open('out.txt', 'w')
l = getcrc32()
for i in l:
crackcrc(i)
#c.close()
如果上面的python操作zip檔案還不太懂的話看看這個:簡單的來說就是用zipfile讀取檔案,用getinfo函式獲取資訊。。。
特別注意,上面的指令碼跑這一題十分慢,我跑了差不多40分鐘都沒跑完。。。效率極低,所以啊有空我還是學習一下多執行緒該怎麼跑。。。
另外還有一款很好用的6位的crc32爆破
附上神器:
具體使用方法:
python crc32.py reverse 你的crc32密文
這裡的密文記得加上0x變成16進製制。。。即可非常迅速的爆破出對應的資料,舉個例子
這裡就有點哈西衝突的體現了^_^
這個crc32爆破一旦超過六位,我覺得毫無疑義,畢竟密碼超過7位你爆破需要花很長的時間,對於這個也一樣。。。。
這就從另外乙個角度詮釋了什麼叫無法破解的密碼(#^.^#),雖然這乙個東西也會出現類似雜湊衝突的現象。。。。。。
參考文章
CRC32學習總結
這幾天一直在研究crc相關的知識,本來通訊網學習過相關的知識,但是比較淺。通過這幾天的尤其是今天的學習,我對於crc有了全新的認識。課本上主要著重介紹直接計算法,就是資料補零再和生成多項式做除法。這種方法利用迴圈來實現是比較容易的,但是在fpga中,想要利用硬體的併發性來實現crc的計算。最近一直在...
CRC32演算法實現
crc32 檢錯能力極強,開銷小,易於用編碼器及檢測電路實現。從其檢錯能力來看,它所不能發現的錯誤的機率僅為0.0047 以下。從效能上和開銷上考慮,均遠遠優於奇偶校驗及算術和校驗等方式。因而,在資料儲存和資料通訊領域,crc無處不在 著名的通訊協議x.25的fcs 幀檢錯序列 採用的是crc cc...
CRC32繞過RAR密碼
遇到一道題,加密了50位。所以,爆破果斷捨棄 事實上,rar的壓縮文件中是提供乙個crc32的值,這個值是文件在壓縮之前的crc32值,相信很多人都知道 每個不同的檔案都有唯一的乙個crc32值,就算是可能有重複的,那麼在內容為1 49的這個小範圍內的txt文字也不會有重複。題目提示6位純數字,上指...