欢迎访问!

Office学习网

您现在的位置是:主页 > 网络技术

网络技术

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

发布时间:2026-10-07网络技术次评论
最近工作中遇到需求,要解除工作表保护,受论坛大神@bester以前的帖子https://www.52pojie.cn/thread-1578298-1-1.html启发,在此

10, [Python] 纯文本查看 复制代码 import win32com.clientimport tkinter as tkfrom tkinter import filedialog, padx=20。

padx=5, append=True))breakexcept Exception as e:# 密码错误或其他问题if (idx + 1) % 500 == 0: # 每500次显示一次进度current_percent = (idx + 1) / total_passwords * 100self.master.after(0, 请输入有效的工作表序号(非负整数), bg='#f0f0f0')main_container.pack(expand=True, 10, append=True))finally:# 更新进度条if (idx + 1) % 100 == 0 or (idx + 1) == total_passwords:self.master.after(0, message + \n)self.result_text.see(tk.END)self.result_text.config(state=disabled)def update_progress(self, fg='#333333'。

fill=x)self.browse_button = ttk.Button(self.file_frame, pady=5)# 工作表序号self.sheet_frame = tk.LabelFrame(main_container, self.update_progress, command=self.result_text.yview)scrollbar.pack(side=tk.RIGHT, lambda i=idx, sheet_index):ProtectPass = []# 生成密码组合(与原始脚本相同的逻辑)a = []b = []c = []for i in range(2048):a.append(list('{:011b}'.format(i)))for i in a:for j in i:b.append(int(j) + 65)c.append(b)b = []for k in c:m = list(k)m.append(0)for n in range(32, 9))self.file_label.pack(side=left, text=工作表序号(从0开始), padx=10,thickness=20)self.file_path = tk.StringVar()self.sheet_index = tk.StringVar(value=0)# 主容器main_container = tk.Frame(master, bg='#f0f0f0')button_frame.pack(pady=10。

pady=5, text=Excel文件选择, 'bold'))self.progress_frame.pack(pady=5。

padx=5。

height=12,)self.crack_button.pack(pady=10,bg='#f0f0f0', fill='both', Password=)# Check if the sheet index is validif sheet_index + 1 wb.Sheets.Count or sheet_index + 1 = 0:raise IndexError(f工作表序号 {sheet_index} 超出范围, fill=x)self.sheet_label = tk.Label(self.sheet_frame,)# 在win32com中, append=False))messagebox.showerror(错误。

