亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Python:暴力破解zip!

系統 1843 0

照顧沒有接觸過Python編程的同學,行文可能會有些啰嗦。

廢話少說,我們進入正題。

2.1準備基本材料

/home/ziptest/目錄下 ,我創建了兩個文件,一個 test.zip ,是一個設置了密碼的zip包,密碼為456789。

Python:暴力破解zip!_第1張圖片

dict.txt文件 是一個字典文件,簡單的配置了幾個密碼。

Python:暴力破解zip!_第2張圖片

下面我們打開開發工具,開始編寫測試代碼。

Python:暴力破解zip!_第3張圖片

?

2.2 ZIPFILE

在python中操作zip文件,最簡單的方式就是使用zipfile模塊,使用該模塊可以用來判斷一個文件是否是壓縮文件,創建、解壓文件,獲取zip文件的元數據信息。可以使用python的help方法查看該模塊的使用方法。

?

Python:暴力破解zip!_第4張圖片

這里我們首先關注下 ZipFile類

Python:暴力破解zip!_第5張圖片

?

該類用來打開,讀取,修改,解壓zip文件 。我們想要操作一個zip文件,第一步就是 初始化ZipFile實例 。下面我們打開我們準備好的text.zip文件。

import? zipfile

?

            
              zFile?=?zipfile.ZipFile("/HOME/TEST.ZIP");

            
          

我們只傳了一個路徑參數進去,從幫助文檔我們可以看到,后面三個參數都有默認值,這里我們使用默認值就夠了。

下面我們關注下ZipFile類的 extractall 方法。

?

Python:暴力破解zip!_第6張圖片

?

extractall方法 ,是把壓縮包里面的內容都解壓出來,三個參數,path是解壓的路徑, members 是需要解壓出來的文件,pwd是密碼。

現在我們可以測試下文件解壓了。

import? zipfile

?

            
              zFile?=?zipfile.ZipFile("/HOME/ZIPTEST/TEST.ZIP");

zFile.extractall("/HOME/",pwd="456789");

            
          

運行這個腳本。

?

Python:暴力破解zip!_第7張圖片

?

密碼正確的話,會正常解壓文件。如果密碼不正確會出現什么情況呢?我們在代碼中輸入一個錯誤的密碼。

import? zipfile?

?

            
              zFile?=?zipfile.ZipFile("/HOME/ZIPTEST/TEST.ZIP");

zFile.extractall(path="/HOME/ZIPTEST",pwd="4567890");

            
          

結果如下:

Python:暴力破解zip!_第8張圖片

?

程序會拋出 “bad password” 的異常。

我們可以通過捕獲異常,測試多個密碼。

2.3? 讀取字典文件

在Python中打開文件,使用 open方法 ,這是一個內置方法,查看open的幫助文檔,可以看到該方法的參數說明。

Python:暴力破解zip!_第9張圖片

open方法返回一個file對象, 利用file對象 ,我們可以讀取文件的具體內容。下面我們在代碼中測試一下。

import? zipfile

?

            
              passFile?=?open('/HOME/ZIPTEST/DICT.TXT');

for?line?in?passFile.readlines():

password?=?line.strip('N');

print(password);

            
          

運行結果如下:

Python:暴力破解zip!_第10張圖片

?

下面我們利用讀取到的密碼來暴力測試zip文件。

import? zipfile

?

            
              zFile?=?zipfile.ZipFile("/HOME/ZIPTEST/TEST.ZIP");



passFile?=?open('/HOME/ZIPTEST/DICT.TXT');

for?line?in?passFile.readlines():

password?=?line.strip('N');

try:

zFile.extractall(path="/HOME/ZIPTEST",pwd=password);

print("PASSWORD?IS:"+password);

exit(0);

except:

pass;
            
          

在上面的代碼中,我們使用try—except進行異常捕獲,密碼不正確的時候,程序跳過繼續執行。密碼正確的時候打印密碼,終止程序。運行結果如下:

Python:暴力破解zip!_第11張圖片

?

到目前為止,我們的腳本已經具備了暴力破解zip文件的功能,大家可以看到只有十幾行的代碼。下面我們為了提升程序的可用性,重構一下這個腳本,利用函數劃分功能。

2.4? 重構? 用函數劃分功能

首先定義一個 extractFile 函數 ,該函數接收三個參數,一個 zipfile對象 ,解壓的目標路徑,密碼,如果解密成功則返回密碼。

            
              def?extractFile(toPath,zFile,password):

try:

zFile.extractall(path=toPath,pwd=password);

return?password;

