如何对仍然可执行的python脚本进行加密(单向,即不可逆也可以)?

如何对仍然可执行的python脚本进行加密(单向,即不可逆也可以)?,python,encryption,obfuscation,Python,Encryption,Obfuscation,我有一个用Python编写的AI程序。我想在Ubuntu/Windows机器上部署脚本,而不公开源脚本。 如何对Python脚本进行加密,使其不可逆地编码,但可以像往常一样使用(比如从终端调用Python.py)真正的加密实际上是不可能的,但通过混淆和压缩,您可以使任何人都很难理解或重用源代码。你可以看看这个: 您也可以尝试将python脚本编译为字节码,但如果有人真的想对您的代码进行反向工程,那么所有这些过程仍然是半可逆的。真正的加密实际上是不可能的,但通过混淆和压缩,您可以使任何人都很难理

我有一个用Python编写的AI程序。我想在Ubuntu/Windows机器上部署脚本,而不公开源脚本。
如何对Python脚本进行加密,使其不可逆地编码,但可以像往常一样使用(比如从终端调用
Python.py

真正的加密实际上是不可能的,但通过混淆和压缩,您可以使任何人都很难理解或重用源代码。你可以看看这个:


您也可以尝试将python脚本编译为字节码,但如果有人真的想对您的代码进行反向工程,那么所有这些过程仍然是半可逆的。

真正的加密实际上是不可能的,但通过混淆和压缩,您可以使任何人都很难理解或重用源代码。你可以看看这个:

您也可以尝试将python脚本编译为字节码,但如果有人真的想对您的代码进行反向工程,那么所有这些过程仍然是半可逆的。

混淆python脚本
  • 首先,将python源文件编译为对象代码

  • 迭代代码对象,将每个代码对象的字节码包装为 以下格式

0跳转\u绝对n=3+len(字节码) 3. ... ... 这里是模糊字节码 ... n加载_全局?(uuu pyarmor_uuuu) n+3调用函数0 n+6 POP_顶部 n+7跳跃\u绝对0
  • 将模糊代码对象另存为.pyc或.pyo,以便可以运行或删除 由公共Python解释器导入
运行或导入模糊的Python脚本 这些模糊文件(.pyc或.pyo)可以正常运行和导入 通过公共python解释器实现。但是当调用这些代码对象时 第一次,从上面部分描述的包装字节码中,我们 知道

  • 第一个op是JUMP_绝对值,它将跳转到偏移量n

  • 在偏移量n处,指令是调用PyCFunction。此函数 将恢复偏移量3和n之间的模糊字节码,以及 将原始字节码放置在偏移量0处

  • 函数调用后,最后一条指令是跳转到 偏移量0。现在执行真正的字节码

有一种工具可以通过这种方式混淆python脚本。

混淆python脚本
  • 首先,将python源文件编译为对象代码

  • 迭代代码对象,将每个代码对象的字节码包装为 以下格式

0跳转\u绝对n=3+len(字节码) 3. ... ... 这里是模糊字节码 ... n加载_全局?(uuu pyarmor_uuuu) n+3调用函数0 n+6 POP_顶部 n+7跳跃\u绝对0
  • 将模糊代码对象另存为.pyc或.pyo,以便可以运行或删除 由公共Python解释器导入
运行或导入模糊的Python脚本 这些模糊文件(.pyc或.pyo)可以正常运行和导入 通过公共python解释器实现。但是当调用这些代码对象时 第一次,从上面部分描述的包装字节码中,我们 知道

  • 第一个op是JUMP_绝对值,它将跳转到偏移量n

  • 在偏移量n处,指令是调用PyCFunction。此函数 将恢复偏移量3和n之间的模糊字节码,以及 将原始字节码放置在偏移量0处

  • 函数调用后,最后一条指令是跳转到 偏移量0。现在执行真正的字节码


有一个工具可以通过这种方式混淆python脚本。

这是不可能的。看看web等,已经有了一些答案。这是不可能的,因为CPython解释器可以工作。你说这是一个“人工智能”程序,让程序来解决它。@JamesKPolk哈哈,不幸的是,它还没有那么聪明。:PIt是不可能的。在网上看看,已经有了一些答案。这是不可能的,因为CPython解释器可以工作。你说这是一个“人工智能”程序,让程序来解决它。@JamesKPolk哈哈,不幸的是,它还没有那么聪明。:P 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