1、首先要创建一个密钥文件(*.snk)

打开VS的命令行工具,输入命令:sn -k f:\PublicKey.snk。按回车键命令行会自动生成一个密钥文件。

f:\  —— 是密钥文件输出的位置,这个可以自己设置,如果不添加,密钥文件则会自动生成在命令提示行的根文件夹下

PublicKey —— 是密钥的文件的文件名,可以自己随意起名字

2、为项目添加密钥文件

3、设置DLL中所有类的修饰符

DLL所有的类,除了单独留下一个修饰符为 public 完全公开的类,作为公共出口,其余的类的修饰符全部更改为 internal 仅程序集可见

4、为程序集唯一的公共类添加校验方法

该程序集中,所有类包含的对外方法,都要通过唯一公共类来进行调用,要注意的是,该公共类中所有的方法和属性等,

不能是静态的。而校验密钥的方法,则放在该公共类的构造函数当中。

公共密钥里的“公共密钥标记”和“公共密钥”可以通过在这个方法里加入断点查看(也可以使用VS命令行来获得),然后

在经过MD5加密后,得到密钥和密钥标记,并设置为常量。

将该程序集生成为DLL,并使用代码混淆软件进行混淆(注意:如果程序集中有涉及到序列化和反序列化,请不要使用代码

混淆软件,因为程序集中有序列化和反序列化的应用,使用代码混淆软件混淆后,有可能使应用到序列化和反序列化的地方

出现异常或不可预知的错误)。

总结、如此设置后,只要调用该DLL的项目没有添加指定的密钥文件,基本上就无法使用该DLL文件中的任何方法。当然凡事

并不绝对,这样做只能是让没有得到授权的用户使用该程序集生成的DLL的使用成本大大提高罢了。任何的加密方法也不能说

是百分之百安全。这是本人的一点愚见,如有遗漏或错误,还请指正。

防止非授权用户调用DLL的更多相关文章

  1. C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 增强服务安全、阻止非授权的用户非法调用

    多一道防线,多一些安全保障,当程序发布到互联网上,再有成千上万的用户在用,总会有各种牛人出现,万一遇到破坏分子,那会有灾难性的打击. 只要跟利益有关系的,跟资金有关系,跟财务有关系,有竞争对手,软件系 ...

  2. (转)C#调用非托管Win 32 DLL

    转载学习收藏,原文地址http://www.cnblogs.com/mywebname/articles/2291876.html 背景 在项目过程中,有时候你需要调用非C#编写的DLL文件,尤其在使 ...

  3. Docker 为非root用户授权

    Docker 为非root用户授权: 当运行docker pull busybox时候,会提示sky用户无法调用docker. 那么应该把sky用户加入docker用户组,不过在添加的时候,又提示了如 ...

  4. oracle 非sys用户创建新用户 授权后 plsql看不到视图

     问题: oracle 非sys用户创建新用户 授权后  plsql看不到视图 答案: 新用户查询视图时,视图名称前需要添加 视图所属用户. 如user用户新建newUser用户,newUser用户查 ...

  5. centos7新增用户并授权root权限、非root用户启动tomcat程序

    一.centos7新增用户并授权root权限 cat /etc/redhat-release查看centos版本号 1.禁用root账户登录 vim /etc/ssh/sshd_config 找到这一 ...

  6. 非root用户安装软件

    下面简要说一下Linux下非root用户安装软件的一般流程: 1. 获取源代码,一般是wget方式,ubuntu可以使用apt-get source来获取源代码. 2. 解压源代码,一般使用tar - ...

  7. LabVIEW如何方便地调用DLL文件

    转自:http://bbs.elecfans.com/jishu_469502_1_1.html   LabVIEW调用DLL文件 LabVIEW支持通过调用DLL文件的方式与其它编程语言混合使用.比 ...

  8. 如何使用g++编译调用dll的c++代码

    本文将有以下4个部分来讲如何使用g++编译调用dll的c++代码. 1.如何调用dll 2.动态链接和静态链接的区别 3.g++的编译参数以及如何编译调用dll的c++代码 4.总结 1.如何调用dl ...

  9. c# 调取 c++ dll____c#调用dll

    1.以海康摄像头dll为例.(文章转载https://www.cnblogs.com/smartsensor/p/4343744.html) 海康SDK编程指南 目前使用的海康SDK包括IPC_SDK ...

随机推荐

  1. JavaScript eval() Function

    Evaluate/Execute JavaScript code/expressions: Example var x = 10;var y = 20;var a = eval("x * y ...

  2. Computer Science Theory for the Information Age-6: 学习理论——VC定理的证明

    VC定理的证明 本文讨论VC理论的证明,其主要内容就是证明VC理论的两个定理,所以内容非常的枯燥,但对于充实一下自己的理论知识也是有帮助的.另外,VC理论属于比较难也比较抽象的知识,所以我总结的这些证 ...

  3. Linux下*.tar.bz2等文件如何解压--转

    如果tar不支持j这个参数就先用 bzip2 -d xxx.tar.bz2 把它解压成.tar文件,然后再用 tar xvf xxx.tar 拆包.压缩解压 linux下怎么解后缀名是gzip的文件? ...

  4. 探索 ConcurrentHashMap 高并发性的实现机制--转

    ConcurrentHashMap 是 Java concurrent 包的重要成员.本文将结合 Java 内存模型,来分析 ConcurrentHashMap 的 JDK 源代码.通过本文,读者将了 ...

  5. Window Pains

    http://poj.org/problem?id=2585 Window Pains Time Limit: 1000MS   Memory Limit: 65536K Total Submissi ...

  6. swift 中异常的处理方法

    swift 中什么时候需要处理异常,在调用系统某个方法的时,该方法最后有一个throws 说明该方法会抛出异常,如果一个方法抛出异常,那么需要对该异常进行处理 swift 异常处理提供了三种方法 方式 ...

  7. Mac OS X Yosemite 10.10 配置 Apache+PHP 教程注意事项

    刚更新到了 Mac OS X Yosemite 10.10,发现运行Apache出现了一些问题,修正一下! 教程基于 Mac OS X Mavericks 10.9.X,移步:Mac OS X Mav ...

  8. javaweb学习总结三(枚举)

    一:枚举的概念 定义特定的数据,尤其像一些状态位. 二:定义枚举类 1:定义枚举,其中Grade枚举可以看做类,A.B.C.D.E可以看做对象,因为它定义了有参数的构造方法,所以 对象后面必须带参数. ...

  9. 实现TableLayout布局下循环取出TableRow控件中的文字内容到list集合

    布局方式为TableLayout,利于实现表单样式展现. <!-- 详情内容区域 --> <ScrollView android:layout_above="@id/id_ ...

  10. 大表 update 方式

    -- declare cursor cur_t is ; type tab_t is table of urowid index by binary_integer; l_rid tab_t; beg ...