如何防止反编译或检查python代码?

时间:2011-06-17 18:57:53

标签: python decompiling inspect

让我们假设有一个大型商业项目(a.k.a项目),它使用Python来管理插件,以配置可由Project附加和使用的新控制界面。

有一个小的信息泄漏,Project的Python API的某些部分泄露给公共信息,人们能够编写Python脚本,这些脚本由底层Python实现调用,作为Project的插件加载机制的一部分。

此外,使用inspect模块和原始{​​{1}}读数,人们能够找到Project的底层Python实现的主要部分。

有没有办法让Python密码保密?

快速浏览Python的文档,揭示了一种以这种方式阻止导入__dict__模块的方法:

inspect

它是否完全解决了问题?

4 个答案:

答案 0 :(得分:11)

不,这不能解决问题。有人可以将检查模块重命名为其他内容并导入它。

你想要做的是不可能的。 python解释器必须能够获取字节码并执行它。有人总能反编译字节码。他们总是能够生成AST并查看带有变量和类名的代码流。

请注意,此过程也可以使用编译的语言代码完成;不同之处在于你会得到装配。有些工具可以从程序集中推断C结构,但我没有足够的经验来评论细节。

您想隐藏哪些具体信息?你能保留算法服务器端并将你的软件变成一个触及你的web服务的客户端吗?将代码保存在您控制的机器上是真正控制代码的唯一方法。您不能将某个锁定的盒子,盒子的钥匙交给某人,并且当他们必须打开盒子以便运行它时防止他们打开盒子。这与DRM不起作用的原因相同。

所有这一切,仍然可以让进行逆向工程,但是当客户端具有可执行文件时,它永远不会是不可能的。

答案 1 :(得分:8)

无法保密您的应用程序代码。

坦率地说,如果一群专注且坚定的黑客(在很好的意义上,不是贬义)可以破解PlayStation的代码签名安全模型,那么你的应用程序就没有机会了。一旦您将应用程序交到公司外部的人手中,它就可以进行逆向工程。

现在,如果你想付出更多的努力,你可以编译自己的嵌入式python可执行文件,删除不必要的模块,混淆编译的python字节码并将其包装在一些拒绝启动你的应用程序的恶意软件rootkit中如果调试器正在运行。

但你应该考虑一下你的商业模式。如果您认为对您的产品充满热情的人是一种威胁,如果您看到那些愿意花时间和精力来定制您的产品以使他们的体验成为危险的人,也许您需要重新考虑您的安全方法。假设您不参与DRM业务,或者有类似的模式涉及从不情愿的消费者那里榨取资金,请考虑开发一种方法,包括与用户共享信息,并允许他们协作改进您的产品。

答案 2 :(得分:4)

  

有没有办法让Python密码保密?

没有。

Python特别容易进行逆向工程,但其他语言,甚至是编译过的语言,都很容易逆转。

答案 3 :(得分:1)

您不能完全阻止软件的逆向工程 - 如果归结为它,可以随时分析程序所包含的汇编程序指令。

但是,您可以使该过程复杂化,例如通过弄乱Python内部。但是,在跳转到如何之前,我建议您评估是否来执行此操作。通常更难“窃取”你的代码(毕竟,人们需要完全理解它们才能扩展它们),而不是自己编写代码。然而,一个纯粹的,未经过模糊处理的Python插件界面对于围绕您的程序创建整个生态系统至关重要,远远超过让某人偷看您可能没有完美设计的编码内部组件的可能缺点。