保护你Asp.Net生成的DLL和Code不被别人反编译
 
 
大家做项目开发一般都是分层的,比如UI层,业务层,数据访问层。业务层引用数据访问层的DLL(比如

dataAccess.dll),并使用dataAccess.dll中的方法。当项目完成并给客户用了,可有些心里BT的客户这

个时候也可以请个稍微懂NET的人来引用你的dataAccess.dll并调用其中的方法搞破坏。比如可以直接使

用里面的ChangePwd(string UserName,string Pwd)方法把其他用户的密码改了,这个时候就你就.......

好了,该开始说怎么保护我们的代码了:

首先我们需要把我们的程序集做成强命名的程序集。

这里我们在.NET 命令提示中输入sn -k c:\test.snk 创建一个新的随机密钥对并将其存储在

c:\test.snk 中

然后新建立类库ClassLibrary1,里面只有个类文件Class1.cs,代码如下:

程序代码
using System;

namespace ClassLibrary1
{
public class Class1
{
public Class1()
{
//
// TODO: 在此处添加构造函数逻辑
//
}

public string Insert()
{
return "ok";
}
}
}

AssemblyInfo.cs代码:
//............其他的就用默认
[assembly: AssemblyKeyFile("c:\\test.snk")] // 连接上面用强命名工具SN.exe生成的文件.

接着创建个WindowApplication来调用我们的ClassLibrary1,代码:

程序代码
private void button1_Click(object sender, System.EventArgs e)
{
MessageBox.Show(new ClassLibrary1.Class1().Insert());
}

不修改WindowApplication的AssemblyInfo.cs。
在这里就可以直接运行了,不过大家都看的出来,这样是能成功调用Class1中的方法的。

现在让我们来修改下Class1.cs,代码:

程序代码
using System;
using System.Security.Permissions;

namespace ClassLibrary1
{
[StrongNameIdentityPermissionAttribute(SecurityAction.LinkDemand, PublicKey =
"00240000048000009400000006020000002400005253413100040000010001000551684edd1600"+
"8ccbdd337b1cf1490490d97fe0048c5f3629cc4f5104578499eace9b2a94115022edd620def472"+
"8b4f088291cfa77a40659afba611fdafbb7894b93a64049d439936bd0cd8dc0704625aeb735892"+
"e9eb3f910a49a2925af10515d935654d7adac5567ff6d780d23d587de0ff4d271da7b30680fa88"+
"a47a4ba4")]
public class Class1
{
public Class1()
{
//
// TODO: 在此处添加构造函数逻辑
//
}

public string Insert()
{
return "ok";
}
}
}

然后再编译后运行windowapplication调用class1中的方法就会出错。

这里的StrongNameIdentityPermissionAttribute是NET提供的CAS(Code Access Security)中的1个类,具

体可参考MSDN,SecurityAction.LinkDemand 是要求直接调用方已被授予了指定的权限,这里即

windowapplication要授予了权限才行,如果使用SecurityAction.Demand要求调用堆栈中的所有高级调用

方都已被授予了当前权限对象所指定的权限。他们的区别是:如果windowapplication已授权访问,而还

有个windowapplication2(未授权访问)通过调用windowapplication中的button1_Click方法来调用class1

,这个时候如果使用SecurityAction.LinkDemand就能成功调用,而使用SecurityAction.Demand

windowapplication2就不能调用,windowapplication 在这2种情况下都能调用。

说到这里大家一定再问PublicKey=后面一串那么长的字符串怎么来。PublicKey后面的字符串是你开始生

成的c:\test.snk文件中保存的公钥。那怎么才能看到这个公钥了,照样是用SN.EXE。

输入sn -p c:\test.snk c:\publicKey.snk (从 test.snk 中提取公钥并将其存储在 publicKey.snk 中)

再输入sn -tp c:\publicKey.snk (显示公钥信息)
上面这个命令就能看到PublicKey后面的字符串了,还想什么啊,把那字符串copy下来啊。

最后大家一定在关心这个时候windowapplication 要怎么调用class1了,其实也简单,只要把

windowapplication 的AssemblyInfo.cs修改为:
[assembly: AssemblyKeyFile("c:\\test.snk")]

到这里就一切OK了,大家都看到最关键的就是test.snk文件了,所以一定要保护好你自己的test.snk文件

