Device License SDKPlatform 13.3.7 · SDK 3.1.0

交付

Windows EXE 安全打包與發布

提高逆向與竄改成本,同時把真正的信任邊界留在 TPM、Gateway 簽章與 Server-side 授權狀態。

先接受一個現實:Client EXE 無法保證不可破解

PyInstaller、Nuitka、混淆與反除錯都只能增加分析成本。攻擊者若能控制自己的電腦,就可能觀察、修改或 Patch Client。你的目標不是把秘密藏進 EXE,而是確保即使 EXE 被分析,也拿不到 Server Secret、TPM 私鑰或能偽造 Gateway 決策的私鑰。

選擇打包方式

方式適合場景安全觀點
PyInstaller --onedir內部工具、快速交付、容易除錯打包快,但 Python bytecode 容易分析;onefile 不是加密。
Nuitka standalone正式客戶版、希望提高逆向成本將更多程式轉為原生編譯形式,但仍不能取代線上驗證。
原生模組分層高價值演算法或 IP把敏感演算法放入簽章原生模組或 Server,可再提高保護強度。

PyInstaller 安全基線

powershell
py -m venv .venv-build
.\.venv-build\Scripts\Activate.ps1
python -m pip install --upgrade pip
python -m pip install pyinstaller .\vendor\keygen_device_sdk.whl

py -m PyInstaller `
  --noconfirm `
  --clean `
  --onedir `
  --windowed `
  --name "YourApplication" `
  --collect-all keygen_device_sdk `
  .\main.py

建議使用 onedir,因為可稽核檔案結構、較容易掃描與簽章。若使用 onefile,仍要理解程式執行時會解包,不能把它視為安全容器。

Nuitka 正式交付基線

powershell
python -m pip install nuitka ordered-set zstandard .\vendor\keygen_device_sdk.whl
python -m nuitka `
  --standalone `
  --windows-console-mode=disable `
  --output-dir=build\nuitka `
  --product-name="Your Application" `
  --file-version=1.0.0.0 `
  .\main.py

发布前的信任鏈

  1. 乾淨建置環境

    固定 Python、依賴與打包工具版本,從乾淨 Workspace 建置。

  2. Authenticode 簽章

    EXE、DLL 與 Installer 都完成程式碼簽章與可信時間戳。

  3. 產生 SHA-256 與 SBOM

    記錄每個 Release Artifact 的雜湊與開源元件版本。

  4. 乾淨 VM 驗收

    測試首次啟用、後續驗證、過期、撤銷、斷線、升級與卸載。

  5. 在功能入口重新驗證

    打包後仍需在高價值操作前驗證 License 與 Entitlement。

python
state = client.validate()

state.require_valid()

state.require("YOUR_FEATURE_CODE")

run_protected_operation()

最終檢查

  • EXE 與 Installer 均有 Authenticode 簽章與時間戳
  • EXE 內不存在 Server Secret 或固定 License Key
  • Gateway Public Key 與 Product Namespace 固定且可追蹤版本
  • 高價值函式入口執行 require_valid()/require()
  • Log 不包含 License Key、Token 或完整敏感 Payload
  • 乾淨 VM 完成註冊、驗證、撤銷與斷線測試
  • Release 產生 SHA-256、SBOM 與 Build Log
下一步

把文件轉成可驗證的整合流程

先在測試 License 上完成首次註冊、後續驗證、撤銷與斷線測試,再將相同模式接入正式功能。

查看 Quickstart