<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<head><meta forua="true" http-equiv="Cache-Control" content="max-age=0" /></head>
<card title="保护.net(c#)中的dll文件(防止破解、反编译dll)" id="card1">
<p> 游客</p><p>
标题:保护.net(c#)中的dll文件(防止破解、反编译dll)<br/>
正文:<br/>
.net是一种建立在虚拟机上执行的语言，它直接生成 MSIL 的中间语言，再由.net编译器 JIT 解释映象为本机代码并交付CPU执行。中间语言很容易被反编译，所以研究下如何有效的保护dll文件。我大致的方法为 ：强签名+混淆+加密。强签名强命名程序集，可以确保你的程序集唯一，而不被篡改、冒用等；即使相同名字的程序集如果签名也会不同。强签名很简单为项目添加强名称方法：1.右键单击项目，打开属性窗口;2.在属性窗口里选择《签名》标签，选中为程序集签名的选项，在下拉列表里选择新建,如下图所示：3.打开新建签名窗口，输入签名的名称密码等内容，如下图所示：  单击确定后，签名添加完成。 为没有源码的DLL文件添加强名称 如果项目中引用了其他没有源码的dll文件，并且此dll文件是没有强名称的程序集，则编译时会出现类似 &amp;quot;Assembly generation failed -- 引用的程序集 ’xxxxxxxxxxx’ 没有强名称&amp;quot; 这样的错误。我这里引用的是Interop.Scripting.dll程序集，它不是强名称的，则需要进行以下操作：1.打开SDK 命令提示窗口; 2.创建一个新的随机密钥对:sn -k Interop.Scripting.snk3.反编译目标程序集ildasm Interop.Scripting.dll /out=Interop.Scripting.il3.重新编译，附带强命名参数ilasm Interop.Scripting.il /dll /resource=Interop.Scripting.res /key=Interop.Scripting.snk /optimize4.验证签名信息sn -v Interop.Scripting.dllOK,将生成的dll文件重新引入到项目中然后编译。注：未签名的主程序可以引用已签名或未签名的程序集；而已签名的主程序不能引用未签名的程序集。(上述文章有相应解决办法)混淆混淆就是对编译生成的MSIL中间代码进行模糊处理，最简单的混淆是名称混淆，即将 命名空间名、类名、方法名、字段名等统统换成特殊符号或其它符号，目的就是让人看到晕为止，但是并不改变程序执行逻辑。我这里使用的Dotfuscator进行混淆。Dotfuscator混淆方法：<br/><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=139&amp;Page=1">[&lt;&lt;]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=139&amp;Page=1">[[1]]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=139&amp;Page=2">[2]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=139&amp;Page=2">[&gt;&gt;]</a><br/>
<br/>
<a href="wap.asp?act=Com&amp;id=139">查看评论(0)</a><br/>
<a href="wap.asp?act=AddCom&amp;inpId=139">发表评论</a><br/><br/>

<br/>

<br/>
<a href="http://camnpr.com/wap.asp">首页</a>
</p>
</card>
</wml>