
魔法表情
.NET软件保护与破解浅析 网上很少看到有关.NET软件保护与破解的文章,刚好分析了几款有一定代表性的.NET软件,于是便将他们的保护措施和如何破解方法记录下来,以便和大家交流。在开始之前,首先申明:本文中反编译和破解的软件只是为学习和研究的目的,请勿非法使用。
.NET平台下的软件(exe,dll文件)叫做程序集。它使用一种扩展的PE格式文件来保存。.NET程序集与以往的应用程序不同,它保存的是Microsoft中间语言指令(MSIL)和元数据(Metadata),而不是机器指令和数据。.NET程序集在运行的时候才会动态将Microsoft中间语言编译成机器指令执行。所以我们不能简单的使用反汇编来解读程序逻辑。初学者明白这点很重要。不过幸运的是,.NET程序集是一种自描述的组件,可以用它自描述的特性反编译出高级程序代码(如c#,vb.net),这比汇编代码更容易读懂得多。即使不反编译成高级程序代码,Microsoft中间语言本身也是一种抽象、基于堆栈的面向对象伪汇编语言。它本身也比汇编代码更容易读懂。在代码易阅读这点上,.NET程序更容易遭到破解。不过,有矛必有盾,现在有很多产品都可以混淆.NET代码,使得反编译出来后的结果也同样没有可读性。
.NET程序集与以往的应用程序另一个不同点在于它可以使用强名称签名来防止自身被篡改。使用强名称签名的程序集包含公钥和数字签名信息。.NET在执行具有强名称的程序集前会对它进行安全检查,以防止它被非法篡改。这一点很厉害,它限制了我们通过修改程序代码(爆破)来破解程序的方法。
.NET平台还提供了很多安全相关的类库,利用这些类库可以写成很强壮的注册算法(如使用RSA对注册文件签名,只有使用私钥才能产生正确的注册码)。这些算法破解者很难破解。
另外,现在还出现了很多其他的保护措施,如流程混淆,元数据加密,加密壳,虚拟机技术,编译为本地代码等保护手段。综合使用这些保护手段,会使破解难道大幅度提高。
软件破解一般有两种方式。一种方式为不对软件做出修改,只是分析软件注册算法,根据注册算法写出生成正确注册码的注册机程序完成注册过程。第二种方式需要对软件逻辑作出修改,使软件正常判断注册逻辑失效,总是认为软件已经注册成功。这种方式就是通常说的“爆破”。由于第二种方法需要修改软件逻辑,不能保证软件修改后的行为和原来一样,故一般只有在第一种方式尝试失败后才使用第二种方式。
下面,我将通过对两款软件的分析来讲解.NET平台下软件的保护措施和破解方法。
准备的工具:
1,Reflector http://www.aisto.com/roeder/dotnet/
.NET平台下极好的反编译工具。
阅读全文……