前幾天在一本書上看到一篇可以利用字典破解zip檔案密碼的文章,覺得比較有意思于是研究了一番,在這里分享一下
原理
主要是利用python里自帶的zipfile庫中的extractall函式來實作的,簡單匯入zipfile之后,實體化一個ZipFile類,利用extractall()來解壓這個檔案,并在引數pwd上填入正確密碼

這時我們發現執行腳本之后,fate.zip會被正確解壓,而填入錯誤密碼則會入下圖一樣報錯
因此我們可以利用因口令不正確而拋出的例外來測驗字典檔案中是否有zip檔案的密碼,并利用try expect來處理例外資訊,
代碼
假定zip檔案密碼為fate,pwd.txt為字典檔案
import zipfile
zFile = zipfile.ZipFile(r"D:\python\fate.zip")
passFile = open(r"D:\python\pwd.txt")
for line in passFile.readlines():
password = line.strip('\n')
# noinspection PyBroadException
try:
zFile.extractall(pwd=password.encode("utf=8"))
print("password="+password)
except Exception as e:
pass
需要注意的是python3以及不支持自動ascii碼了,在extractall的pwd引數后需手動添加編碼型別,# noinspection PyBroadException則是為了防止PyCharm報錯
提高性能
將程式模塊化后,在利用多執行緒處理可以提高程式性能,可以利用Thread來實作多執行緒處理
import zipfile
from threading import Thread
def extractfile(zFile,password):
# noinspection PyBroadException
try:
zFile.extractall(pwd=password.encode("utf=8"))
print("password="+password)
except Exception as e:
pass
def main():
zFile = zipfile.ZipFile(r"D:\python\fate.zip")
passFile = open(r"D:\python\pwd.txt")
for line in passFile.readlines():
password = line.strip('\n')
t = Thread(target=extractfile(zFile , password))
t.start()
if __name__ == "__main__":
main()
利用if __name__ == "__main__"使函式只在當前模塊運行,當被匯入時不運行
結語
以上就是利用字典破解zip檔案的全部內容,如有錯誤,望海涵,有問題歡迎在評論區討論交流或者私信我,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/4672.html
標籤:其他
