繁体   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