最近在讀《python絕技:運用python成為頂級黑客》一書,文中有如何運用python中zipfile自帶的方法破解zip檔案。短短的十幾行**就將乙個程式實現了。下面給出書中所用的**:
1 # -*- coding:utf-8 -*-2import zipfile
3import threading45
def extractfile(zfile,password):
6'''
7破解方法
8:param zfile: 需要破解的檔案
9:param password: 嘗試密碼
10 :return
: 11
'''12
try:
13 zfile.extractall(pwd=password)
14 print("
found passwd:
", password)
15return
password
16except:
17pass
1819
20def main():
21'''
22主函式
23'''
24 zfile=zipfile.zipfile('
python.zip')
25 passfile=open('
14365003.txt')
26for line in
passfile.readlines():
27 password = line.strip('\n'
)28 t = threading.thread(target=extractfile, args=(zfile, password))
29t.start()
3031
if __name__=='
__main__':
32 main()
上文中的python.zip是我的測試檔案,而14365003.txt則是字典檔案。然而當我執行這段程式時,我壓縮的密碼是字典檔案中的第一行,然而程式跑了十幾分鐘還沒有停下來,我瞬間覺得有些不對勁了。
仔細看完**,這段小程式會遍歷字典檔案中的每一行密碼去嘗試,然而很令人難過的是,當某乙個子執行緒嘗試匹配到正確密碼時,程式並不會停止,而是繼續完成其他執行緒,甚至開會繼續開啟經常直至遍歷完整個字典檔案。大膽的檢視了一下我的字典檔案大小,額162mb,原因瞬間找到。
那麼怎麼解決呢?去修改字典檔案顯然是不可能的,畢竟字典檔案很可能更大。那麼能不能試著在子執行緒找到正確密碼時,由父執行緒殺死所有執行緒呢?或者類似於ctrl+c這樣的指令去終止程式執行呢?首先,網上查閱後發現python一般情況下不允許殺死執行緒,通常是傳送訊號來終止。而當去嘗試終止程式執行時,也不能成功。
幾經周折,最終想到了乙個辦法,通過event來通訊,當子執行緒成功執行時,通知父執行緒不再開啟其他執行緒。最終**如下:
# -*- coding:utf-8 -*-import zipfileimport threading
def extractfile(zfile,password):
'''破解方法
:param zfile: 需要破解的檔案
:param password: 嘗試密碼
:return
:
'''try
: zfile.extractall(pwd=password)
print(
"found passwd:
", password)
event.set
()
return
password
except:
event
.wait()
pass
def main():
'''主函式
''' zfile=zipfile.zipfile('
python.zip')
passfile=open('
14365003.txt')
for line in
passfile.readlines():
ifevent
.isset():
"end
"return
else
: password = line.strip('\n'
) t = threading.thread(target=extractfile, args=(zfile, password))
t.start()
if __name__=='
__main__':
event=threading.event()
main()
測試該程式,這次破解出密碼只需要35秒了。
另外還有什麼更好的方法嗎?希望能告訴我。
用python寫了乙個zip檔案暴力破解的程式
這裡查閱許多資料,學習用python寫了乙個zip檔案暴力破解的程式。若有不足之處請大家多多指教!本隨筆僅供學習交流,切勿拿去做違法之事!import itertools as its import threading import zipfile import sys import time fr...
用python寫乙個restful API
coding utf 8 package.module python實現的圖書的乙個restful api.restful api 一般模式 get select 從伺服器取出資源 一項或多項 post create 在伺服器新建乙個資源。put update 在伺服器更新資源 客戶端提供改變後的完...
python寫乙個服務 Python寫乙個服務
coding utf 8 import json from urllib.parse import parse qs from wsgiref.server import make server 定義函式,引數是函式的兩個引數,都是python本身定義的,預設就行了。定義檔案請求的型別和當前請求成功...