簡體   English   中英

如何加密仍然可執行的python腳本(一種方法,即不可逆也很好)?

[英]How to encrypt (one way i.e. irreversible is also fine) a python script which is still executable?

我有一個用Python編寫的AI程序。 我想在Ubuntu / Windows機器上部署腳本而不公開源腳本。 如何加密Python腳本,以便對其進行不可逆的編碼,但可以照常使用(例如,從終端調用python <script_name>.py )?

混淆Python腳本

  • 首先,將python源文件編譯為代碼對象

  • 迭代代碼對象,將每個代碼對象的字節碼包裝為以下格式

0   JUMP_ABSOLUTE            n = 3 + len(bytecode)

    3
    ...
    ... Here it's obfuscated bytecode
    ...

    n   LOAD_GLOBAL              ? (__pyarmor__)
    n+3 CALL_FUNCTION            0
    n+6 POP_TOP
    n+7 JUMP_ABSOLUTE            0
  • 將混淆的代碼對象另存為.pyc或.pyo,以便可以由常見的Python解釋器運行或導入。

運行或導入混淆的Python腳本

那些混淆的文件(.pyc或.pyo)可以通過普通的python解釋器以常規方式運行和導入。 但是,當第一次調用這些代碼對象時,根據上一節中描述的包裝字節碼,我們知道

  • 第一個操作是JUMP_ABSOLUTE,它將跳轉到偏移量n

  • 在偏移量n處,指令將調用PyCFunction。 此函數將在偏移量3和n之間恢復那些混淆的字節碼,並將原始字節碼放在偏移量0處

  • 函數調用后,最后一條指令將跳轉到偏移量0。現在將執行實際的字節碼。

有一個Pyarmor工具可以通過這種方式混淆python腳本。

真正的加密實際上是不可能的,但是通過混淆和壓縮,任何人都很難理解或重用源代碼。 您可以看一下: https : //liftoff.github.io/pyminifier/

您也可以嘗試將python腳本編譯為字節碼,但是如果有人真的想對您的代碼進行反向工程,那么所有這些過程仍然是半可逆的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM