暴力破解Excel工作表保护密码小工具

查看 80|回复 9
作者:zxlrock   
最近工作中遇到需求,要解除工作表保护,受论坛大神@bester以前的帖子https://www.52pojie.cn/thread-1578298-1-1.html启发,在此基础上借助AI写代码的能力,无技术门槛加了个GUI以及打包成小工具,方便跟我一样小白朋友应用。
原理:在保护工作表或者工作簿时,如果设置了密码,那么无论该密码的长度是多少,Excel都会将其转换成包含12个字符的特殊序列,并将这个经过转换的密码保存在Excel中。
由于这12个字符可以组合成大约200000个(95*2^11=194560)不同的序列,可以通过遍历这些序列来破解密码。


excel_tool.png (34.24 KB, 下载次数: 0)
下载附件
2025-6-26 08:56 上传

工具下载链接: https://pan.baidu.com/s/1H8GPSCcA6UTZczImLotWdQ?pwd=9ym3 提取码: 9ym3

密码, 工作

zxlrock
OP
  

[Python] 纯文本查看 复制代码import win32com.client
import tkinter as tk
from tkinter import filedialog, ttk, messagebox
import threading
class ExcelPasswordCrackerGUI:
    def __init__(self, master):
        self.master = master
        master.title("Excel工作表密码破解工具")
        master.geometry("600x700") # 增加高度以确保所有元素可见
        master.configure(bg='#f0f0f0')  # 设置背景色
        # 设置样式
        style = ttk.Style()
        style.theme_use('default')
        style.configure('TButton', padding=6, relief="flat", background="#2196F3")
        style.configure('Horizontal.TProgressbar',
                       troughcolor='#E0E0E0',
                       background='#2196F3',
                       thickness=20)
        self.file_path = tk.StringVar()
        self.sheet_index = tk.StringVar(value="0")
        # 主容器
        main_container = tk.Frame(master, bg='#f0f0f0')
        main_container.pack(expand=True, fill='both', padx=20, pady=20)
        # 文件选择
        self.file_frame = tk.LabelFrame(main_container, text="Excel文件选择",
                                      bg='#f0f0f0', fg='#333333',
                                      font=('Microsoft YaHei', 10, 'bold'))
        self.file_frame.pack(pady=10, padx=10, fill="x")
        self.file_label = tk.Label(self.file_frame, text="文件路径:",
                                 bg='#f0f0f0', fg='#333333',
                                 font=('Microsoft YaHei', 9))
        self.file_label.pack(side="left", padx=5, pady=5)
        self.file_entry = tk.Entry(self.file_frame, textvariable=self.file_path, width=40, state="readonly")
        self.file_entry.pack(side="left", padx=5, pady=5, expand=True, fill="x")
        self.browse_button = ttk.Button(self.file_frame, text="浏览", command=self.browse_file)
        self.browse_button.pack(side="left", padx=5, pady=5)
        # 工作表序号
        self.sheet_frame = tk.LabelFrame(main_container, text="工作表序号(从0开始)",
                                       bg='#f0f0f0', fg='#333333',
                                       font=('Microsoft YaHei', 10, 'bold'))
        self.sheet_frame.pack(pady=5, padx=10, fill="x")
        self.sheet_label = tk.Label(self.sheet_frame, text="工作表序号:",
                                  bg='#f0f0f0', fg='#333333',
                                  font=('Microsoft YaHei', 9))
        self.sheet_label.pack(side="left", padx=5, pady=5)
        self.sheet_entry = tk.Entry(self.sheet_frame, textvariable=self.sheet_index, width=10)
        self.sheet_entry.pack(side="left", padx=5, pady=5)
        # 进度条
        self.progress_frame = tk.LabelFrame(main_container, text="破解进度",
                                          bg='#f0f0f0', fg='#333333',
                                          font=('Microsoft YaHei', 10, 'bold'))
        self.progress_frame.pack(pady=5, padx=10, fill="x")
        self.progress_bar = ttk.Progressbar(self.progress_frame, orient="horizontal", length=300, mode="determinate")
        self.progress_bar.pack(pady=10, padx=5, expand=True, fill="x")
        self.progress_label = tk.Label(self.progress_frame, text="0%",
                                     bg='#f0f0f0', fg='#333333',
                                     font=('Microsoft YaHei', 9, 'bold'))
        self.progress_label.pack(pady=5)
        # 结果显示
        self.result_frame = tk.LabelFrame(main_container, text="破解结果",
                                        bg='#f0f0f0', fg='#333333',
                                        font=('Microsoft YaHei', 10, 'bold'))
        self.result_frame.pack(pady=5, padx=10, fill="both", expand=True)
        self.result_text = tk.Text(self.result_frame, height=12, state="disabled",
                                 wrap="word", font=('Microsoft YaHei', 9),
                                 bg='white', fg='#333333')
        self.result_text.pack(pady=5, padx=5, expand=True, fill="both")
        # 添加滚动条
        scrollbar = tk.Scrollbar(self.result_frame, command=self.result_text.yview)
        scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
        self.result_text.config(yscrollcommand=scrollbar.set)
        # 破解按钮
        button_frame = tk.Frame(main_container, bg='#f0f0f0')
        button_frame.pack(pady=10, fill='x')
        
        self.crack_button = ttk.Button(button_frame, text="开始破解",
                                     command=self.start_cracking_thread,
                                     style='TButton')
        self.crack_button.pack(pady=10, ipadx=20)
    def browse_file(self):
        filetypes = [("Excel文件", "*.xls *.xlsx"), ("所有文件", "*.*")]
        path = filedialog.askopenfilename(filetypes=filetypes)
        if path:
            self.file_path.set(path)
            self.update_result("已选择文件: " + path)
    def update_result(self, message, append=True):
        self.result_text.config(state="normal")
        if not append:
            self.result_text.delete(1.0, tk.END)
        self.result_text.insert(tk.END, message + "\n")
        self.result_text.see(tk.END)
        self.result_text.config(state="disabled")
    def update_progress(self, value, total):
        percent = (value / total) * 100
        self.progress_bar['value'] = percent
        self.progress_label.config(text=f"{percent:.2f}%")
        self.master.update_idletasks()
    def start_cracking_thread(self):
        file_path = self.file_path.get()
        sheet_index_str = self.sheet_index.get()
        if not file_path:
            messagebox.showerror("错误", "请选择Excel文件。")
            return
        try:
            sheet_index = int(sheet_index_str)
            if sheet_index  wb.Sheets.Count or sheet_index + 1
