?在日常作業生活中,經常用到壓縮檔案,有些為了安全保密,還專門設定了密碼,如果忘記密碼要怎么破,這時暴力破解就派上了用場,本文以一個簡單的小例子,簡述如何通過Python中的zipfile模塊進行破解,僅供學習分享使用,如有不足之處,還請指正,
準備作業
在本例中,首先準備一個帶密碼的zip壓縮包,采用winrar進行壓縮,如下所示:

?
設定zip檔案密碼,如下所示:

?
注意:一定要采用zip傳統加密,否則python的zipfile模塊將無法解壓成功,
破解步驟
1. 下載密碼字典
本例采用密碼字典+多執行緒方式進行破解,首先需要下載密碼字典,密碼字典包含常用的密碼,有多個檔案,所有需要采用多執行緒方式,以提高破解效率,密碼字典格式如下:

?
2. 匯入模塊檔案
需要匯入zipfile模塊,及多執行緒相關和檔案目錄相關模塊,如下所示:
1 import zipfile 2 import time 3 import threading 4 import os.path 5 import os
3. 單個密碼解壓函式
通過zipfile物件的extractall可以進行解壓,解壓成功,則停止;否則,繼續,如下所示:
1 def extract(self, file, password): 2 try: 3 self.threadLock.acquire() 4 if self.is_running: 5 # password = str(password) 6 zfile = zipfile.ZipFile(file, mode='r') 7 zfile.extractall(path=".", pwd=password.encode(encoding='utf-8')) 8 print("the password is {}".format(password)) 9 end_time = time.time() 10 print('the end time is {}'.format(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())))) 11 print("spend time is {}".format(end_time - self.start_time)) 12 # 成功解壓其余執行緒終止 13 self.is_running = False 14 zfile.close() 15 except Exception as e: 16 print('嘗試密碼:{},不對'.format(password)) 17 # print(e) 18 finally: 19 self.threadLock.release()
4. 遍歷單個密碼字典檔案
遍歷單個密碼字典檔案,并呼叫解壓函式進行解壓,如下所示:
1 def single_pwd_file(self, root, pwd_file): 2 """單個密碼本破解""" 3 file = os.path.abspath("django.zip") 4 print(file) 5 pwd_file = os.path.abspath(os.path.join(root, pwd_file)) 6 print("遍歷{}檔案".format(pwd_file)) 7 try: 8 with open(pwd_file, mode='r', encoding='utf-8') as f: 9 pwd = f.readline() 10 while pwd: 11 if self.is_running: 12 self.extract(file, pwd.strip()) 13 else: 14 break 15 pwd = f.readline() 16 except Exception as e: 17 pass
5. 遍歷所有密碼字典檔案
遍歷所有密碼字典檔案,每一個字典檔案,采用一個執行緒,如下所示:
1 def start(self): 2 """通過密碼本破解""" 3 self.start_time = time.time() 4 print('the start time is {}'.format(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())))) 5 root = r"wpa2pojiezidian" 6 for root, dirs, files in os.walk(root, topdown=True): 7 for pwd_file in files: 8 if pwd_file.endswith('.txt') or pwd_file.endswith('.TXT'): 9 if self.is_running: 10 t = threading.Thread(target=self.single_pwd_file, args=(root, pwd_file,)) 11 t.start() 12 # t.join() 13 else: 14 break
破解示例
本例為了測驗,采用的密碼比較簡單,所以破解比較快,如下所示:

?
原始碼下載鏈接
為何一定要勾選傳統加密?
默認情況下,WinRAR在CTR模式下使用AES-256加密ZIP存檔,雖然AES-256比ZIP 2.0傳統加密演算法安全得多,但它可能與一些較舊的解壓軟體不兼容,如果需要與這些工具兼容,可以在密碼對話框中啟用“ZIP傳統加密”選項,或在命令列模式下使用-mezl開關,
Python標準庫中的zipfile模塊僅支持CRC32加密的zip檔案,
一定能暴力破解嗎?
采用密碼字典檔案的方式進行破解,密碼字典只是收錄了常規的密碼,如果加密密碼正好不在密碼字典檔案中,則無法破解,暴力破解,通俗的講就是逐個密碼取嘗試,有可能需要破解幾天,甚至更長時間,才可能會成功,所以技術理論上可行,但實際上可行性并不高,
備注
蘇幕遮·燎沉香
【作者】周邦彥【朝代】宋
燎沉香,消溽暑,鳥雀呼晴,侵曉窺檐語,葉上初陽干宿雨、水面清圓,一一風荷舉,
故鄉遙,何日去,家住吳門,久作長安旅,五月漁郎相憶否,小楫輕舟,夢入芙蓉浦,

?
作者:Alan.hsiang
出處:http://www.cnblogs.com/hsiang/
本文著作權歸作者和博客園共有,寫文不易,支持原創,歡迎轉載【點贊】,轉載請保留此段宣告,且在文章頁面明顯位置給出原文連接,謝謝,
關注個人公眾號,定時同步更新技術及職場文章
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/304442.html
標籤:Python
上一篇:🙈全套Java教程_Java基礎入門教程,零基礎小白自學Java必備教程🐱?🏍008 # 第八單元 面向物件思想 #
