執行的環境是linux,用到的工具也是再linux 下的開源工具fcrackzip ,unbuntu和debian系統可以直接apt-get install fcrackzip
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
import zipfile
import commands
import sys
import re
import logging
import os
def zipfcrackzip_b(zip_filename):
'''暴力破解zip檔案密碼
:param zip_filename:zip檔案路徑
:return: 返回破解之後的密碼
'''if zip_filename.count(" ") != 0:
zip_filename=zip_filename.replace(" ","\ ")
if zip_filename.count("(") != 0:
zip_filename=zip_filename.replace("(","\(")
if zip_filename.count(")") != 0:
zip_filename=zip_filename.replace(")","\)")
try:
_,value_pass=commands.getstatusoutput("fcrackzip -b -u -c1 -l 4-8 "+zip_filename)
except exception as e:
logging.debug("unable to decipher the password exception : %s",
repr(e))
str_re_password=re.sub(".*== ","",value_pass)
return str_re_password[2:]
def zipfcrackzip_d(zip_filename,dic_file):
'''字典破解zip檔案密碼
:param zip_filename: zip檔案路徑
:param dic_file: 字典的路徑
:return: 返回破解之後的密碼
'''if zip_filename.count(" ") != 0:
zip_filename=zip_filename.replace(" ","\ ")
if zip_filename.count("(") != 0:
zip_filename=zip_filename.replace("(","\(")
if zip_filename.count(")") != 0:
zip_filename=zip_filename.replace(")","\)")
try:
_,value_pass=commands.getstatusoutput("fcrackzip -u -d -p "+dic_file+" "+zip_filename)
except exception as e:
logging.debug("unable to decipher the password exception : %s",
repr(e))
str_re_password=re.sub(".*== ","",value_pass)
return str_re_password[2:]
def unpacks_zip(file_name,out_dir):
'''解壓加密zip檔案
:param file_name: zip檔案
:param out_dir: 解壓的路徑
:return:
'''zip_tag=set()
try:
zip_file = zipfile.zipfile(file_name,"r")
except exception as e:
logging.debug("unpack zip file:%s exception : %s",file_name,
repr(e))
for file_list in zip_file.infolist():
if file_list.flag_bits & 0x01:
if file_list.filename.endswith(".zip"):
zip_tag.add(str(file_list.filename))
try:
zip_file.extract(file_list.filename,out_dir,zipfcrackzip_b(file_name))
except exception as e:
print (zipfcrackzip_b(file_name))
logging.debug("bad password for zip file %s , exception : %s",file_list.filename,
repr(e))
else:
try:
zip_file.extract(file_list.filename,out_dir)
except exception as e:
logging.debug("extract zip file %s , exception : %s",file_list.filename,
repr(e))
zip_file.close()
#遞迴呼叫解壓zip檔案中的zip
if zip_tag:
while zip_tag:
file_path=str(out_dir)+str(zip_tag.pop())
try:
unpacks_zip(file_path,out_dir)
except exception as e:
logging.debug("error for the zip_extract , exception : %s",
repr(e))
if __name__ == '__main__':
if len(sys.argv) < 3:
print ("usage: python xx.py input_file output_dir")
sys.exit(-1)
reload(sys)
sys.setdefaultencoding('utf-8')
file_name = sys.argv[1]
dir_name = sys.argv[2]
if file_name.endswith('.zip'):
unpacks_zip(file_name,dir_name)
如何使用Python破解ZIP或RAR壓縮檔案密碼
我們經常會從網路上 一些帶密碼的壓縮包,想要獲取裡面的內容,往往就要給提供商支付一些費用。想要白嫖其中的內容,常見的做法是搜尋一些壓縮包密碼破解軟體,但後果相信體驗過的人都知道。本文將會利用 python 破解壓縮包的密碼,這裡以 zip rar 為例。破解原理 其實原理很簡單,一句話概括就是 大力...
python 自動解壓並刪除zip檔案
如何自動解壓並刪除zip?import osimport shutil import time defscan file for f in os.listdir 由於這裡是當前路徑,所以需要把這個 檔案和你要處理的檔案放到同乙個資料夾裡 if f.endswith zip return fdef u...
Python實戰 暴力破解zip檔案解壓密碼
首先測試檔案為test.txt 僅包含單行文字 壓縮後檔案為test.zip,壓縮密碼為2340,壓縮後刪除目錄下的txt檔案。上圖注意勾選傳統加密。指的是不用0開頭的數字密碼,0開頭見後面的字母組合。原理就是zipfile模組解壓壓縮檔案時,一旦密碼不正確,程式會終止,在try語句只有成功解壓的密...