我有一个用python编写的应用程序。我为使用egg文件的应用程序创建了一个插件系统。 egg文件包含已编译的python文件,可以轻松反编译并用于破解应用程序。有没有办法保护这个系统?我想使用数字签名 - 签署这些鸡蛋文件并在加载这样的鸡蛋文件之前检查签名。有没有办法从python以编程方式执行此操作?也许使用winapi?
答案 0 :(得分:3)
有没有办法保护这个系统?
答案是“取决于”。
你应该问的两个问题是“人们应该做什么”和“人们能够做什么(针对特定的实施)”。如果存在后者是前者的子集的实现,则可以保护系统。
我的一位朋友正在编写一名编程竞赛评委:一个程序,它在一些测试数据上运行用户提交的程序,并将其输出与参考输出进行比较。这很难保护:你想要运行其他人的代码,但你不想让他们运行任意代码。你的情景有点类似吗?然后答案是“很难”。
您是否希望用户从网上下载不值得信任的代码并运行它并确保它不会使其机器软管?然后看看各种网络语言。一种解决方案是不提供对系统调用(JavaScript)的访问或提供对某些潜在危险调用(Java的SecurityManager)的有限访问。据我所知,它们都不能在python中完成,但你总是可以破解解释器并且不允许加载外部模块而不是某些白名单。这可能容易出错。
您是否希望用户编写插件,而无法修改应用程序中的主体代码?考虑用户可以反编译.pyc文件并进行修改。假设那些运行代码的人总是可以修改它,并考虑为WoW设置黄金农场。
与沙盒web-ish模型类似,一个仅支持Linux的解决方案是使用AppArmor,它限制了应用程序可以访问的文件以及可以进行的系统调用。这可能是一个可行的解决方案,但我对此并不了解,所以除了“调查”之外我不能给你建议。
如果您担心的是恶意的人在交换过程中修改代码,则存在标准的加密解决方案(SSL)。如果你只想加载签名插件(因为你想控制用户做什么?),签名代码听起来就像是正确的解决方案(但要注意狡猾的用户或邪恶的人编辑.pyc文件并禁用is-it-签名支票)。
答案 1 :(得分:1)
也许像http://chandlerproject.org/Projects/MeTooCrypto这样的一些加密库有助于构建临时解决方案。用法示例:http://tdilshod.livejournal.com/38040.html