.NET的Snk使用方法相关推荐

  1. java 运行异常处理_Java编程异常处理和I/O流

    重点: 1.在编写程序时,要正确地使用捕获例外和声明抛出异常的两种例外处理的方法. 2.遇到实际问题时,要根据需要正确使用各种输入/输出流,特别是对中文使用适当的字符输入流. 3.正确使用对象串行化的 ...

  2. 在 Oracle Enterprise Linux 和 iSCSI 上构建您自己的 Oracle RAC 11g 集群

    作者:Jeffrey Hunter 了解如何以低于 2,700 美元的费用在 Oracle Enterprise Linux 上安装并配置 Oracle RAC 11g 第 2 版开发集群. 本指南中 ...

  3. Java面试题大全2021版

    一.Java 基础 JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境. JRE:Java Run ...

  4. .Net 程序集 签名工具sn.exe 密钥对SNK文件 最基本的用法

    .Net 程序集 签名工具sn.exe 密钥对SNK文件 最基本的用法 阐述签名工具这个概念之前,我先说说它不是什么: 1.它不是用于给程序集加密的工具,它与阻止Reflector或ILSpy对程序集 ...

  5. graphpad如何检测方差齐_如何选择方差分析中“多重比较”的方法?

    很多朋友希望推荐一些学习SPSS的书籍,以便系统学习统计学知识.现推荐几本书,也是我经常参考学习的,供大家参考选购. 下面开始今天的正文: 对于多个组之间的对比分析,方差分析表中如果显示差异具有统计学 ...

  6. graphpad如何检测方差齐_如何选择方差分析的多重比较方法?资料集锦

    欢迎订阅SPSS训练营号 方差分析时,如果因素主效应有显著影响,则需要对因素水平进行两两比较,以确认因素水平间的具体差异. 这个过程也叫作多重比较. SPSS提供14种用于方差齐次的多重比较方法,还有 ...

  7. c 的dll php调用方法,PHP调用C#开发的dll类库方法,_PHP教程

    PHP调用C#开发的dll类库方法, 有的时候,我们需要在php中利用到其他语言编写的dll类库,如C#编写的dll,方法就是利用PHP new COM方法来调用,在调用之前先要把dll库注册并把程序 ...

  8. VS2005 中关于“LC.EXE已退出,代码为 -1”的错误解决方法。

    最近在用VS2005做东西时遇到一个比较莫名的问题,当在自己的解决方案中引用了一系列的第三方软件或者控件后,当我获取了整个程序的最新版本,对整个工程再在本地进行编译会出现"LC.EXE已退出 ...

  9. EB-Boost :智慧景区共享单车中长期投放量精准预测方法

    EB-Boost :智慧景区共享单车中长期投放量精准预测方法 ABSTRACT 目前,共享单车已成为景区交通的重要组成部分.共享单车改变了过去景区交通产品和供给主体单一的问题,增加了游客出行消费选择. ...

最新文章

  1. 测试和恢复性的争论:面向对象vs.函数式编程
  2. 戴尔 成铭3980台式计算机,能文能武!戴尔成铭3980商用台式机评测
  3. c#中已知一个外部窗口的句柄,怎么关闭
  4. linux交叉编译无法识别gcc编译器
  5. Maven精选系列--POM文件解析
  6. 预览docx_Windows-快速预览文件-QuickLook
  7. 4.11_facade_结构型模式:外观模式
  8. bzoj4987: Tree(树形dp)
  9. Yandex安装插件实现百度网盘不需要会员就能倍速播放
  10. FileUpload上传过大文件异常
  11. 如何解决360的导航一直绑定为首页(亲测有效)
  12. 使用Breed为极路由4增强版(B70-HC5962)刷老毛Padavan固件,配置Nginx代理SSH内网映射
  13. 开通支付宝口碑收款码提现免手续费,信用卡转账秒到支付宝
  14. mysql查询周数_MySQL根据年份的周数获取该周起始时间
  15. Python + 批量裁剪图片
  16. 初探视频原理和FFmpeg
  17. OfficeMalScanner(宏病毒分析)软件分享,绝对免费!
  18. kaggle篇章二,新手入门泰坦尼克号的幸存者预测实验的超详细全过程记录
  19. 碱基序列的最长公共子串(Finding a Shared Motif)
  20. linux防火墙禁用web和smb,samba服务器需要关闭防火墙和selinux

热门文章

  1. 收集bug开源框架_划重点 | 小程序框架全面测评
  2. android queue用法,GitHub - rygz146/TQueue: Android 可以任意切换线程的任务队列, TQueue
  3. c语言在一个文件后面添加数据类型,c语言简单入门之简单运行和数据类型
  4. mongodb 数字 _id_MongoDB学习笔记MongoDB简介及数据类型
  5. 小学计算机教案设计ppt,小学信息技术《PowerPoint制做教案》ppt教案.ppt
  6. python处理nc文件并输出_利用python如何处理nc数据详解
  7. 485通信自动收发电路,历史上最详细的解释
  8. 单片机开发与Linux开发有何不同?
  9. HDLBits答案(9)_卡诺图与最简SOP式
  10. verilog正弦电压PWM波产生