使用Python实现一个安全封装EXE文件加密保护工具

作者:

文章目录
  • 这个Python脚本实现了一个强大的EXE文件加密保护工具,它能够将任何Windows可执行文件封装到一个带密码保护的GUI程序中。核心功能包括: 使用AES-256加密算法保护原始EXE文件 创建美观的密码验证界面 支持自定义程序图标 自动处理PyInstaller打包过程 修复Tkinter在打包环境中的运行时问题
  • 主界面功能: 选择要加密的EXE文件 设置输出路径(自动生成) 添加自定义图标(可选) 设置并确认解锁密码 处理流程: 验证输入信息 使用AES-256加密原始EXE 生成带GUI界面的stub程序 使用PyInstaller打包成单个EXE 输出保护后的可执行文件 生成的保护程序特点: 启动时显示密码输入界面 密码错误时友好提示 验证成功后自动执行原始程序 支持回车键快速提交
  • 军事级加密:采用AES-256-CBC加密模式,使用随机初始化向量(IV) 密码安全:通过SHA-256哈希处理密码,不存储明文 优雅的UI:使用Tkinter创建美观的解锁界面 跨平台兼容:自动处理不同系统的路径问题 自包含:最终生成单个EXE文件,便于分发 错误恢复:完善的异常处理和临时文件清理
  • 这个EXE文件加密保护工具集成了现代加密技术和Python打包技术,为Windows程序提供了简单易用的安全保护方案。通过将商业软件封装到密码保护的GUI界面中,开发者可以有效控制软件的分发和使用权限。工具还解决了PyInstaller打包环境下常见的Tkinter运行时问题,确保生成的保护程序在各种环境下都能稳定运行。 以上就是使用Python实现一个安全封装EXE文件加密保护工具的详细内容,更多关于Python EXE文件加密保护工具的资料请关注风君子博客其它相关文章! 您可能感兴趣的文章: Python打包EXE常见错误汇总及解决方案 基于Python编写一个git自动上传的脚本(打包成exe) Python利用PyInstaller库实现将脚本一键打包为EXE文件 Python代码打包为EXE的完全指南(图文详解+问题排查) python代码打包到exe的实现示例
  • 目录
    • 一、概述
    • 二、核心功能模块
      • 1. 文件加密模块
      • 2. Stub程序生成器
      • 3. 主界面与处理逻辑
      • 4. 依赖管理
    • 三、关键技术概要
      • 1. Tkinter运行时修复
      • 2. 智能PyInstaller检测
      • 3. 健壮的错误处理
    • 四、使用说明
      • 五、技术优势
        • 六、总结

          这个Python脚本实现了一个强大的EXE文件加密保护工具,它能够将任何Windows可执行文件封装到一个带密码保护的GUI程序中。核心功能包括:

          • 使用AES-256加密算法保护原始EXE文件
          • 创建美观的密码验证界面
          • 支持自定义程序图标
          • 自动处理PyInstaller打包过程
          • 修复Tkinter在打包环境中的运行时问题

          def encrypt_file(key, in_path, out_path):
              """使用AES-256 CBC模式加密文件"""
              iv = get_random_bytes(16)  # 生成随机初始化向量
              cipher = AES.new(key, AES.MODE_CBC, iv)  # 创建加密器
              
              with open(in_path, 'rb') as f_in:
                  data = f_in.read()  # 读取原始文件内容
              
              # 加密并填充数据
              ct_bytes = cipher.encrypt(pad(data, AES.block_size))
              encrypted = iv + ct_bytes  # 组合IV和密文
              
              with open(out_path, 'wb') as f_out:
                  f_out.write(encrypted)  # 写入加密文件

          这是加密后的EXE文件运行时显示的解锁界面核心代码:

          def generate_stub_code(password_hash, encrypted_data_base64):
              """生成包含密码验证界面的Python代码"""
              return f'''#!/usr/bin/env python
          # Tkinter运行时修复 - 解决打包环境下的关键问题
          def fix_tkinter_runtime():
              if getattr(sys, 'frozen', False):
                  base_path = sys._MEIPASS
                  tk_data_dir = os.path.join(base_path, '_tk_data')
                  if not os.path.exists(tk_data_dir):
                      tk_data_dir = os.path.join(base_path, 'tk', 'data')
                  os.environ['TKDATA'] = tk_data_dir  # 设置环境变量
          
          # 在创建Tkinter界面之前调用修复函数
          fix_tkinter_runtime()
          
          # 密码验证逻辑
          def check_password():
              password = password_entry.get()
              key = hashlib.sha256(password.encode()).digest()  # 从密码生成密钥
              decrypted_data = decrypt_data(key)  # 尝试解密
              if decrypted_data:
                  root.destroy()
                  execute_decrypted(decrypted_data)  # 执行解密后的程序
          
          # 创建美观的解锁界面
          root = tk.Tk()
          root.title("程序解锁")
          root.geometry("260x230")
          root.resizable(False, False)
          root.configure(bg="#f0f0f0")
          
          # 界面组件:图标、输入框、按钮等
          icon_label = ttk.Label(main_frame, text="🔒", font=("Arial", 24))
          password_entry = ttk.Entry(main_frame, show="*", width=25)
          submit_btn = ttk.Button(main_frame, text="解锁程序", command=check_password, width=15)
          '''

          def main():
              """主GUI界面和处理流程"""
              # 文件选择函数
              def select_exe():
                  # 自动设置输出路径
                  output_path = os.path.join(dir_name, f"{name_without_ext}_protected.exe")
              
              # 加密处理核心逻辑
              def encrypt():
                  # 验证输入
                  if not all([exe_path, output_path, password, confirm]):
                      messagebox.showerror("错误", "所有字段都必须填写")
                      return
                  
                  # 生成密钥和哈希
                  password_hash = hashlib.sha256(password.encode()).hexdigest()
                  key = hashlib.sha256(password.encode()).digest()
                  
                  # 加密文件
                  encrypt_file(key, exe_path, encrypted_temp_path)
                  
                  # 生成stub代码
                  stub_code = generate_stub_code(password_hash, encrypted_data_base64)
                  
                  # PyInstaller打包处理
                  pyinstaller_cmd = [
                      *find_pyinstaller(),  # 自动检测PyInstaller
                      '--onefile', '--noconsole',
                      '--name', output_basename,
                      *icon_cmd,  # 图标参数
                      stub_path
                  ]
                  
                  # 执行打包
                  subprocess.run(pyinstaller_cmd, shell=sys.platform.startswith('win'))
                  
                  # 处理结果
                  if os.path.exists(generated_exe):
                      shutil.copy(generated_exe, output_path)
                      status_label.config(text=f"加密成功! 文件已保存到:n{output_path}", fg="green")

          if __name__ == "__main__":
              # 自动安装缺失依赖
              try:
                  from Crypto.Cipher import AES
              except ImportError:
                  print("正在安装依赖库pycryptodome...")
                  subprocess.check_call([sys.executable, "-m", "pip", "install", "pycryptodome"])
                  os.execl(sys.executable, sys.executable, *sys.argv)  # 重启脚本
              
              # 检查PyInstaller
              try:
                  import PyInstaller
              except ImportError:
                  subprocess.check_call([sys.executable, "-m", "pip", "install", "pyinstaller"])
              
              main()

          def fix_tkinter_runtime():
              """解决PyInstaller打包环境下Tkinter的资源路径问题"""
              if getattr(sys, 'frozen', False):
                  base_path = sys._MEIPASS
                  tk_data_dir = os.path.join(base_path, '_tk_data')
                  if not os.path.exists(tk_data_dir):
                      tk_data_dir = os.path.join(base_path, 'tk', 'data')
                  os.environ['TKDATA'] = tk_data_dir

          def find_pyinstaller():
              """自动检测系统中可用的PyInstaller安装方式"""
              if shutil.which('pyinstaller'):
                  return ['pyinstaller']
              
              # 尝试通过Python解释器调用
              for py_exe in ['python', 'python3']:
                  if shutil.which(py_exe):
                      try:
                          subprocess.run([py_exe, '-c', 'import PyInstaller'], check=True)
                          return [py_exe, '-m', 'PyInstaller']
                      except:
                          continue
              return None

          try:
              # 加密和打包过程
          except Exception as e:
              error_details = traceback.format_exc()
              messagebox.showerror(
                  "错误", 
                  f"加密过程中出错:nn{str(e)}nn"
                  f"详细错误信息:n{error_details[:1000]}"
              )
          finally:
              # 确保清理临时文件
              shutil.rmtree(temp_dir, ignore_errors=True)

          主界面功能

          • 选择要加密的EXE文件
          • 设置输出路径(自动生成)
          • 添加自定义图标(可选)
          • 设置并确认解锁密码

          处理流程

          1. 验证输入信息
          2. 使用AES-256加密原始EXE
          3. 生成带GUI界面的stub程序
          4. 使用PyInstaller打包成单个EXE
          5. 输出保护后的可执行文件

          生成的保护程序特点

          • 启动时显示密码输入界面
          • 密码错误时友好提示
          • 验证成功后自动执行原始程序
          • 支持回车键快速提交

          1. 军事级加密:采用AES-256-CBC加密模式,使用随机初始化向量(IV)
          2. 密码安全:通过SHA-256哈希处理密码,不存储明文
          3. 优雅的UI:使用Tkinter创建美观的解锁界面
          4. 跨平台兼容:自动处理不同系统的路径问题
          5. 自包含:最终生成单个EXE文件,便于分发
          6. 错误恢复:完善的异常处理和临时文件清理

          这个EXE文件加密保护工具集成了现代加密技术和Python打包技术,为Windows程序提供了简单易用的安全保护方案。通过将商业软件封装到密码保护的GUI界面中,开发者可以有效控制软件的分发和使用权限。工具还解决了PyInstaller打包环境下常见的Tkinter运行时问题,确保生成的保护程序在各种环境下都能稳定运行。

          以上就是使用Python实现一个安全封装EXE文件加密保护工具的详细内容,更多关于Python EXE文件加密保护工具的资料请关注风君子博客其它相关文章!

          您可能感兴趣的文章:

          • Python打包EXE常见错误汇总及解决方案
          • 基于Python编写一个git自动上传的脚本(打包成exe)
          • Python利用PyInstaller库实现将脚本一键打包为EXE文件
          • Python代码打包为EXE的完全指南(图文详解+问题排查)
          • python代码打包到exe的实现示例

          站内搜索