Spices.Obfuscator 是强大的 .Net 代码保护和优化工具,运用多项先进技术保护您的 .Net 代码和数据安全。
Spices.Obfuscator 可以将您的 .Net 程序集重编译为全新的格式,有效阻止反编译和代码阅读。
为什么要保护代码和数据?
Microsoft .NET 有一个关键特性就是所有的语言 (c#, VB.Net, managed c++, J#, MSIL) 都生成包含独立 CPU 指令的程序集,被称作中间语言 (IL) 指令。.NET 程序集同时还包含描述类型、成员、来自其它程序集代码参考的元数据,程序运行时,这些指令由即时编译器 (JIT) 转换为 CPU 特殊指令。
这种体系结构给程序员带来一些好处:不同语言编写的代码可以协同工作,简化了程序集的链接。然后,这种特性也带来了一个重大的缺陷:程序集包含的数据可以提供足够的信息恢复源代码。这就使保护程序的知识产权变得极为困难,因为每个人都都有可能读到源代码。程序员花费大量时间设计的复杂算法,一般不希望其他人看到。
这就是模糊技术可以帮您的地方。模糊技术可以在不影响软件功能的前提下将 .NET 程序集变形,这样就很难再反编译。.NET 程序集的模糊技术可以帮助我们实现以下几个目标:
- 使软件逆向更复杂.
模糊技术的应用可以显著增加反编译的复杂性,降低反编译的影响。
Spices.Obfuscator 可以有效阻止 ILDASM/ILASM 反编译和重编译。 - 保护数据安全.
Spices.Obfuscator 将您代码中的字符串数据保存到隐藏的安全的地方,保护后的程序集无法提取任何字符串信息。 - 优化代码大小和执行效率.
模糊技术会破坏原来的结构,使程序模块化,显著减少程序代码的体积。例如,减小元数据的大小,优化符号表。 - 保护程序集不被修改.
您程序集的强名称存在被修改或破坏的危险,Spices.Obfuscator 保护的程序集可以对抗这种风险。我们的专利技术可以保护程序集的强名称不被修改或移除。伪造强名称的程序集将无法正常工作,即便 .net loader 认为它是一个正确的强名称。
破解者已经学会了如何破解强名称,通过修改程序集,破解者可以移除或使用自己的强名称。使用我们的反修改技术,伪造强名称或移除强名称的程序集将无法启动。反修改技术会加密字符串和二进制资源(用户字符串,代码中使用的二进制数组),阻止未经授权的复制、修改、伪造和恶意代码注入。 - 保护资源.
通过加密资源名称来保护托管资源,这样他们将无法决定程序集是否被修改过。 - 添加水印.
软件水印可以被用作额外的认证信息,例如客户的名称或版权。水印信息可以帮助识别伪造的应用程序,验证程序所有者、发布地区、OEM 分销商和序列号。 水印信息以一种独特的方式嵌入到程序集,即使是反编译也无法看到。
.NET 模糊技术是如何工作的?
模糊技术可以将 .NET 程序集转换为一种更复杂的、难以理解的等价程序集。部分模糊工具使用 ILDASM 反编译程序集,将原始的 MSIL 代码变形,然后使用 ILASM 重新编译。模糊工具使用多种不同的技术,使反编译后的代码很难理解。下面列出了常见的模糊技术:
- 重命名实体.
这也是模糊技术的本质。实体是 .NET 程序集中所有的命名对象:命名空间、类、方法、属性、域和枚举。大家都知道,给实体对象一个有意义的名字,会让代码很容易读懂和调试。当您编译一个 .NET 程序集,您代码里的实体名称会被保存在程序集的元数据里,这样别人就有机会理解源代码。在重命名实体的过程中,所有的实体都被重命名为短的、无意义的、晦涩难懂的名称,这样代码会变得很难理解,但是不影响执行。此外,可以充分利用 .NET 的特性,只要重载规则允许,就可以尽可能多的使用相同的名称。方法返回类型同样可以在 MSIL 层面上重载,使程序集代码无法被反编译。 - 声明模糊.
这种技术允许程序员精确决定什么需要模糊处理,并且支持重复模糊。 - 流程模糊和代码匿名化.
这种方式可以修改源代码,将代码逻辑替换为其它很难理解的等价逻辑。 - 移除未使用的成员.
使用这种方式可以将源代码中从未使用的成员从程序集里删除,同时可以优化程序大小。 - 字符串加密.
您的 .NET 源代码里的字符串常量在编译后的 .NET 程序集里没有任何改变。使用模糊技术处理后,字符串被加密,只在运行时解密。 - 反 ILDASM 技术.
ILDASM 是 .NET 框架 SDK 里包含的 MSIL 反编译工具。这里的反 ILDASM 技术是基于一段插入程序集的代码实现的,可以导致 ILDASM 崩溃,使之无法处理程序集。

