怎样保护.net代码(二)

      .NET 体系结构的优势之一在于,利用该体系结构构建的程序集包含很多有用的信息,使用中间语言反汇编程序 ILDASM 即可恢复这些信息。但是这样会带来另一个问题,就是可以访问您的二进制代码的人能够以非常近似的手段恢复原始源代码。文中介绍程序模糊处理,该处理可作为一种阻止反相工程的手段。此外,他们还将讨论可用的不同类型的模糊处理技术,并示范 代码保护专家 for .net 中包含的新模糊处理工具。

    迄今为止,从减轻部署和版本控制的负担,到自描述二进制数据所实现的丰富 IDE 功能,您可能已经熟悉了这些元数据丰富的 Microsoft® .NET Framework 体系结构带来的所有好处。您可能不知道元数据的这种易用性带来的一个目前对于大多数开发人员来说还没有注意到的问题。为公共语言运行库 (CLR) 编写的程序更易于进行反相工程。不管怎么说,这并不是 .NET Framework 设计中的缺陷;它只是一种现代的、中间编译语言(Java 语言应用程序具有同样的特征)的现实状况。Java 和 .NET Framework 都使用内嵌在可执行代码中的丰富元数据:在 Java 中是字节码,在 .NET 中是 Microsoft 中间语言 (MSIL)。由于比二进制机器码要高级很多,可执行文件充满了可以轻松破解的信息。

   借助于诸如 ILDASM 这样的工具(随同 .NET Framework SDK 一同发布的 MSIL 反汇编程序)或者类似于 Reflector for .NET 这样的反汇编程序,任何人都可以轻松地查看您的程序集并将其反相工程为可读的源代码。黑客可以搜索安全缺陷,以探究、窃取独特的创意并破译程序。这足以使您犹豫不决。

   模糊处理三种技术

  1. 重命名

  

模糊处理的第一道防线就是将有意义的名称重命名为一个无意义的名称。如您所知,从精心选择的名称中可得出许多有价值的线索。它们有助于使您的代码自我文档化,并充当了揭示它们所表示的项目的有价值的线索。CLR 不关心一个名称的描述性如何,因此模糊处理程序可以自由地修改这些名称,通常是修改为类似于“a”这样的单字符名称。

显然,模糊处理程序对一个特定程序所能执行的重命名次数是有限制的。通常来说,有三种常见的重命名方案。

如果您的应用程序由一个或多个独立的程序集组成(即未模糊处理的代码不依赖于任何程序集),那么模糊处理程序可以自由地对程序集进行重命名,而无论名称的可见性如何,只要名称和对名称的引用在程序集组中是一致的。Windows 窗体应用程序就是一个很好的例子。作为一个反面的极端例子,如果您的应用程序设计目的就是供未经过模糊处理的代码使用,那么模糊处理程序将无法更改那些对客户可见的类型或成员的名称。这种类型的应用程序的例子,包括共享类库、可重用组件等诸如此类的东西。位于二者之间的是那些打算插到现有的未做模糊处理的框架中的应用程序。在这种情况下,模糊处理程序可以对它运行时所在的环境不访问的任何东西进行重命名,不管可见性如何。ASP.NET 应用程序是这种类型应用程序的很好的例子。

Dotfuscator Community Edition 使用一种称为为“重载归纳”的专利重命名技术,这项技术可以向重命名添加扭曲。在详尽分析作用域之后,方法标识符得到了最大限度的重载。重载归纳技术并不是将旧名称替换为一个新名称,而是尽可能地将很多方法重命名为相同的名称,从而迷惑那些试图理解反编译代码的人。

此外,作为一个好的副作用,由于程序集中所包含的字符串堆变小,应用程序的大小也随之而变小了。例如,如果您有一个长度为 20 个字符的名称,将其重命名为“a”将节省 19 个字符。此外,通过节约字符串堆项以不断地重新使用重命名来节省空间。将每一项都重命名为“a”意味着“a”只存储了一次,每个被重命名为“a”的方法或字段都可以指向它。重载归纳增强了这种效果,原因是最短的标识符会得到不断的重新使用。通常,一个重载归纳项目将有高达 35% 的方法被重命名为“a”。

2.字符串加密

字符串加密是一种将简单加密算法应用到嵌入您的应用程序中的字符串的技术。如上所述,在运行时执行的任何加密(或特殊情况下的解密)从根本上讲都是不安全的。也就是说,技术高超的黑客事实上是可以破解它的,但对于应用程序代码中的字符串而言,这样做是值得的。我们所面对的事实是,如果黑客希望进入您的代码,那么他们不会盲目地开始搜索已重命名的类型。他们可能确实会搜索“无效许可证密钥”,这会将他们直接引导到执行许可证处理的代码。对字符串进行搜索非常简单;字符串加密设置有保护,这是因为在编译的密码中只存在加密的版本。

3.控制流

控制流是一种强大的模糊处理技术,它的目的是隐藏一系列指令的意图而又不会更改逻辑。更为重要的是,它可用来删除反编译程序为了忠实重现高级源代码语句(比如 if-then-else 语句和循环)而寻找的那些线索。事实上,这项技术试图破坏反汇编程序的工作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值