防止黑客/反向

我在最终用户机器上将知识产权编码为.net 2.0完全可信的程序集(.exe + DLL),我希望避免被黑客攻击/反向工程(WebService /云计算解决方案不是选项)。 以下是我为了实现此目标而收集的技术列表。

我的问题是:

  • 我的假设是正确的,还是我在一项或多项技术中做错了?
  • 这份清单是否足以防止恶意攻击,还是我应该添加其他保护措施?
  • 提前致谢。

    -

    建议的技术

  • 使用相同的强名称密钥签署所有程序集。
    这有两个好处:
  • A.确保组件的任何修改都会使其无效,
  • B.所有程序集都有相同的公钥,通过它们可以彼此识别。
  • 对组件进行数字签名:两者都让用户知道执行的代码来自正确的源代码,并且 - 添加另一个标识组件,通过该组件可以识别对方。
  • 通过爬取调用堆栈并验证所有调用者是否在“社区”中来执行上述操作。
    可能的线索:
  • Hallgrim在这个SO线程中的想法。
  • 丹尼尔布鲁克纳在这个SO线程中的加入。
  • 这个.Net安全博客文章结合了这两种解决方案。
  • 使用AOP(例如Spring.NET)将调用堆栈爬取代码注入某些/所有方法。
  • 这主要是因为在.net程序集中没有单个入口点(例如Win32 DLL的DllMain())。
  • 混淆所有程序集以阻止反向工程和反射执行尝试(当然,混淆后将执行强名称签名)。
  • 集成System.ComponentModel.LicenseProvider机制。
  • 利用“InternalsVisibleTo”程序集级属性,以便在预定义的程序集集中公开内部信息。
  • 可能使用NGEN来将解决方案转换为本地代码。
  • 要考虑的事项

  • 执行部分或全部上述操作最可能会导致性能损失,因此应该小心处理时间关键型处理。
  • 对于这种完全可信的程序集,CAS似乎是无关紧要的。

  • 恐怕你不会得到你想要的所有安全。 你看,这是使用中间语言的这些语言/平台的问题。 它必须采用所有运行时实现可以使用的格式,然后生成本机代码。

    我见过一些关于篡改已签署程序集的博客文章。 我还没有尝试,但我认为它的作品。 除此之外,混淆工具只会让它变得更难,但并非不可能提取代码(尽管有一些相当不错的工具会使其变得非常困难)。 NGEN不是那样的。 您仍然有分发原始程序集。

    我认为保护代码的最有效和最安全的方法是将其转移到无法反编译的技术上,例如,将敏感代码移至非托管C ++并在您的C#代码中使用DLLImport。

    这并不意味着你不应该试图保护你的代码,但你应该记住,你不会100%的保护。 如果您无法用其他语言重写敏感代码,请使用混淆和签名。 你不能比这更安全。

    链接地址: http://www.djcxy.com/p/57493.html

    上一篇: Prevent Hacking / Reverse

    下一篇: SSRS External Assembly: Failed to load expression host assembly