前兩天在網上下來了一波項目案例,結果全是加密的壓縮包,於是去網上找了一個壓縮包破解的工具
很多人學習python,不知道從何學起。
很多人學習python,掌握了基本語法過後,不知道在哪裡尋找案例上手。
很多已經做案例的人,卻不知道如何去學習更加高深的知識。
那麼針對這三類人,我給大家提供一個好的學習平臺,免費領取視頻教程,電子書籍,以及課程的原始碼!??¤
QQ群:828010317
苦於工具破解太慢,一個壓縮包要好久,解壓了三個之後就放棄了,準備另尋他法
密碼字典巧的是破解的三個都是4位數字密碼,這讓我想到了依靠字典破解
說幹就幹,伸手就來
#生成從0000到9999的密碼錶
f = open('passdict4.txt','w')
for id in range(10000):
password = str(id).zfill(4)+'\n'
f.write(password)
f.close()
果然猜想沒錯,破解速度的確快了不
習大大說, 科技是第一生產力,創新是引領發展的第一動力
既然有更快速的方法,那為什麼不研究個自動的方法出來呢
ZipFile庫Python有個叫ZipFile的庫可以解壓zip文件,從其相關文檔中
ZipFile.extractall(path=None, members=None, pwd=None)
將zip文檔內的指定文件解壓到當前目錄。
參數path指定了解析文件保存的文件夾
參數members指定要解壓的文件名稱或對應的ZipInfo對象
參數pwd為解壓密碼。
只需循環讀取文件夾下的zip文件然後逐個解壓即可
注意:python3有一個中文文件名亂碼的,將ZipFile.py中的「cp437」改成「gbk」(兩個地方需更改)即可永久解決
# zipfile打開zip文件
z = zipfile.ZipFile(f'{file_path}', 'r'
# path為解壓路徑,解包後位於該路徑下
z.extractall(path=f"{root})
z.close()
在這個基礎上再加上循環密碼字典
注意:由於解壓是密碼錯誤會產生異常,這裡可以利用try except進行處理
# 獲取字典中的內容
passFile = open(r"D:\python\passdict4.txt")
# 循環獲得單個密碼
for line in passFile.readlines():
# 去換行
password = line.strip('\n')
try:
zip_file.extractall(path=f"{root}", pwd=password.encode("utf-8"))
print(password)
# 密碼對了就不繼續下去了
break
except:
# 什麼都不做
pass
zip_file.close() # 關閉文件,必須有,釋放內存
這麼一通操作下來本以為大功告成,沒想到事情沒那麼簡單
大多是時候是可以破解的,但是總有些就破解失敗了,束手無策的各個網站找方法
剛開始以為是extractall方法調用錯了,但是報的錯是密碼錯誤,這就讓我很迷
偶然見在一個看到一篇文章才得知
默認情況下,WinRAR在CTR模式下使用AES-256加密ZIP文件,而傳統加密是通過CRC32加密,即ZIP 2.0傳統加密算法,雖然AES-256比ZIP 2.0傳統加密算法安全得多,但它可能與一些舊的解壓軟兼容,而Python標準庫中的zipfile模塊只支持CRC32加密的zip文件,所以不採用傳統加密方式是無法通過zipfile庫進行解壓的
已經花了這麼多心思,要是到這裡就放棄,那真的是太淦了
既然加密方式不一樣,那麼解壓軟體是怎麼做到直接解壓的呢
這裡產生了一個構想,要是能從代碼裡調用解壓軟體,那不就好辦了嗎
於是我趕緊使用絕技
成功搜索到,7z等多款解壓軟體有相關功能
調用第三方軟體命令行配置環境變量
命令行驗證一下
奈斯,配置成功
passFile = open(r"D:\python\passdict4.txt")
for line in passFile.readlines():
password = line.strip('\n')
# t 測試
command='7z -p'+password+' t '+file_path
child=subprocess.call(command)
if(child==0):
print(password)
break
加密方式不一樣的事情是解決了,不過人的貪慾真的是可怕
重複調用命令行這一閃一閃的又讓我不爽了
pyzipper庫(終極)恰巧在查加密方式的時候看到有人提出
Python有個pyzipper庫可以很好的兼容代替zipfile,可以讀寫AES加密的zip文件
都走到這了,沒有撤退可言
安裝pyzipperpip install pyzipper
會出現中文名亂碼情況,記得改下
f1 = open('D:\python\passdict4.txt','r')
with pyzipper.AESZipFile(file_path,'r') as f:
for i in f1:
i = i.rstrip('\n')
f.pwd = str.encode(i)
try:
f.extractall(path=f"{root}")
print(file_path+"\t密碼是:"+i)
break
except Exception:
pass
f.close()
f1.close()
這個方法,堪稱完美