'bold'))self.file_frame.pack(pady=10,)except Exception as e:self.master.after(0, font=('Microsoft YaHei'。

False, fill='x')self.crack_button = ttk.Button(button_frame, pady=5)self.file_entry = tk.Entry(self.file_frame, 10, fill=tk.Y)self.result_text.config(yscrollcommand=scrollbar.set)# 破解按钮button_frame = tk.Frame(main_container。

state=readonly)self.file_entry.pack(side=left,。

total_passwords)self.master.after(0, *.xls *.xlsx), 9))self.sheet_label.pack(side=left。

padx=10, 无法找到密码, fg='#333333', fill=x)self.file_label = tk.Label(self.file_frame, message, text=开始破解, state=disabled, file_path。

args=(file_path,文件只有 {wb.Sheets.Count} 个工作表。

text=0%, 请选择Excel文件, expand=True。

padx=10,bg='#f0f0f0'。

lambda: self.update_result(\n密码破解成功!\n +f当前尝试:第 {idx+1}/{total_passwords} 个密码\n +f成功破解密码:{EditPass}\n += * 50, pady=5)self.sheet_entry = tk.Entry(self.sheet_frame, p=current_percent: self.update_result(f\n当前进度:{p:.2f}%\n +f正在尝试第 {i+1}/{total_passwords} 个密码组合...\n, text=文件路径:, (所有文件, lambda: self.update_result(\n破解完成!\n +f成功找到密码:{found_password}\n += * 50, ipadx=20)def browse_file(self):filetypes = [(Excel文件,)returntry:sheet_index = int(sheet_index_str)if sheet_index 0:raise ValueErrorexcept ValueError:messagebox.showerror(错误,font=('Microsoft YaHei', append=True))messagebox.showerror(失败, text=工作表序号:,font=('Microsoft YaHei',Excel工作表索引从1开始ws = wb.Sheets(sheet_index + 1)self.master.after(0, fg='#333333'。

append=True):self.result_text.config(state=normal)if not append:self.result_text.delete(1.0, master):self.master = mastermaster.title(Excel工作表密码破解工具)master.geometry(600x700) # 增加高度以确保所有元素可见master.configure(bg='#f0f0f0') # 设置背景色# 设置样式style = ttk.Style()style.theme_use('default')style.configure('TButton', fg='#333333'。

fill=both)# 添加滚动条scrollbar = tk.Scrollbar(self.result_frame, 127):m[len(m) - 1] = nlist2 = [chr(i) for i in m]s = ''.join(list2)ProtectPass.append(s)total_passwords = len(ProtectPass)self.progress_bar['maximum'] = 100try:xlsx = win32com.client.Dispatch('Excel.Application')xlsx.Visible = Falsewb = xlsx.Workbooks.Open(file_path, EditPass in enumerate(ProtectPass):try:# 尝试使用当前密码解锁工作表保护ws.Unprotect(EditPass)# 如果没有抛出异常。

f找到密码: {found_password})else:self.master.after(0, width=10)self.sheet_entry.pack(side=left,wrap=word, 'bold'))self.progress_label.pack(pady=5)# 结果显示self.result_frame = tk.LabelFrame(main_container, fg='#333333'。

fg='#333333'。

'bold'))self.result_frame.pack(pady=5,font=('Microsoft YaHei', textvariable=self.file_path。

background='#2196F3', background=#2196F3)style.configure('Horizontal.TProgressbar'。

fill=x)self.progress_label = tk.Label(self.progress_frame, command=self.browse_file)self.browse_button.pack(side=left,bg='#f0f0f0',bg='#f0f0f0'。

fg='#333333', expand=True, append=False)self.crack_button.config(state=disabled)self.progress_bar['value'] = 0self.progress_label.config(text=0%)# 在单独的线程中运行破解过程以保持GUI响应cracking_thread = threading.Thread(target=self.crack_excel_password, 10, lambda: self.update_result(\n破解结束\n +f已尝试所有 {total_passwords} 个可能的密码组合\n +未能找到正确的密码\n += * 50, total_passwords,bg='white', *.*)]path = filedialog.askopenfilename(filetypes=filetypes)if path:self.file_path.set(path)self.update_result(已选择文件: + path)def update_result(self, fill=x)self.progress_bar = ttk.Progressbar(self.progress_frame, 9),说明密码正确found_password = EditPass# 更新进度条到100%self.master.after(0, relief=flat, pady=20)# 文件选择self.file_frame = tk.LabelFrame(main_container。

fg='#333333')self.result_text.pack(pady=5,)returnself.update_result(正在开始破解过程...,font=('Microsoft YaHei', lambda: self.update_result(开始破解工作表保护密码...\n +f总共需要尝试 {total_passwords} 个密码组合\n += * 50,font=('Microsoft YaHei', 9, padx=5, padx=5, padx=10, padx=5, expand=True)self.result_text = tk.Text(self.result_frame, append=False))found_password = Nonefor idx, messageboximport threadingclass ExcelPasswordCrackerGUI:def __init__(self。

padx=5, total_passwords)if found_password:self.master.after(0, f发生错误: {e})finally:self.crack_button.config(state=normal)try:if 'wb' in locals() and wb:wb.Close(SaveChanges=False)if 'xlsx' in locals() and xlsx:xlsx.Quit()except Exception as e:print(f关闭Excel时发生错误: {e})root = tk.Tk()app = ExcelPasswordCrackerGUI(root)root.mainloop() , total):percent = (value / total) * 100self.progress_bar['value'] = percentself.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(错误, lambda: self.update_result(f错误: {e},bg='#f0f0f0', width=40, fill=both, value,bg='#f0f0f0', append=True))messagebox.showinfo(成功,troughcolor='#E0E0E0', length=300, text=破解结果, text=破解进度, None,font=('Microsoft YaHei', mode=determinate)self.progress_bar.pack(pady=10, expand=True, idx + 1,font=('Microsoft YaHei', 'bold'))self.sheet_frame.pack(pady=5, padx=5, text=浏览, pady=5)# 进度条self.progress_frame = tk.LabelFrame(main_container, tk.END)self.result_text.insert(tk.END, False,command=self.start_cracking_thread, textvariable=self.sheet_index, self.update_progress, sheet_index))cracking_thread.start()def crack_excel_password(self,bg='#f0f0f0', ttk, orient=horizontal。

padding=6。

广告位

热心评论

评论列表