用Python實現zip密碼破解例項,趕快來看看吧

大家好,本篇文章主要講的是用Python實現zip密碼破解例項,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下

原理

原理很簡單,就是迴圈遍歷字典中的每一個密碼,嘗試破解。除此之外,此指令碼用執行緒提高效能,用指令碼選項提高了靈活性

最後指令碼執行結果如下,完整程式碼在最下面

用Python實現zip密碼破解例項,趕快來看看吧

python的zipfile庫

編寫Zip檔案口令破解指令碼前,我們要先了解一下python的

zipfile庫。

如果沒有安裝庫,需要先用pip安裝庫

在終端中開啟python,檢視zipfile庫的幫助資訊

python

help(‘zipfile’)

可以看到如下資訊:

用Python實現zip密碼破解例項,趕快來看看吧

這裡只展示了部分,還有很多其他說明,大家可以自己看看

我們重點看一下ZipFile類中的

extractall()方法

,這個方法對我們編寫破解有口令保護的zip檔案指令碼很有幫助。

用Python實現zip密碼破解例項,趕快來看看吧

其中

pwd引數

是zip檔案的保護口令

我們編寫一個指令碼瞭解一下zipfile庫的使用方法

在python編輯器上建立一個名為 zip_crack。py 的檔案,我用的是pycharm,大家也可以用其他的編輯器

先匯入zipfile庫,然後用加密後的zip檔案例項化一個ZipFile類

若沒有加密的zip檔案,可以在kali下用

zip命令

加密zip檔案,具體如下

用Python實現zip密碼破解例項,趕快來看看吧

隨便寫入一些內容後:wq儲存

用Python實現zip密碼破解例項,趕快來看看吧

然後用zip加密壓縮此檔案

用Python實現zip密碼破解例項,趕快來看看吧

我們用此加密的zip檔案例項化ZipFile類

zFile = zipfile。ZipFile(“grit。zip”)

然後使用extractall()方法 解壓這個zip檔案,並在pwd引數上填入加密此zip的口令

zFile。extractall(pwd=‘12345‘)

用Python實現zip密碼破解例項,趕快來看看吧

接下來,我們檢視當前目錄情況並執行此指令碼

用Python實現zip密碼破解例項,趕快來看看吧

可以看到,成功解壓了zip檔案

為了更好地理解,我們用錯誤的密碼嘗試一下

用Python實現zip密碼破解例項,趕快來看看吧

執行此指令碼,看看結果

用Python實現zip密碼破解例項,趕快來看看吧

可以看到,無法解壓,提示錯誤的密碼

暴破zip檔案口令

下面,我們嘗試用字典破解有口令保護的zip檔案

大家如果有自己的字典,可以用自己的,如果沒有,可以建立一個簡單的字典

用Python實現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

用Python實現zip密碼破解例項,趕快來看看吧

我們執行一下這個指令碼,看看效果

用Python實現zip密碼破解例項,趕快來看看吧

成功破解了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實現zip密碼破解例項,趕快來看看吧

利用執行緒提高效能

這樣能遍歷每一個單詞,執行完一個才能執行下一個,如果字典檔案非常大,那需要很長時間才能讀完字典。為了提高效能,我們可以用執行緒同時嘗試多個口令,這就需要用到python中的執行緒模組了

我們改進一下我們的程式碼

首先匯入包

from threading import Thread

然後在main()函式中用執行緒執行extractall()函式

用Python實現zip密碼破解例項,趕快來看看吧

使用者自定義引數

用到執行緒,就提高了效能。當我們對不同的zip破解時,或想用其他字典時,我們還要改程式碼,來修改zip檔案和字典檔案。

為了提高指令碼的靈活性,我們可以用python中的

optparse庫

來設定引數選項

同樣,需要匯入模組

import optparse

若沒有,需要自己安裝,這裡就不演示了

在main()函式中寫入引數配置程式碼

parser = optparse。OptionParser(“usage%prog” + “-f -d ”) parser。add_option(’-f‘, dest=’zname‘, type=’string‘, help=’specify zip file‘) parser。add_option(’-d‘, dest=’dname‘, type=’string‘, help=’specify dictionary file‘) (options, args) = parser。parse_args() if (options。zname == None) | (options。dname == None): print parser。usage exit(0) else: zname = options。zname dname = options。dname

並將zFile和 passFile 引數改為對應的變數

用Python實現zip密碼破解例項,趕快來看看吧

最後,為了能更好地理解程式碼執行,可以加入一些輸出程式碼輸出一些提示資訊

指令碼完整程式碼

下面是指令碼的完整程式碼

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 -d ”) parser。add_option(’-f‘, dest=’zname‘, type=’string‘, help=’specify zip file‘) parser。add_option(’-d‘, dest=’dname‘, type=’string‘, help=’specify dictionary file‘) (options, args) = parser。parse_args() if (options。zname == None) | (options。dname == None): print parser。usage exit(0) else: zname = options。zname dname = options。dname zFile = zipfile。ZipFile(zname) passFile = open(dname) for line in passFile。readlines(): password = line。strip(’\n‘) print(“[*] Trying password: ”+ password) t = Thread(target=extractFile, args=(zFile, password)) t。start() if __name__ == ’__main__‘: main()

我們在終端執行指令碼,最後成功破解了口令

用Python實現zip密碼破解例項,趕快來看看吧

可以看到,找到了密碼

這裡我只是舉了個簡單的例子,用的字典很小。在實際爆破zip口令時,能否成功破解往往取決於字典的好壞,可以在字典中寫入常用密碼,或用社會工程學的方法獲取一些有用的資訊,新增到字典中,有助於破解密碼。