使用Python實現(xiàn)一個安全封裝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_dir2. 智能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 None3. 健壯的錯誤處理
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文件
- 設置輸出路徑(自動生成)
- 添加自定義圖標(可選)
- 設置并確認解鎖密碼
處理流程:
- 驗證輸入信息
- 使用AES-256加密原始EXE
- 生成帶GUI界面的stub程序
- 使用PyInstaller打包成單個EXE
- 輸出保護后的可執(zhí)行文件
生成的保護程序特點:
- 啟動時顯示密碼輸入界面
- 密碼錯誤時友好提示
- 驗證成功后自動執(zhí)行原始程序
- 支持回車鍵快速提交
五、技術優(yōu)勢
- 軍事級加密:采用AES-256-CBC加密模式,使用隨機初始化向量(IV)
- 密碼安全:通過SHA-256哈希處理密碼,不存儲明文
- 優(yōu)雅的UI:使用Tkinter創(chuàng)建美觀的解鎖界面
- 跨平臺兼容:自動處理不同系統(tǒng)的路徑問題
- 自包含:最終生成單個EXE文件,便于分發(fā)
- 錯誤恢復:完善的異常處理和臨時文件清理
六、總結
這個EXE文件加密保護工具集成了現(xiàn)代加密技術和Python打包技術,為Windows程序提供了簡單易用的安全保護方案。通過將商業(yè)軟件封裝到密碼保護的GUI界面中,開發(fā)者可以有效控制軟件的分發(fā)和使用權限。工具還解決了PyInstaller打包環(huán)境下常見的Tkinter運行時問題,確保生成的保護程序在各種環(huán)境下都能穩(wěn)定運行。
以上就是使用Python實現(xiàn)一個安全封裝EXE文件加密保護工具的詳細內容,更多關于Python EXE文件加密保護工具的資料請關注腳本之家其它相關文章!
相關文章
淺談cv2.imread()和keras.preprocessing中的image.load_img()區(qū)別
這篇文章主要介紹了淺談cv2.imread()和keras.preprocessing中的image.load_img()區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06
Django def clean()函數對表單中的數據進行驗證操作
這篇文章主要介紹了Django def clean()函數對表單中的數據進行驗證操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07
基于keras中import keras.backend as K的含義說明
這篇文章主要介紹了keras中import keras.backend as K的含義說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-05-05
詳解Python 多線程 Timer定時器/延遲執(zhí)行、Event事件
這篇文章主要介紹了Python 多線程 Timer定時器/延遲執(zhí)行、Event事件的相關知識,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-06-06

