无法编译的Python

Qwe*_*rty -2 python compiler-construction decompiler

可以反编译.pyc文件:反编译Python 2.7 .pyc

是否有可能`编译'python文件,所以有一个人类不可读的代码,如c++ -> exe二进制文件?..不像明文.py和非常容易恢复的 .pyc文件?(我不介意它是否可以被蛮力破解)

Mar*_*ers 8

Python是一种高度动态的语言,支持许多不同级别的内省.因此,混淆Python字节码是一项多山任务.

此外,您的嵌入式python解释器仍然需要能够执行产品附带的字节码.如果解释器需要能够访问字节码,那么其他人也可以.加密无济于事,因为您仍然需要自己解密字节码,然后其他人都可以从内存中读取字节码.混淆只会使默认工具更难,而不是无法使用.

话虽如此,这就是你要做的事情,让你真正难以阅读你的应用程序的Python字节码:

  • 重新为所有python操作码值分配一个值.重新连接整个解释器,为不同的操作码使用不同的字节值.

  • 尽可能多地删除所有内省功能.你的函数需要有闭包,而代码对象仍然需要常量,但是对于代码对象中的locals列表来说,例如.中性sys._getframe()函数,斜杠追溯信息.

这两个步骤都需要深入了解Python解释器的工作方式,以及Python对象模型如何组合在一起.你肯定会介绍很难解决的bug.

最后,你必须问自己这是否值得.确定的黑客仍然可以分析您的字节码,进行一些频率分析以重建操作码表,和/或为您的程序提供不同的操作码以查看发生的情况,并解密所有混淆.创建转换表后,快速反编译您的字节码,重建代码并不遥远.

如果您只想阻止字节码文件被更改,请为您的.pyc文件嵌入校验和,并在启动时检查这些文件.如果不匹配则拒绝加载.有人会修补您的二进制文件以删除校验和检查或替换校验和,但您不必投入相当多的努力来提供至少一些令牌保护以防止篡改.

  • @Junuxx:我们会在每一步都提醒OP这样做是没有意义的. (4认同)
  • 你是那种将`#define`s偷偷带进人们的C/C++代码的人不是吗?:) (3认同)
  • @Junuxx:我没有提供任何关于如何做的细节,是吗?我想说明你必须去的长度,那些长度仍然是徒劳的. (2认同)
  • @Qwerty:你*不能*避免使用字节码运送.您拥有的唯一选项是按原样提供字节码,或者对字节码进行模糊处理.我只是试图告诉你,这条道路不是实用的,也不是万无一失的. (2认同)