Python 破解帶密碼保護的Zip文件


今天發生了個有趣的事情,有個朋友發了一個帶密碼保護的Zip文件給我,卻不給我密碼,我就琢磨這怎么可以'猜'到密碼呢?

經過一系列的嘗試,最終使用python把這個密碼給'猜'出來了。要想寫出破解密碼的腳本需要了解一下python的zipfile庫,這里百度上的資源多的很,我就直接給大家上代碼再一一解釋。

import zipfile
from threading import Thread

  首先導入zipfile 和 Thread庫下的threading,作用分別是:可以通過代碼來打開zip文件,有密碼保護我們提供密碼就行了(至於怎么提供我后面會講^_^); 開啟多線程來'猜'密碼,使得效率更高!

 

這里我們可以練習一下zipfile是怎么打開文件的呢?

zipFile = zipfile.ZipFile("test1.zip")
zipFile = extractall(pwd= bytes("123", "utf8" ))

  我們在和這個練習的python腳本相同路徑下生成一個壓縮密碼為:123的壓縮包,命名為test1.zip 當然你可以在任何地方生成練習文件,打開的時候記得寫上絕對路徑就OK啦~~

你會發現這個代碼運行后你的壓縮文件被解壓啦,我們思考一下那么密碼錯誤怎么辦呢,當然就是打不開啦。我們利用這個特性,使用python的預防錯誤機制try ,except  這個機制的意思是:如果我放在try:里面要執行的代碼有問題,程序不會報錯而會運行except: 下面的代碼。

核心:那我們就利用這點,讓程序去給我們嘗試幾乎無限種可能的密碼的排列組合,如果密碼錯誤就跳過,知道找到密碼為止~

題外話:我覺得我那個朋友設置的密碼應該會是數字,所有我用python寫了一個.txt文件:將0到10000000的數字全部寫入。貌似有80多MB....真的很大...

接下來就開始猜密碼了:

def extractFile(zipFile, password):   ###提取文件的類
    try:
        zipFile.extractall(pwd= bytes(password, "utf8" ))     ###打開壓縮文件,提供密碼...
        print("This file\'s password is " + password)       ###破解到密碼
    except:
        pass    ###假如失敗,就跳過繼續

 寫了一個方法:這個方法需要我們提供需要破解的文件的相關信息, 然后需要我們提供這個文件的密碼(我們當然不知道密碼,不過很快就會知道的了~~~)

def mainStep():
    zipFile = zipfile.ZipFile('C:\\Users\\Flash\\Desktop\\Secret.zip')   # 這里的第二個參數用r表示是讀取zip文件,w是創建一個zip文件,默認是r
    PwdLists = open('C:\\Users\\Flash\\Desktop\\dictionary.txt')   #讀入所有密碼
    for line in PwdLists.readlines():   #挨個挨個的寫入密碼
        Pwd = line.strip('\n')
        t = Thread(target=extractFile, args=(zipFile, Pwd))
        t.start()

  然后我們再寫一個方法:這個方法是為extractFile方法提供需要破解文件的相關信息的, 然后在打開‘密碼字典’把密碼字典的所有東西都讀到PwdLists里面, 通過for循環把PwdLists里面的每個密碼都拿去嘗試,直到有正確密碼為止   t = Thread(target=extractFile, args=(zipFile, Pwd))  這個的意思是在線程先運行使得嘗試的速度更快,具體可以百度了解線程的知識。

 

 

 

這個是我生成的密碼字典 和 我破解的朋友的密碼~~~/得意 O(∩_∩)O哈哈~

我貼出全部代碼:

import zipfile
from threading import Thread

def extractFile(zipFile, password):   ###提取文件的類
    try:
        zipFile.extractall(pwd= bytes(password, "utf8" ))     ###打開壓縮文件,提供密碼...
        print("This file\'s password is " + password)       ###破解到密碼
    except:
        pass    ###假如失敗,就跳過繼續
def mainStep():
    zipFile = zipfile.ZipFile('C:\\Users\\Flash\\Desktop\\Secret.zip')   # 這里的第二個參數用r表示是讀取zip文件,w是創建一個zip文件,默認是r
    PwdLists = open('C:\\Users\\Flash\\Desktop\\dictionary.txt')   #讀入所有密碼
    for line in PwdLists.readlines():   #挨個挨個的寫入密碼
        Pwd = line.strip('\n')
        t = Thread(target=extractFile, args=(zipFile, Pwd))
        t.start()
if __name__ == '__main__':
    mainStep()

  注意:我用的是絕對路徑,大家可以根據自己的路徑修改哦

 

 

代碼不難,卻是很有趣,做什么事情沒有絕對的興趣也沒有絕對的枯燥乏味,我們要自己讓自己覺得有意思起來:這個很有趣,這個很有趣...(心里:一點也沒有!! 哈哈 開個玩笑。)

希望我們抱着一種開心的心態學習和進步。大家一起努力吧~~

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM