可以反编译 .pyc 文件:反编译 Python 2.7 .pyc
是否可以“编译”python 文件,以便有人类不可读的代码,如c++ -> exe
二进制文件?..不像纯文本 .py 和非常容易恢复的.pyc 文件?(我不介意它是否可以通过暴力破解)
可以反编译 .pyc 文件:反编译 Python 2.7 .pyc
是否可以“编译”python 文件,以便有人类不可读的代码,如c++ -> exe
二进制文件?..不像纯文本 .py 和非常容易恢复的.pyc 文件?(我不介意它是否可以通过暴力破解)
Python 是一种高度动态的语言,并且支持许多不同级别的自省。因此,混淆 Python 字节码是一项艰巨的任务。
此外,您的嵌入式 python 解释器仍然需要能够执行您的产品随附的字节码。如果解释器需要能够访问字节码,那么其他人也可以。加密无济于事,因为您仍然需要自己解密字节码,然后其他人才能从内存中读取字节码。混淆只会使默认工具更难使用,而不是无法使用。
话虽如此,您必须做以下事情才能使读取应用程序的 Python 字节码变得非常困难:
为所有 python 操作码值重新分配一个新值。重新连接整个解释器以对不同的操作码使用不同的字节值。
尽可能多地删除自省功能。你的函数需要有闭包,而代码对象仍然需要常量,但是例如,代码对象中的本地列表是地狱。中性sys._getframe()
函数,斜线回溯信息。
这两个步骤都需要深入了解 Python 解释器的工作原理以及 Python 对象模型如何组合在一起。您肯定会引入难以解决的错误。
最后,你必须问问自己这是否值得。一个坚定的黑客仍然可以分析您的字节码,进行一些频率分析以重建操作码表,和/或为您的程序提供不同的操作码以查看发生了什么,并破译所有的混淆。创建转换表后,反编译字节码是一件轻而易举的事,重构代码也不远了。
如果您只想防止字节码文件被更改,请为您的.pyc
文件嵌入校验和,并在启动时检查这些校验和。如果它们不匹配,则拒绝加载。有人会修补您的二进制文件以删除校验和检查或替换校验和,但您不必付出几乎同样多的努力来提供至少一些令牌保护以防篡改。
每个具有代码加密的系统都可能受到攻击,因为解密密钥必须存在于某个地方。
因此,这只是一个努力的问题。