Undecompilable的Python(Undecompilable Python)

2019-07-20 13:22发布

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

是否有可能`compile`蟒蛇文件,所以有一个人类不可读的代码,如c++ -> exe二进制文件? ..unlike明文的.py, 很容易恢复 pyc文件? (我不介意它可以通过蛮力被破解)

Answer 1:

Python是一个高度动态的语言,并支持许多不同的层面反思的。 正因为如此,混淆Python的字节码是一个多山的任务。

此外,您的嵌入式Python解释器将仍然需要能够与您的产品执行你船的字节码。 而如果解释需要能够访问的字节码,然后其他人也能。 加密不会帮助,因为你仍然需要自己解密字节码,然后每个人都可以从内存中读取的字节码。 混淆只会使默认工具更难,甚至无法使用。

随着中说,这里是你必须做的,使它真正血腥很难读你的应用程序的Python字节码是什么:

  • 重新分配所有的Python码值的值。 重新接线全解释使用不同的字节值不同的操作码。

  • 删除所有尽可能多的内省功能,你可以逃脱。 你的功能需要有关闭,并codeobjects需要常量还在,但与代码中的对象当地人名单地狱,例如。 中性的sys._getframe()函数,斜线的跟踪信息。

这两个步骤都需要进行深入的Python解释器是如何工作的知识,以及如何Python的对象模型结合在一起的。 你肯定会引入错误,这将是难以解决的。

最后,你要问自己,如果这是值得的。 一个意志坚定的黑客仍然可以分析你的字节码,做了一些频率分析来重建码表,和/或养活你的程序不同的操作码,看看会发生什么,以及破译所有的混淆。 一旦创建了转换表,反编译你的字节码是一个单元,并重建你的代码并不遥远。

如果你想要做的就是防止字节码文件被更改,嵌入校验你的.pyc的文件,并检查那些在启动时。 拒绝,如果它们不匹配加载。 有人会修补二进制文件删除校验和检查或更换校验,但你不会要投入几乎一样多的努力,从篡改至少提供一些象征性的保护。



Answer 2:

与代码加密每个系统可以被攻击的解密密钥必须在某个地方存在。

因此,它仅仅是一个努力的问题。



文章来源: Undecompilable Python