如何保护.net中的dll文件(防止破解、反编译dll)

转载 2011年01月07日 18:09:00

.net是一种建立在虚拟机上执行的语言,它直接生成 MSIL 的中间语言,再由.net编译器 JIT 解释映象为本机代码并交付CPU执行。中间语言很容易被反编译,所以研究下如何有效的保护dll文件。

我大致的方法为 :强签名+混淆+加密。

强签名
强命名程序集,可以确保你的程序集唯一,而不被篡改、冒用等;即使相同名字的程序集如果签名也会不同。
强签名很简单

为项目添加强名称方法:
1.右键单击项目,打开属性窗口;
2.在属性窗口里选择《签名》标签,选中为程序集签名的选项,在下拉列表里选择新建,如下图所示:

3.打开新建签名窗口,输入签名的名称密码等内容,如下图所示:
 

 

单击确定后,签名添加完成。
 
为没有源码的DLL文件添加强名称
 
如果项目中引用了其他没有源码的dll文件,并且此dll文件是没有强名称的程序集,则编译时会出现类似 "Assembly generation failed -- 引用的程序集 'xxxxxxxxxxx' 没有强名称" 这样的错误。
我这里引用的是Interop.Scripting.dll程序集,它不是强名称的,则需要进行以下操作:
1.打开SDK 命令提示窗口;

 


2.创建一个新的随机密钥对:
sn -k Interop.Scripting.snk
3.反编译目标程序集
ildasm Interop.Scripting.dll /out=Interop.Scripting.il
3.重新编译,附带强命名参数
ilasm Interop.Scripting.il /dll /resource=Interop.Scripting.res /key=Interop.Scripting.snk /optimize
4.验证签名信息
sn -v Interop.Scripting.dll

OK,将生成的dll文件重新引入到项目中然后编译。

注:未签名的主程序可以引用已签名或未签名的程序集;而已签名的主程序不能引用未签名的程序集。(上述文章有相应解决办法)

混淆
混淆就是对编译生成的MSIL中间代码进行模糊处理,最简单的混淆是名称混淆,即将 命名空间名、类名、方法名、字段名等统统换成特殊符号或其它符号,目的就是让人看到晕为止,但是并不改变程序执行逻辑。
我这里使用的Dotfuscator进行混淆。
Dotfuscator混淆方法
1.创建新工程,如下图所示:

2.选择要混淆的dll、exe文件,如下图所示

  

3.在属性里选择Library属性(很重要,因为我这里要混淆的是dll文件,如果不选中,混淆后将不能被正确调用!),如下图所示:

4.选择bulid标签,点击bulid按钮进行混淆。

我们也可以选择其它标签进行加密字符串、增加水印等操作,我这里加密工作用另外的方法,所以没有选择操作。
OK,混淆完成后,我们可以用Reflector.exe来反编译下混淆后的dll文件,可以对比源码看下效果。

 
加密
接下来我们继续对混淆过的dll文件进行加密处理,进一步保护dll文件。
我使用的加密工具是MaxtoCode。
打开软件后,切换到中文,可以看到非常简单,添加上dll文件后,直接点击执行加密就可以。其他选项比如:加密字符串、强名称等都很简单,大家一试就知道,而且MaxtoCode的帮助做的非常友好,一看就会使用。
加密后的dll文件比先前大了一倍,用Reflector.exe反编译后,发现dll文件加密的更彻底,因为主体函数内容都隐藏了。
 
通过以上三步,使您的dll文件可免于一般人的破解,当然,不可能绝对防止被破解。

保护.net中的dll文件方法(防止破解、反编译dll)

.net是一种建立在虚拟机上执行的语言,它直接生成 MSIL 的中间语言,再由.net编译器 JIT 解释映象为本机代码并交付CPU执行。中间语言很容易被反编译,所以研究下如何有效的保护dll文件...
  • Road2010
  • Road2010
  • 2014年09月17日 17:23
  • 2326

如何对.net的dll文件进行反编译?

C#是一种安全的、稳定的、简单的、优雅的,由C和C++衍生出来的面向对象的编程语言。它在继承C和C++强大功能的同时去掉了一些它们的复杂特性(例如没有宏以及不允许多重继承)。 主要功能:可以...
  • u011628795
  • u011628795
  • 2015年10月09日 21:08
  • 235

.net dll或者exe避免被反编译的方法

1. 使用商业版混淆器软件 2. 核心代码用C++封装dll,提供给.net 调用
  • qq_20161893
  • qq_20161893
  • 2018年01月06日 13:26
  • 132

用Reflector for .NET反编译dll文件(.net)

用Reflector for .NET反编译dll文件(.net),把整个dll导出个cs插件   Reflector for .NET 下载地址:http://www.aisto.com/r...
  • rosefly110
  • rosefly110
  • 2014年10月20日 22:18
  • 3022

针对DLL的网站授权License破解方法

有很多Asp.Net制作的网站,每年都需要授权。如果破解授权呢。本文将一步步的操作。 以下内容只是作者兴趣所致,不代表任何立场。 一般而言,License文件是一个加密文件,通过bin下面的DLL...
  • wdx1632
  • wdx1632
  • 2014年09月04日 23:39
  • 3353

轻松反编译C#的DLL

dotPeek
  • mseol
  • mseol
  • 2017年01月12日 20:43
  • 4366

几种工具反编译被编译好的DLL文件

我们平时在工作中经常会遇到一些已经被编译后的DLL,而且更加麻烦是没有源代码可以进行修改,只能针对这个DLL的文件进行修改才能得到我们想要的结果;本文将通过一个实例来演示如果完成一个简单的修改;我们将...
  • hr541659660
  • hr541659660
  • 2017年01月17日 11:09
  • 3287

使用VS自带的混淆器(dotfuscator)防止你的程序被反编译

使用VS自带的混淆器(dotfuscator)防止你的程序被反编译         在上篇文章:《保护你的DLL和Code不被别人使用》。 虽然能使你的代码不被别人直接引用,但却阻止不了使...
  • CsethCRM
  • CsethCRM
  • 2013年02月28日 11:15
  • 2189

防止.NET程序集被破解办法

.net是一种建立在虚拟机上执行的语言,它直接生成 MSIL 的中间语言,再由.net编译器 JIT 解释映象为本机代码并交付CPU执行。中间语言很容易被反编译,所以研究下如何有效的保护dll文件。 ...
  • pengfeixiong
  • pengfeixiong
  • 2014年01月21日 12:55
  • 1442

如何保护.net中的dll文件(防破解、反编译)

.net是一种建立在虚拟机上执行的语言,它直接生成 MSIL 的中间语言,再由.net编译器 JIT 解释映象为本机代码并交付CPU执行。中间语言很容易被反编译,所以研究下如何有效的保护dll文件。 ...
  • liaoyukun111
  • liaoyukun111
  • 2010年08月10日 09:06
  • 3912
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何保护.net中的dll文件(防止破解、反编译dll)
举报原因:
原因补充:

(最多只允许输入30个字)