无法反编译的Python

问题描述 投票:0回答:2

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

是否可以“编译”Python 文件,从而产生人类无法读取的代码,例如

c++ -> exe
二进制文件? ..与纯文本 .py 和非常容易恢复 .pyc 文件不同? (我不介意能不能用暴力破解)

python decompiler
2个回答
8
投票

Python 是一种高度动态的语言,支持许多不同级别的内省。因此,混淆 Python 字节码是一项艰巨的任务。 此外,您的嵌入式 python 解释器仍然需要能够

执行

您的产品附带的字节码。如果解释器需要能够访问字节码,那么其他人也可以。加密没有帮助,因为您仍然需要自己解密字节码,然后其他人都可以从内存中读取字节码。混淆只会使默认工具变得更难,而不是无法使用。 话虽如此,为了让读取应用程序的 Python 字节码变得

非常困难

,您必须执行以下操作:

    重新为所有 python 操作码值分配一个
  • new

    值。重新连接整个解释器以对不同的操作码使用不同的字节值。

  • 尽可能多地删除所有内省功能。你的函数需要有闭包,代码对象仍然需要常量,但是例如,让代码对象中的本地列表见鬼去吧。对
  • sys._getframe()

    函数进行中性化,斜杠回溯信息。

    
    

  • 这两个步骤都需要深入了解 Python 解释器如何工作以及 Python 对象模型如何组合在一起。您肯定会引入难以解决的错误。

最后,你要问自己这是否值得。坚定的黑客仍然可以分析您的字节码,进行一些频率分析以重建操作码表,和/或向您的程序提供不同的操作码以查看会发生什么,并破译所有混淆。创建翻译表后,反编译字节码就变得轻而易举,而重建代码也不远了。

如果您只想防止字节码文件被更改,请为您的

.pyc

文件嵌入校验和,并在启动时检查这些校验和。如果不匹配则拒绝加载。有人会修补您的二进制文件以删除校验和检查或替换校验和,但您不必付出同样多的努力来提供至少一些令牌保护以防止篡改。

    


3
投票

因此,这只是努力的问题。

© www.soinside.com 2019 - 2024. All rights reserved.