大家好,本篇文章主要講的是用Python實現zip密碼破解例項,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
原理
原理很簡單,就是迴圈遍歷字典中的每一個密碼,嘗試破解。除此之外,此指令碼用執行緒提高效能,用指令碼選項提高了靈活性
最後指令碼執行結果如下,完整程式碼在最下面
python的zipfile庫
編寫Zip檔案口令破解指令碼前,我們要先了解一下python的
zipfile庫。
如果沒有安裝庫,需要先用pip安裝庫
在終端中開啟python,檢視zipfile庫的幫助資訊
python
help(‘zipfile’)
可以看到如下資訊:
這裡只展示了部分,還有很多其他說明,大家可以自己看看
我們重點看一下ZipFile類中的
extractall()方法
,這個方法對我們編寫破解有口令保護的zip檔案指令碼很有幫助。
其中
pwd引數
是zip檔案的保護口令
我們編寫一個指令碼瞭解一下zipfile庫的使用方法
在python編輯器上建立一個名為 zip_crack。py 的檔案,我用的是pycharm,大家也可以用其他的編輯器
先匯入zipfile庫,然後用加密後的zip檔案例項化一個ZipFile類
若沒有加密的zip檔案,可以在kali下用
zip命令
加密zip檔案,具體如下
隨便寫入一些內容後:wq儲存
然後用zip加密壓縮此檔案
我們用此加密的zip檔案例項化ZipFile類
zFile = zipfile。ZipFile(“grit。zip”)
然後使用extractall()方法 解壓這個zip檔案,並在pwd引數上填入加密此zip的口令
zFile。extractall(pwd=‘12345‘)
接下來,我們檢視當前目錄情況並執行此指令碼
可以看到,成功解壓了zip檔案
為了更好地理解,我們用錯誤的密碼嘗試一下
執行此指令碼,看看結果
可以看到,無法解壓,提示錯誤的密碼
暴破zip檔案口令
下面,我們嘗試用字典破解有口令保護的zip檔案
大家如果有自己的字典,可以用自己的,如果沒有,可以建立一個簡單的字典
寫一個python指令碼嘗試字典中的每一個口令
例項化一個zipfile類後,開啟字典檔案
zFile = zipfile。ZipFile(“grit。zip”)
passFile = open(“dict。txt”)
遍歷測試字典中的每一個單詞,若口令不正確,則丟擲異常,若口令正確,則輸出口令
for line in passFile。readlines(): password = line。strip(’\n‘) try: zFile。extractall(pwd=password) print(“[+] Found password ” +password+ ’\n‘) except Exception,e: pass
我們執行一下這個指令碼,看看效果
成功破解了zip口令
為了使程式碼能重複使用,我們模組化此指令碼
extractFile(zFile,password)函式
用密碼引數來嘗試開啟加密的zip檔案
def extractFile(zFile, password): try: zFile。extractall(pwd=password) print(“[+] Found password ” + password + ’\n‘) except: pass
main()函式
遍歷字典,嘗試密碼
def main(): zFile = zipfile。ZipFile(“grit。zip”) passFile = open(“dict。txt”) for line in passFile。readlines(): password = line。strip(’\n‘) extractFile(zFile, password)
利用執行緒提高效能
這樣能遍歷每一個單詞,執行完一個才能執行下一個,如果字典檔案非常大,那需要很長時間才能讀完字典。為了提高效能,我們可以用執行緒同時嘗試多個口令,這就需要用到python中的執行緒模組了
我們改進一下我們的程式碼
首先匯入包
from threading import Thread
然後在main()函式中用執行緒執行extractall()函式
使用者自定義引數
用到執行緒,就提高了效能。當我們對不同的zip破解時,或想用其他字典時,我們還要改程式碼,來修改zip檔案和字典檔案。
為了提高指令碼的靈活性,我們可以用python中的
optparse庫
來設定引數選項
同樣,需要匯入模組
import optparse
若沒有,需要自己安裝,這裡就不演示了
在main()函式中寫入引數配置程式碼
parser = optparse。OptionParser(“usage%prog” + “-f
並將zFile和 passFile 引數改為對應的變數
最後,為了能更好地理解程式碼執行,可以加入一些輸出程式碼輸出一些提示資訊
指令碼完整程式碼
下面是指令碼的完整程式碼
import zipfileimport optparsefrom threading import Thread def extractFile(zFile, password): try: zFile。extractall(pwd=password) print(“[+] Found password ” +password+ ’\n‘) except: print(“[-] ” + password + “ Failed”)def main(): parser = optparse。OptionParser(“usage%prog” + “-f
我們在終端執行指令碼,最後成功破解了口令
可以看到,找到了密碼
這裡我只是舉了個簡單的例子,用的字典很小。在實際爆破zip口令時,能否成功破解往往取決於字典的好壞,可以在字典中寫入常用密碼,或用社會工程學的方法獲取一些有用的資訊,新增到字典中,有助於破解密碼。