編譯強檔

把應用程式編譯成原生二進位檔,授權閘門自動插入每一個模組——不出貨明文 Python,也沒有單獨一處檢查可以被找到並刪除。

便捷檔出貨的是「解密一次即可讀取」的 Python 位元碼。magiclock build 更進一步:自動為原始碼樹裡每一個模組插入一次授權閘門檢查,把這個閘門直接編織進編譯後的原生程式碼,加密你打包進去的模型,內嵌廠商的公鑰,然後進行編譯——如此一來沒有明文 Python 可讀,也沒有單獨一處檢查可以被找到並 patch 掉。

不需要標記任何東西

沒有裝飾器,也不需要為程式碼加任何註解——你的原始碼完全不用改。magiclock build app.py 會走訪從 app.py 可到達的每一個 .py 模組,在編譯前為每個模組插入一次閘門檢查(核對 python_protect 這項能力)。進入點模組還會自動插入一次 magiclock.air.bootstrap() 呼叫,不需要你自己寫:

python
# 你的原始碼,原封不動——不需要裝飾器,也不需要手動加 bootstrap() 呼叫
def export_report(data: str) -> bytes:
    return render_pdf(data)
shell
magiclock build app.py   # 樹裡的每一個模組——包括這個——都會自動被加上閘門

閘門檢查每個模組只會執行一次,在行程第一次 import 它的時候執行——這是「每模組一個檢查點」,不是「每次呼叫一個檢查點」(長時間執行的行程下這代表什麼、以及有效期/撤銷的取捨,見安全模型)。

進行編譯

shell
magiclock build app.py                        # -> dist/app.<...>.so   (single compiled module)
magiclock build app.py --standalone            # a self-contained app directory instead
magiclock build app.py --no-compile            # scan + inject + embed only — skip compiling (no C toolchain needed)
magiclock build app.py --model weights.onnx    # also encrypt a model into the build (repeatable)
旗標預設值意義
-o, --output-dirdist建置產物的輸出位置。
--source-root進入點檔案所在位置要掃描/轉換的專案根目錄(當 app.py 不在專案頂層時使用)。
--module編譯成單一檔案的原生擴充模組(預設目標)。
--standalone改為編譯成一個自含式的應用程式目錄,與 --module 互斥。
--no-compile關閉只做掃描、注入閘門與內嵌資源,跳過實際的原生編譯——適合檢視轉換結果,或建置機器沒有 C 工具鏈時使用。
--keep-tmp關閉保留中介轉換目錄,不進行清理。
--model PATH加密一個模型並打包進建置產物,可重複使用。
--model-lock-passphrase關閉為打包的模型加上密碼片語作為第二因子(至少需要一個 --model)。
--model-trial / --model-expires-in / --model-expires-at打包模型的有效期——語意與加密程式碼的有效期旗標相同,彼此互斥。

出貨內容

編譯出的 .so/.pyd/自含式目錄,在執行它的機器上不需要安裝 MagicLock、不需要帳號、也不需要連網——解密與授權檢查都是完全離線的(見安全模型)。

預設情況下,編譯後的二進位檔是裝置鎖定的:只能在建置它的那台機器上解密並執行(信任根就是那台機器的指紋)。如果你需要同一份建置結果在多台機器上執行——第二台工作站、一台部署伺服器——請把那台機器也納入你的帳號並在那台機器上建置;編譯強檔目前尚未提供加密程式碼加密模型與資源那種便攜(--no-bind-machine)解鎖方式。

接下來看什麼

  • 安全模型——為什麼編譯強檔能抵擋便捷檔無法完全排除的「直接找到並 patch 掉檢查」繞過方式。
  • 帳號與啟用——啟用更多建置/部署機器。