徐鬆亮Python教學-黑客篇-zip壓縮檔案的破解
阿新 • • 發佈:2018-12-18
首先,此文件已學習為主,不要用來隨意破解別人的zip檔案。其次,你想破解也破解不了,千萬不要以為這麼多人用的保密檔案方式,靠本文幾句話就給破解啦,那是扯淡!上面兩句話是不是互相矛盾?哈哈,本文介紹的是字典破解和暴力破解,字典破解就是有個密碼集,挨個試,說破解不了是因為你怎麼建立密碼集?暴力破解就是完全窮舉,如果密碼只是幾位數字還好說,如果是字母數字加符號的長密碼,需要的時長估計你在有限的生命裡是夠嗆能看到結果啦,閒言少敘,進入正題!
一,概念
-
字典破解
- 建立一個密碼集,程式通過讀取密碼集的每條資料作為密碼來逐個嘗試。
-
暴力破解
- 根據條件窮舉所有的可能性,比如4為資料密碼就是從0000~9999挨個實驗
二,準備工作
-
建立用於字典破解的字典檔案
- 新建文字檔案:xsl_hacker_1_crackzip.txt,因為只是用於實驗,我們只加入以下少量密碼集。
-
建立用於字典破解的密碼檔案
- 用任意一種zip軟體,壓縮任意檔案,壓縮的時候加上壓縮密碼(從上面的字典裡選取,本示例是用的xslxhn),壓縮後的檔名稱為:xsl_hacker_1_crackzip.zip
-
建立用於窮舉破解的密碼檔案
- 用任意一種zip軟體,壓縮任意檔案,壓縮的時候加上壓縮密碼99999(因為在本例中我們做暴力破解實驗是從0-9,00-99,000-999,0000-9999,00000-99999這些資料段逐個嘗試,設定到最末尾,我們可以瞭解到破解5以內數字密碼的計算機單執行緒最長時間),壓縮後的檔名稱為:xsl_hacker_1_crackzip99999.zip
三,程式碼講解
-
字典破解
-
暴力破解
四,原始碼
-
#!/usr/bin/python #-------------------------------------------------- # 徐鬆亮編寫 #-------------------------------------------------- import sys # 系統 import time # 時間 import zipfile # 壓縮與解壓縮 import threading # 多執行緒 #-------------------------------------------------- StrLine = "--------------------" LineNum = 1 #-------------------------------------------------- # 字典破解 #-------------------------------------------------- crackzip_str_zipfileName = "xsl_hacker_1_crackzip.zip" crackzip_str_passfileName = "xsl_hacker_1_crackzip.txt" # print (StrLine,LineNum,"-字典破解解壓zip檔案") LineNum+=1 zipfile_state=0 timeout=0 # fun:extract file def extractFile(zFile, password): try: global zipfile_state zFile.extractall(pwd=str.encode(password)) print('\nFound Password = ' + password + '\n') zipfile_state=1 except: pass # open zip file zfile = zipfile.ZipFile(crackzip_str_zipfileName) # open dictionaries passfile=open(crackzip_str_passfileName) # read passfile line for line in passfile.readlines(): # strip \n password = line.strip('\n') # run thread extract file t = threading.Thread(target=extractFile, args=(zfile, password)) # run thread t.start() # waiting finish while zipfile_state==0: timeout=timeout+1 if timeout>10: break else: time.sleep(1) # file close passfile.close() zfile.close() #-------------------------------------------------- # 暴力破解 #-------------------------------------------------- crackzip_str_zipfile99999Name = "xsl_hacker_1_crackzip99999.zip" # print (StrLine,LineNum,"-暴力破解解壓zip檔案") print ("5位數字暴力破解(單執行緒) 包括0-9 00-99 000-999 0000-9999 00000-99999") zfile = zipfile.ZipFile(crackzip_str_zipfile99999Name) password=0 zipfile_state=0; ticks_begin = time.time() zfile_cmt=0; # fun: def str_setlen(d,l): s=str(d) while len(s) < l: s='0'+s return s for num in range(1,6): password=0 dmax = pow(10,num)-1 while 1: extractFile(zfile,str_setlen(password,num)) password = password+1 zfile_cmt = zfile_cmt+1 if password>dmax or zipfile_state==1: break; if zfile_cmt%1000==0: print("%02d %%" % int((zfile_cmt*100)/(9+99+999+9999+99999))) ticks_end = time.time() if zipfile_state==0: print ("單執行緒暴力破解失敗 耗時(秒)=%d" % int(ticks_end-ticks_begin)) else: print ("單執行緒暴力破解成功 耗時(秒)=%d" % int(ticks_end-ticks_begin)) zfile.close() ''' print ("5位數字暴力破解(多執行緒)") zfile = zipfile.ZipFile('zip_99999.zip') password=0 zipfile_state=0; ticks_begin = time.time() while(1): t = threading.Thread(target=extractFile, args=(zfile, str_setlen(password,5))) t.start() password = password+1 if zipfile_state==1: break while zipfile_state==0: if zipfile_state==1: break else: time.sleep(1) ticks_end = time.time() if zipfile_state==0: print ("多執行緒暴力破解失敗 耗時(秒)=%d" % int(ticks_end-ticks_begin)) else: print ("多執行緒暴力破解成功 耗時(秒)=%d" % int(ticks_end-ticks_begin)) zfile.close() ''' del zfile del passfile del zipfile_state del ticks_begin del ticks_end del zfile_cmt #-------------------------------------------------- sys.exit() #--------------------------------------------------
五,執行效果
六,注意事項
- 所有檔案必須放到同一目錄下。
- 暴力破解的多執行緒解決方案在原始碼中已經被遮蔽,不用開啟了,開啟也不好使。
- 本文的執行環境是在windows10+python3.7。