Hel*_*der 5 python decompiling inspect
让我们假设有一个大的商业项目(又名Project),它使用Python来管理插件,以配置可以由Project附加和使用的新控制表面.
有一个小的信息泄漏,Project的Python API的某些部分泄露给公共信息,人们能够编写Python脚本,这些脚本由底层Python实现调用,作为Project的插件加载机制的一部分.
此外,使用inspect模块和原始__dict__读数,人们能够找到Project的底层Python实现的主要部分.
有没有办法保密Python密码?
快速浏览Python的文档揭示了一种以inspect这种方式抑制模块导入的方法:
import sys
sys.modules['inspect'] = None
Run Code Online (Sandbox Code Playgroud)
它完全解决了这个问题吗?
Dae*_*yth 11
不,这不能解决问题.有人可以将检查模块重命名为其他内容并导入它.
你想要做的是不可能的.python解释器必须能够获取字节码并执行它.有人总能反编译字节码.他们将始终能够生成AST并使用变量和类名查看代码流.
请注意,此过程也可以使用编译的语言代码完成; 不同之处在于你会得到装配.有些工具可以从程序集推断C结构,但我没有足够的经验来评论细节.
您想隐藏哪些具体信息?你能保留算法服务器端并将你的软件变成一个触及你的web服务的客户端吗?将代码保存在您控制的机器上是真正控制代码的唯一方法.您不能将某个锁定的盒子,盒子的钥匙交给某人,并且当他们必须打开盒子以便运行它时防止他们打开盒子.这与DRM不起作用的原因相同.
所有这一切,仍然有可能使逆向工程变得困难,但是当客户端具有可执行文件时,它永远不会是不可能的.
没有办法让您的应用程序代码绝对保密.
坦率地说,如果一群专注且坚定的黑客(在很好的意义上,不是贬义)可以破解PlayStation的代码签名安全模型,那么你的应用程序就没有机会了.一旦您将应用程序交到公司外部的人手中,它就可以进行逆向工程.
现在,如果你想付出更多的努力,你可以编译自己的嵌入式python可执行文件,删除不必要的模块,混淆编译的python字节码并将其包装在一些恶意软件rootkit中,如果调试器拒绝启动你的应用程序在跑.
但你应该考虑你的商业模式.如果您认为对您的产品充满热情的人是一种威胁,如果您看到那些愿意花时间和精力来定制您的产品以使他们的体验成为危险的人,也许您需要重新考虑您的安全方法.假设您不在DRM业务中,或者有类似的模型涉及从不情愿的消费者那里榨取资金,请考虑开发一种方法,包括与用户共享信息,并允许他们协作改进您的产品.
| 归档时间: |
|
| 查看次数: |
4762 次 |
| 最近记录: |