用python暴力破解壓縮文件並不是萬能,至少這個場景我告訴你密碼你用代碼也破解不了


看到論壇上各種貼子寫用python進行暴力破解的文章,於是自己也想去嘗試一下,不試不知道,一試嚇一跳,真的就像那句有名的”python由入門到放棄“,把論壇上別人的腳本全部自己敲一遍,運行不報錯,但也沒有正常解壓出來,然后就是全部拷下來運行,結果一樣,不能正常解壓。不知道在屏幕前的你看到我這篇文章有沒有遇到同樣問題,最后有沒有解決掉。

下面我也把我所遇到的問題代碼貼出來及解決的辦法,相信會對你有所幫助:

 1 # -*- coding:utf-8 -*-
 2 '''
 3 首先創建一個壓縮包,壓縮包密碼是6位純數字,該腳本的目的就是要正常解壓出這個壓縮包,我創建的壓縮包解壓密碼為 000100,主要是能快速看到結果
 4 '''
 5 import zipfile
 6 
 7 class ForceUnlock():
 8 
 9     # 先生成6位數字的密碼表並存入文件中
10     def generate_password_table(self):
11         with open("pwd_table.txt", 'w', encoding="utf-8") as f:
12             for i in range(1000000):
13                 pwd = str(i).zfill(6) + "\n"
14                 f.write(pwd)
15 
16     def extract_file(self, zip_file, password):
17         try:
18             zip_file.extractall(pwd=bytes(password, "utf-8"))  # 注意這個密碼是要以字節方式傳入
19             print("The extract password is:", password)
20             return True
21         except:
22             print(("current {} password is not correct").format(password))
23             return False  # 密碼不對,繼續破解
24 
25     def main(self):
26         self.generate_password_table()
27         zip_file = zipfile.ZipFile("strict_test.zip")
28         with open("pwd_table.txt", 'r', encoding="utf-8") as f:
29             pwd_list = f.readlines()
30             for line in pwd_list:
31                 pwd = line.strip("\n")
32                 if self.extract_file(zip_file, pwd):
33                     break  # 密碼正確后退出循環
34                 else:
35                     continue
36 
37 
38 if __name__ == "__main__":
39     test = ForceUnlock()
40     test.main()

運行了該代碼無數次,都不能正常解壓出來,於是單獨把代碼擰出來運行,尼瑪竟然報密碼不對

 1 import zipfile
 2 fn = zipfile.ZipFile("strict_test.zip")
 3 fn.extractall(pwd=b'100100')
 4 
 5 
 6 報錯如下:
 7 Traceback (most recent call last):
 8   File "E:/05.Project/01.Python/Aziji-usefully/force_unlock_zipfile/d.py", line 10, in <module>
 9     fn.extractall(pwd=b'100100')
10   File "C:\Program Files\Python37\lib\zipfile.py", line 1594, in extractall
11     self._extract_member(zipinfo, path, pwd)
12   File "C:\Program Files\Python37\lib\zipfile.py", line 1647, in _extract_member
13     with self.open(member, pwd=pwd) as source, \
14   File "C:\Program Files\Python37\lib\zipfile.py", line 1516, in open
15     raise RuntimeError("Bad password for file %r" % name)
16 RuntimeError: Bad password for file <ZipInfo filename='strict_test.txt' compress_type=deflate external_attr=0x20 file_size=9 compress_size=24>

把這個錯誤在網上搜索了一翻,要么就是說密碼那塊輸入的格式不對,要么就是編碼用的不對,再找官方文檔關於該extractall方法的使用介紹,也找不到任何能解決這個問題的方法。

 

接下來對這個問題重新復盤一次:

1、使用zipfile在文件加密再解密,能正常解壓,說明加解密這它本身是沒問題

2、我是在window10 64bit上手動通過winrar創建的一個壓縮包,並設置格式為zip,下面是創建步驟

 

 3、通過手動創建加密壓縮包去用代碼解壓就不行,那么問題可能是下面的可能

  a),目前zipfile還不能很好的兼容windows端壓縮解壓方式,加解密方式不兼容

  b),暫時還沒想到

 

問題解決方法:

有時候對一個問題過分的好奇,想着法都想把它搞定,尤其是搞定別人沒有遇到過的問題,想想都高興。於是重新把復盤里面步驟再試一次,在第二步創建壓縮包時,在最后設置密碼界面時好像跟在網上別人那看到的不一樣,別人的都只有兩個選項:顯示密碼和加密文件名,而我的卻有三個,多了一個ZIP傳統加密,難道多出來的這個選項就是為我這個問題而存在?想想都來勁,於是勾選上它再次運行代碼,奇跡出來了,可以正常解壓出來了,雖然問題是解決了,但這個選項是做啥用的,為什么會存在這個按鈕,於是又去搜索了一翻,沒搜索到關於這個ZIP傳統加密有價值介紹,按目前我的測試來看,估計就是用來被破解的作用,哈哈。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM