我在最终用户机器上将知识产权编码为.net 2.0完全受信任的程序集(.exe + dll),我希望避免被黑客攻击/反向工程(WebService /云计算解决方案不是一种选择)。以下是我为了实现此目标而收集的技术列表。.Net程序集安全 - 防止黑客攻击/反向工程
我的问题是:
- 是我的假设是正确的,还是我做错事的一个或多个的技术?
- 此列表是否足以防止恶意攻击,或者我应该添加其他保护措施吗?
在此先感谢。
-
建议的方法
- 注册使用相同的强名称密钥的所有组件。
这有两个好处:- A.确保任何修改组件将使其无效,
- B.所有组件将具有相同的公钥,通过它们可以相互识别。
- 对程序集进行数字签名:两者都让用户知道执行的代码来自正确的源代码,并且 - 添加另一个标识组件,通过该组件可以识别对方。
- 通过抓取调用堆栈并验证所有调用者在“社区”中来强制执行上述操作。
可能的潜在客户:- Hallgrim的想法this S.O. thread。
- 丹尼尔布鲁克纳在this S.O. thread的增加。
- 这.Net Security Blog Post,它结合了这两种解决方案。
- 使用AOP(例如Spring.NET)将调用堆栈搜寻代码注入某些/所有方法。
- 这主要是因为在.NET程序集中没有单个入口点(如Win32 DLL的DllMain())。
- 混淆所有程序集以阻止反向工程和反射执行尝试(强制名称签名将在混淆后执行)。
- 集成System.ComponentModel.LicenseProvider机制。
- 利用“InternalsVisibleTo”程序集级别属性为了在预定义的程序集集中公开内部信息。
- 可能使用NGEN将解决方案转换为本地代码。
要考虑的问题
- 实现上述将最有可能引入性能损失,所以对时间要求严格的处理,例如,应小心处理的部分或全部。
- 对于这种完全信任的程序集,CAS似乎并不重要。
这不是博客。请遵循发布指南(摘自常见问题解答):“您应该只根据您面临的实际问题提出实际的,可回答的问题。聊天,开放式问题会降低我们网站的实用性,并将其他问题推到首页。 “ – Joe 2012-02-16 19:19:58
“这不是单一/最佳答案类型的文章。”然后,StackOverflow *不是这种帮助的最佳位置。 – Joe 2012-02-16 23:54:53
需要采取的措施,我将重新说明这个问题。 – AVIDeveloper 2012-02-17 00:25:53