用Python寫乙個zip檔案的密碼破解程式

2022-09-13 10:09:12 字數 2507 閱讀 6067

最近在讀《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 zipfile

import 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():

print

"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本身定義的,預設就行了。定義檔案請求的型別和當前請求成功...