65.9K
CodeProject 正在变化。 阅读更多。
Home

如何保护您的代码免受窥探和盗窃

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2007 年 6 月 15 日

CPOL

7分钟阅读

viewsIcon

95163

大多数 .NET 软件项目很容易被篡改,使您的软件面临安全风险和知识产权被盗的风险。本文展示了用于保护 .NET 代码的各种技术,并确定最适合您的保护方案。9rays.Net 为您提供 Spices.Obfuscator 以实现这些目的。

这是我们对 The Code Project 赞助商的展示性评测。这些评测旨在为您提供我们认为对开发人员有用且有价值的产品和服务信息。

摘要

大多数 .NET 软件项目都容易被篡改,使您的软件面临安全风险和知识产权被盗的风险。市场上提供的大多数保护方案都无法充分保护您的代码。在本文中,您将了解用于保护 .NET 代码的各种技术,并确定最适合您的保护方案。9Rays.Net 提供其 Spices.Net Obfuscator 的免费、功能齐全的评估版本。或者,下载 Spices.Net Suite 的试用版,以获得一套完整的代码保护和优化工具。

引言

随着高速互联网连接的普及,通过 CD 和 DVD 交付软件的日子正在迅速消失,许多客户(估计超过 50%)选择在线下载软件或使用软件即服务。虽然在线分发的便利性显而易见(用户几乎可以立即获得满足感),但开发人员面临着一系列挑战,以确保他们的代码不被篡改或知识产权不被盗。黑客/盗版者对 .NET 程序员造成的一些安全挑战包括:

  • 对程序集代码进行反向工程/反编译成 Microsoft 中间语言 (MSIL 非常信息丰富) 或高级语言(C#、VB.NET、C++)很容易。这允许查看敏感的专有信息,例如算法、架构和代码片段。
  • 能够进行往返(使用 ILDASM (.NET 反汇编器) 反汇编代码,进行更改(移除许可证、移除版权)并使用 ILASM (.NET 链接器) 重新汇编更改后的代码)。
  • 篡改-欺骗代码以创建额外的“后门”密钥,从而允许未经授权访问公司数据和资产。
  • 保护大型、复杂的团队项目。

就像 Spices.Decompiler 这样的易于使用的反编译器工具可以在服务器崩溃后丢失源代码时派上用场,但它们也会允许未经授权的人员将未受保护的 .NET 程序集从二进制格式反编译/反汇编为格式良好且经过优化的源代码(6 种语言:MSIL、C#、VB.NET、Delphi.NET J# 和托管 C++)。因此,开发人员需要一种解决方案来保护他们的 .NET 代码。

混淆的历史

第一代保护方案,称为混淆器,出现在 2002 年。这些第一代混淆产品通过简单地将程序集成员名称更改为无意义的名称来提供一种保护 .NET 代码的方法,从而保护代码免遭窥探。然而,这些技术很快就被手动重命名无意义名称以使其更具可读性的方法所破解。此外,这些保护方案并没有阻止往返或阻止代码篡改/欺骗(见上文)。很明显,一个有用的 .NET 混淆器应该提供更完整的安全解决方案,而不仅仅是混淆代码,还要解决防篡改、数据安全和代码保护的问题(稍后详细介绍)。

混淆与完全加密

除了混淆之外,市场上还有其他技术。可执行代码的完全加密就是这样一种技术。虽然理论上代码更安全,但主要缺点是 .NET JIT(即时)编译为多种不同硬件平台提供的所有兼容性优势都消失了。现在,开发人员被迫创建可执行代码的多个加密版本,这使得分发和安装变得更加复杂。因此,支持成本显着增加,客户满意度下降,因为用户在尝试使产品正常工作时感到沮丧。

下一代保护

9Rays.NET 意识到,由于完全加密技术带来的限制(丧失平台独立性),混淆是更好的方法,但第一代混淆产品的安全级别需要得到显著提高,才能为 .NET 代码提供完整的保护。因此,9Rays.Net 在后续版本的 Spices.Net Obfuscator 中开发了多项正在申请专利的创新,从而创造了下一代混淆技术保护。

字符串加密和资源保护

为了完全保护您的程序集,项目的所有部分都需要保护。混淆保护元数据,但代码中包含的“敏感”字符串信息以及保护托管资源的需求又如何呢?IL 代码格式使黑客能够轻松地从 .NET 代码中提取字符串信息并快速进行分析,以查找最有趣的部分,例如密码、客户信息、许可证信息和其他敏感的公司数据。字符串保护通过加密和压缩信息来保护字符串。资源保护技术通过加密资源名称来保护托管资源,使其在程序集被篡改时无法确定。资源保护功能是 9Rays.Net 获得专利的 TamperProof 技术的一部分,该技术允许开发人员保护其所有资产——代码、元数据和托管资源。

防篡改

认识到防篡改的真正解决方案是完全阻止篡改后的代码运行,9Rays.Net 开发了使 ILASM 和 ILDASM(Microsoft 中间语言汇编器和反汇编器)无法汇编或反汇编 Spices.Net 保护的代码的技术。受 Spices.Net Obfuscator 保护的软件的篡改版本将无法正常工作,因为它们完全无法编译。

强名称技术

虽然 Microsoft 提供了强名称技术来防止程序集被篡改,但这项技术存在一些漏洞,如下面的 CodeProject 文章 Building Security Awareness in .NET Assemblies : Part 3 - Learn to break Strong Name .NET Assemblies 所揭示的,该文章清楚地解释了篡改程序集的一种主要方法。9Rays.Net 的 antiTampering 技术为字符串加密提供了一个健壮的解决方案,可以防止反编译器、反汇编器或通过转储二进制文件识别敏感文本信息。

匿名化技术

现代反编译器提供了“反混淆”功能,允许未经授权的人员更容易地反编译混淆的代码。Spices.Obfuscator 提供了一种匿名化技术,可以匿名化对程序集成员的引用,使代码完全不可读。Spices.Anonymizer 是关键功能和正在申请专利的技术之一,它提供了强大的保护,可抵御反汇编器和现代反编译器。它是一个独特的解决方案,可以解决隐藏混淆成员(如类属性)遗留代码的问题。请参阅此处关于此主题的相关文章:此处

优化——混淆的附带好处

优化是现代混淆器的关键功能之一。优化功能允许删除未使用的元数据,压缩元数据流,并优化元数据和代码的结构,以提高程序集性能。

Spices.Obfuscator 包含的其他强大功能包括广泛的独特应用程序生命周期管理工具,使架构师/项目经理能够通过检查混淆质量并确定如何优化项目架构以最好地平衡保护和性能来最大化保护和优化性能。

调试困难?

因此,好消息是终于有一种方法可以在不影响部署到多个平台的灵活性的情况下,真正安全地保护 .NET 代码。但是调试过程怎么样?第一代混淆产品(以及完全加密技术)破坏了易于代码调试的链接。另一个问题是许多保护产品没有很好地集成到 Visual Studio 中,需要额外的繁琐步骤来学习和使用该产品。Spices.Net 通过在 Visual Studio 环境中提供完全集成的插件模块克服了这个问题,允许将保护和混淆过程无缝集成到熟悉的 Visual Studio IDE 中。Spices.VSIP 提供通过 Visual Studio 或 MSBuild 集成将混淆嵌入自定义生成过程。还包括与 NAnt 的集成。C# 或 VB 开发人员可以使用开发人员 API 创建自己的自定义混淆器。Spices.Net 的免费试用版包括一个 MyObfuscator 演示项目(\SDK\SimpleObfuscator 文件夹)。

最后,Spices.Net 在处理非常大的软件项目的保护方面独具优势。Spices.Project 和 Spices.Solution 可以混淆具有许多不同项目配置的大型项目。

有疑问?

也许阅读完本文后,您有一些未得到解答的问题。9Rays.Net 有一个很棒的 FAQ 文档,回答了许多关于混淆和 Spices 产品套件的常见问题。在此处查看这些答案:此处

摘要

因此,希望您现在对如何保护您的代码免遭窥探和盗窃有一些想法。.NET 创建的软件确实没有理由面临安全风险。**Spices.Net Suite** 包含本文所述的所有技术,包括 **Spices.Obfuscator**。如果您想试用 **Spices.Net Suite**,您可以尝试获取一个免费评估副本。我们很乐意听取您的反馈。请写信给我们:support@9rays.net

© . All rights reserved.