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

2024-04-16 06:25:05 发布

您现在位置:Python中文网/ 问答频道 /正文

让我们假设有一个大型的商业项目(也称为项目),它暗地里使用Python来管理插件,以配置项目可以附加和使用的新控制面。在

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

进一步地,使用inspect模块和原始的__dict__读物,人们能够找到项目底层Python实现的主要部分。在

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

快速查看Python的文档发现了一种支持导入inspect模块的方法:

import sys
sys.modules['inspect'] = None

它能完全解决问题吗?在


Tags: 模块项目project脚本插件api信息sys
3条回答

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

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

注意,这个过程也可以用编译过的语言代码来完成;区别在于你将得到汇编。有些工具可以从程序集中推断C结构,但我没有足够的经验来评论细节。在

你想隐藏什么具体的信息?你能保留算法服务器端,让你的软件成为一个客户端,接触你的web服务吗?将代码保存在您控制的机器上是真正控制代码的唯一方法。你不能给别人一个锁着的盒子,盒子的钥匙,当他们为了运行它而不得不打开盒子时,你不能阻止他们打开盒子。这也是DRM不能工作的原因。在

尽管如此,仍然有可能使逆向工程变得困难,但当客户机拥有可执行文件时,这永远是不可能的。在

Is there a way to keep the Python secret codes secret?

不,没有。在

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

没有办法让你的应用程序代码绝对保密。在

坦白地说,如果一群有献身精神和决心的黑客(从好的意义上说,不是贬义的)能够破解PlayStation的代码签名安全模型,那么你的应用就没有机会了。一旦你把你的应用程序交给了公司以外的人,它就可以被逆向工程了。在

现在,如果你想让它变得更难,你可以编译你自己的嵌入式python可执行文件,去掉不必要的模块,混淆编译后的python字节码,并将其封装在某个恶意软件rootkit中,如果调试器正在运行,它会拒绝启动你的应用程序。在

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

相关问题 更多 >