except?Exception,e:

return;

            
          

下面我們再聲明一個 main方法

            
              def?main():

zFile?=?zipfile.ZipFile("/HOME/ZIPTEST/TEST.ZIP");

passFile?=?open('/HOME/ZIP/TEST/DICT.TXT');

for?line?in?passFile.readlines():

password?=?line.strip('N');

guess?=?extractFile("/HOME/",zFile,password);

if?guess:

print('SCUCESS'+password);

exit(0);

            
          

main方法 中,首先初始化了 zipfile對象 ,然后打開字典文件,循環讀取密碼,傳給 extractFile方法 調用。

分離 了兩個方法之后,我們需要在程序的入口處調用 main方法 ,完整代碼如下:

import? zipfile

?

            
              def?extractFile(toPath,zFile,password):

try:

zFile.extractall(path=toPath,pwd=password);

print('SCUCESS'+password);

return?password;

except?Exception,e:

return;

def?main():

zFile?=?zipfile.ZipFile("/HOME/ZIPTEST/TEST.ZIP");

passFile?=?open('/HOME/ZIPTEST/DICT.TXT');

for?line?in?passFile.readlines():

password?=?line.strip('N');

guess?=?extractFile("/HOME/",zFile,password);

if?guess:

print('SCUCESS'+password);

exit(0);



if?__name__=='__MAIN__':

main();
            
          

這樣一來,代碼清晰了很多,但是我們更換zip文件和字典文件的時候,還是需要修改代碼,很不方便,正常的程序都應該可以傳遞參數的,ok,下面我們引入 optparse庫

2.5 OPTPARSE

Python 有兩個內建的模塊用于處理命令行參數:

一個是 ?getopt ,《Deep in python》一書中也有提到,只能簡單處理 命令行參數;

另一個是? optparse ,它功能強大,而且易于使用,可以方便地生成標準的、符合 Unix/Posix規范的命令行說明。

首先先引入 optparse模塊 ,然后強制添加兩個參數, zip文件名和字典文件名 。先看代碼:

            
              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?dict?file');

(options,args)=parser.parse_args();

if(options.zname==None)|(options.dname==None):

print?parse.usage;

exixt(0);

else:

zname=options.zname;

dname=options.dname;



zFile?=?zipfile.ZipFile(zname);

passFile?=?open(dname);

for?line?in?passFile.readlines():

password?=?line.strip('?');

guess?=?extractFile("/home/",zFile,password);

if?guess:

print('scucess'+password);

exit(0);

                
              
            
          

首先初始化一個 OptionParser對象 ,然后添加兩個選項—— “-f”和“-d” 。之后在程序運行的時候通過 parse_args方法 獲取輸入的參數,如果參數為空,則打印使用方法,退出程序。

下面使用終端來測試這個程序。

無參數情況下:

?

輸入參數:

Python:暴力破解zip!_第12張圖片

?

2.6 小結

這個程序本身并沒有什么難點,但是通過這個入門案例,我們可以體驗Python編程的基本方法,如何查看幫助文檔,如何引入模塊,初始化對象,操作zip文件,打開本地文件,命令行參數設置。


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲国产精品网 | 久久频这里精品99香蕉久 | 99热这里只有精品6免费 | 成人看免费一级毛片 | 九九99久久精品影视 | 99精品视频不卡在线观看免费 | 91精品国产综合久久久久 | 99热这就是里面只有精品 | 国产成人看片免费视频观看 | 国产精品福利在线观看 | 天天摸天天舔天天操 | 日韩欧美视频免费观看 | 国产日产欧美精品 | 亚洲精品成人久久久影院 | 亚欧精品在线观看 | 欧美一区二区三区精品 | 人人干人人草 | 亚洲综合狠狠99婷婷 | 欧美xxx精品 | 欧美一级级毛片 | 一级毛片在线免费观看 | 色无极欧美 | 国产99欧美精品久久精品久久 | 中文字幕久久亚洲一区 | 爱神马午夜 | xxxx免费国产在线视频 | 自拍亚洲午夜伦li片影院 | 香蕉视频网站入口 | 日本三级一区 | 亚洲精品视频一区二区 | 狠色狠狠色狠狠狠色综合久久 | 一级一毛片 | 四虎影 | 国产美女流白浆的免费视 | 国产精品日韩欧美一区二区 | 中文字幕在线免费观看视频 | 亚洲国产欧美在线 | 四虎免费最新在线永久 | 大片在线播放日本一级毛片 | 免费真实播放国产乱子伦 | 在线免费精品视频 |