Python實現Zip文件的暴力破解
本次實驗將帶領大家用Python的zipfile模塊實現Zip文件的暴力破解,涉及的知識點包括:zipfile、argparse的用法等等。
本項目由高海峰發布在實驗樓,完整教程及在線練習地址:Python實現Zip文件的暴力破解
一、實驗說明
1. 實驗簡介
我們在網上好不容易下載到一個想要的zip資源卻發現這個zip文件是加密的,或者忘掉自己壓縮後的密碼(一想到就頭疼)。這時候我們就會想辦法,將裡面的內容提取出來。我目前已知的破解zip的方式只有「Known plaintext attack」和「暴力破解」。由於「Known plaintext attack」也有比較大的局限性,而且本次實驗的定位是入門級的。所以本次實驗將帶領大家用Python的zipfile模塊實現Zip文件的暴力破解。
2. 開發環境
- Ubuntu Linux
- Python 3.x版本
3. 知識點
- zipfile 的使用方法
- argparse 的使用方法
4.效果圖
二、前置知識
在編寫程序之前我們先來學習一下我們需要用到的兩個庫zipfile和argparse。
1. zipfile模塊
從本次實驗的主題可以看出我們的重點是對zip文件的操作,而zipfile就是本次實驗的核心。zipfile模塊是python中自帶的模塊,提供了對zip文件的創建讀、寫、追加、解壓以及列出zip文件列表的工具。這裡我們主要用到ZipFile對象的extractall 方法來解壓zip文件,現在我們看一下ZipFile的文檔,在shell中運行Python3交互環境,並使用help方法來查看模塊的使用方法。
找到ZipFile對象extractall(path=None, members=None, pwd=None)方法的說明。
可以看到extractall(path=None, members=None, pwd=None)方法主要有三個參數,我們來看一下每個參數的含義:
- path指定解壓後文件的存儲位置
- members(可選)指定要Zip文件中要解壓的文件,這個文件名稱必須是通過namelist()方法返回列表的子集
- pwd指定Zip文件的解壓密碼
我們先來看下如何用zipfile模塊解壓一個帶密碼的Zip文件。為了照顧不熟悉Linux系統的同學們,我這裡帶著大家準備一下我們需要的文件。
首先我們進入Code目錄:
cd Code
創建一個用於我們實驗的目錄deZip:
mkdir deZip
進入deZip目錄:
cd deZip
現在我們創建1.txt文件:
touch 1.txt
將1.txt文件壓縮成加密的1.zip文件,密碼為1314:
zip -r 1.zip 1.txt -P 1314
現在我們的準備工作就完成了,我們來看一下Demo吧!
import zipfile try: with zipfile.ZipFile("1.zip") as zFile: #創建ZipFile對象 #解壓文件 zFile.extractall(path="./",pwd=b"1314") print("Extract the Zip file successfully!")except: print("Extract the Zip file failed!")
將代碼保存為demo.py我們測試一下是否能正確解壓文件:
可以看到我們解壓成功了!是不是覺得很簡單?
2. argparse模塊
本次實驗我們選擇使用argparse模塊來解析命令行參數。下面我們來查看一下argparse模塊的文檔描述。
argparse提供了非常友好的命令行解析介面,在命令行參數比較多的時候更為明顯。雖然本次實驗命令行參數比較少,但是我們最好養成使用argparse的習慣有助於我們解析較多參數的時候不會有不知所措的感覺!
現在我們來演示一下argparse的用法:
import argparseparser = argparse.ArgumentParser(description="Regards to your name.")parser.add_argument("-n", dest="m_name", type=str, help="your name")options = parser.parse_args()print("Hello",options.m_name)
先看一下運行結果:
現在我們分析這個例子來學習argparse的使用方法: 首先我們導入了argparse這個模塊,通過argparse.ArgumentParser方法來獲得解析器對象。description是在我們輸出命令行參數幫助信息時起到描述的作用。add_argument方法用來添加我們需要解析的參數,可以看到我們這裡添加了-n參數,dest相當於存儲命令行參數值的變數,提取這個變數的時候我們要用到,比如上面Demo中的options.m_name。type表示我們輸入的類型,這裡是str。help是用來說明參數的,和description一樣在我們輸出命令行幫助信息時會顯示出來。
至於使用argparse解析命令行參數我就講到這裡,更詳細的用法還是希望同學們能自己查看文檔。畢竟篇幅有限,我們要學的東西很多,都需要自己去查看文檔來深入學習。
三、代碼實現
通過前面的學習,我們已經了解了如何解壓一個帶密碼的Zip文件。我們今天要實驗的內容是暴力破解Zip文件,基本思路就是我們不斷去讀取密碼字典嘗試解壓帶密碼的Zip文件,如果成功則表示這個密碼正確,失敗則繼續讀取密碼字典中的密碼並嘗試解壓縮,直到解壓縮成功或者密碼字典中的密碼都嘗試一遍。
參考文獻:
- 《Python絕技--運用Python成為頂級黑客》
- 《Python黑帽子-- 黑客與滲透測試編程之道》
本項目的詳細代碼及實現步驟可以在實驗樓查看並在線完成:Python實現Zip文件的暴力破解
更多Python經典項目:Python全部 - 課程
推薦閱讀:
※Python篇-多進程與協程的理解與使用
※如何踏上人工智慧之路(機器學習篇)
※【強烈推薦】十三個鮮為人知的大數據學習網站
※普通人為什麼要學習Python?
※Python 求職 Top10 城市,來看看是否有你所在的城市