最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Python實現(xiàn)一個安全封裝EXE文件加密保護工具

 更新時間:2025年12月18日 09:59:30   作者:A0_張張  
文章介紹了使用Python開發(fā)的EXE文件加密保護工具,該工具使用AES-256加密算法保護原始EXE文件,并通過美觀的密碼驗證界面進行訪問,需要的朋友可以參考下

一、概述

這個Python腳本實現(xiàn)了一個強大的EXE文件加密保護工具,它能夠將任何Windows可執(zhí)行文件封裝到一個帶密碼保護的GUI程序中。核心功能包括:

  • 使用AES-256加密算法保護原始EXE文件
  • 創(chuàng)建美觀的密碼驗證界面
  • 支持自定義程序圖標
  • 自動處理PyInstaller打包過程
  • 修復Tkinter在打包環(huán)境中的運行時問題

二、核心功能模塊

1. 文件加密模塊

def encrypt_file(key, in_path, out_path):
    """使用AES-256 CBC模式加密文件"""
    iv = get_random_bytes(16)  # 生成隨機初始化向量
    cipher = AES.new(key, AES.MODE_CBC, iv)  # 創(chuàng)建加密器
    
    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)  # 寫入加密文件

2. Stub程序生成器

這是加密后的EXE文件運行時顯示的解鎖界面核心代碼:

def generate_stub_code(password_hash, encrypted_data_base64):
    """生成包含密碼驗證界面的Python代碼"""
    return f'''#!/usr/bin/env python
# Tkinter運行時修復 - 解決打包環(huán)境下的關鍵問題
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  # 設置環(huán)境變量

# 在創(chuàng)建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)  # 執(zhí)行解密后的程序

# 創(chuàng)建美觀的解鎖界面
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)
'''

3. 主界面與處理邏輯

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
        ]
        
        # 執(zhí)行打包
        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")

4. 依賴管理

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()

三、關鍵技術概要

1. Tkinter運行時修復

def fix_tkinter_runtime():
    """解決PyInstaller打包環(huán)境下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

2. 智能PyInstaller檢測

def find_pyinstaller():
    """自動檢測系統(tǒng)中可用的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

3. 健壯的錯誤處理

try:
    # 加密和打包過程
except Exception as e:
    error_details = traceback.format_exc()
    messagebox.showerror(
        "錯誤", 
        f"加密過程中出錯:\n\n{str(e)}\n\n"
        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. 輸出保護后的可執(zhí)行文件

生成的保護程序特點

  • 啟動時顯示密碼輸入界面
  • 密碼錯誤時友好提示
  • 驗證成功后自動執(zhí)行原始程序
  • 支持回車鍵快速提交

五、技術優(yōu)勢

  1. 軍事級加密:采用AES-256-CBC加密模式,使用隨機初始化向量(IV)
  2. 密碼安全:通過SHA-256哈希處理密碼,不存儲明文
  3. 優(yōu)雅的UI:使用Tkinter創(chuàng)建美觀的解鎖界面
  4. 跨平臺兼容:自動處理不同系統(tǒng)的路徑問題
  5. 自包含:最終生成單個EXE文件,便于分發(fā)
  6. 錯誤恢復:完善的異常處理和臨時文件清理

六、總結

這個EXE文件加密保護工具集成了現(xiàn)代加密技術和Python打包技術,為Windows程序提供了簡單易用的安全保護方案。通過將商業(yè)軟件封裝到密碼保護的GUI界面中,開發(fā)者可以有效控制軟件的分發(fā)和使用權限。工具還解決了PyInstaller打包環(huán)境下常見的Tkinter運行時問題,確保生成的保護程序在各種環(huán)境下都能穩(wěn)定運行。

以上就是使用Python實現(xiàn)一個安全封裝EXE文件加密保護工具的詳細內容,更多關于Python EXE文件加密保護工具的資料請關注腳本之家其它相關文章!

相關文章

最新評論

平塘县| 安乡县| 漳州市| 浮山县| 永顺县| 游戏| 赤壁市| 霸州市| 三江| 三亚市| 繁昌县| 武邑县| 九江县| 奎屯市| 阳信县| 吐鲁番市| 卫辉市| 甘德县| 海晏县| 怀仁县| 佛学| 濮阳市| 塔河县| 盐边县| 扶余县| 高安市| 衡南县| 英德市| 加查县| 邻水| 定陶县| 洪泽县| 故城县| 灵台县| 兴和县| 敦煌市| 乐至县| 苍梧县| 阜阳市| 谷城县| 玉田县|