2010-08-12 242 views
6

我想知道多少简单的反编译python字节码。我已经在python中创建了一个应用程序,其源代码希望是安全的。我正在使用py2exe,它基本上依赖于python编译的文件。是否可以轻松完全反编译python编译(* .pyc)文件?

确保代码安全吗?

+0

可能重复的[如何保护python代码?](http://stackoverflow.com/questions/261638/how-do-i-protect-python-code) – 2010-08-12 02:41:06

+2

啊... 3年后,我意识到代码保护是多么荒谬。事实上,在像C/C++这样广泛的语言中,没有其他语言不能被反编译。 – Shubham 2013-06-24 17:44:07

回答

6

取决于您对“完全”(在“完全反编译”)中的定义... ;-)。你不会轻易找回原始的Python源代码,但获取字节码很容易,而标准库模块dis的存在恰好可以使字节码容易读取(尽管它的仍然是字节码,而不是完整的Python源代码;-) 。

+0

那里也有C++反编译器,但它们只是无用的。他们没有得到原始的源代码,只是一些汇编级的指令。所以通过完全可解析我的意思是哪个*实际*生成*实际*源代码。 – Shubham 2010-08-12 02:34:04

+0

你不会得到“实际的源代码”。评论将会消失。但变量名称,方法名称,常量,字符串以及您应用于其中的所有逻辑都可供有兴趣的人阅读。 – 2010-08-12 02:39:07

+1

@Shubham,yep,@Ned是对的:Python的字节码离Python源码更近,比汇编语言更接近它的源代码。任何值得他或她的盐的Python专家将能够精确地从字节码中重建源的逻辑,而不会永远关注它(不是从汇编代码中完成它更难 - 看看每个新的需要多长时间愚蠢的“复制保护”计划让游戏被拆解,理解和破坏...... ;-)。 – 2010-08-12 03:09:32

1

如果你在线搜索,你可以找到Python字节码的反编译器:有一个免费的下载版本,但它只能处理Python 2.3以上的字节码,而online service可以反编译到2.6版本。

目前似乎还没有任何反编译器用于更新版本的Python字节码,但这几乎肯定是因为没有人觉得需要编写一个字节码,而不是字节码本身的任何基本难点。

有些人试图通过修改解释器来保护Python字节码:没有什么特别的理由说明,为什么你不能编译你自己的解释器时使用了字节码的不同值:这将阻止简单检查import dis的代码,但是不会长时间站在任何确定的攻击之下,而且代码更好地投入到改进程序本身的所有代价中。

总之,如果你想保护你的程序,然后使用法律来做到这一点:使用适当的软件许可证,并起诉那些忽略它的人。代码编写起来很昂贵,但最终的结果很少是软件包的宝贵部分:数据更有价值。