如何加密(一种方式,即不可逆也可以)仍然可执行的 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
)?
真正的加密是不可能的,但通过混淆和压缩,您可以让任何人都很难理解或重用源代码。你可以看看这个:
https://liftoff.github.io/pyminifier/
您也可以尝试将 python 脚本编译为字节码,但如果有人真的想对您的代码进行逆向工程,所有这些过程仍然是半可逆的。
混淆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
函数调用后,最后一条指令是跳转到
offset 0. 现在真正的字节码被执行了。
有一个工具 Pyarmor 可以通过这种方式混淆 python 脚本。
我有一个用 Python 编写的 AI 程序。我想在 Ubuntu/Windows 机器上部署脚本而不公开源脚本。
我怎样才能加密 Python 脚本,使其被不可逆编码但可以照常使用(比如从终端调用 python <script_name>.py
)?
真正的加密是不可能的,但通过混淆和压缩,您可以让任何人都很难理解或重用源代码。你可以看看这个: https://liftoff.github.io/pyminifier/
您也可以尝试将 python 脚本编译为字节码,但如果有人真的想对您的代码进行逆向工程,所有这些过程仍然是半可逆的。
混淆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
函数调用后,最后一条指令是跳转到 offset 0. 现在真正的字节码被执行了。
有一个工具 Pyarmor 可以通过这种方式混淆 python 脚本。