byanly   

一个简单的密码  309
使用这个工具报错
错误: (-2147352567, '发生意外。', (0, 'Microsoft Excel', '您所提供的密码不正确。请检查 CAPS LOCK 键的状态,并确认使用了正确的大小写。', 'xlmain11.chm', 0, -2146827284), None)
kenxy   

excel文件我设置了一个密码“1234567890”,然的破解的时候出错了。然后没有密码的文件 破解成功,显示密码为“AAAAAAAAAAA”
dysunb   

解除工作表保护
zxlrock
OP
  


kenxy 发表于 2025-6-26 13:41
excel文件我设置了一个密码“1234567890”,然的破解的时候出错了。然后没有密码的文件 破解成功,显示密码 ...

应该是文件里面的工作表保护密码,不是文件密码。
yanguichao   

有没有人测试过?破解一个复杂密码大概需要多长时间?
naixubao   

楼主,到底是破解Excel文件还是里面的工作表的密码啊?
kenkenss   

有没有人亲测的?有效吗
helian147   


naixubao 发表于 2025-6-26 14:42
楼主,到底是破解Excel文件还是里面的工作表的密码啊?

根据 https://www.52pojie.cn/thread-1578298-1-1.html,应该是编辑保护密码,不是打开密码
您需要登录后才可以回帖 登录 | 立即注册

返回顶部