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. INNOBACKUPEX热备MYSQL数据

    http://www.databaseclub.com/2014/11/innobackupex/ 1)对MySQL进行全备份1.备份数据   1 innobackupex --user=userna ...

  2. Keeplived 配制图解

    http://blog.csdn.net/tantexian/article/details/50056229

  3. linux后端运行

    程序命令 & :将命令放入后台运行. Ctrl + z : 把一个正在运行的前端命令转移到后台运行,它等效于:程序命令 & :这样虽然把程序放在了后端运行,但是此时程序状态为暂停状态, ...

  4. 解决Kscope中文乱码问题

    当安装Kscope完成后,然后配置以下三个路径:Cscope path:/usr/bin/cscopeCtags path:/usr/bin/ctagsDot path:/usr/bin/dot 对于 ...

  5. visual studio 2013 c++ 打开code map 功能

    属性->c++ -> Browse Infomation -> Enable Browse Infomation设为true http://msdn.microsoft.com/li ...

  6. PHP.6-PHP环境搭建(Windows环境下)-LAMP

    PHP环境搭建(Windows环境下)-LAMP Windows系统上分别独立安装Apache2.PHP5.MySQL5和phpMyAdmin等几个软件.独立安装的好处是可以自由选择这些组件的具体版本 ...

  7. 在vs中跑动ransac

    期间遇到很多问题. 记一个最主要的是: LINK2019 无法识别的外部符号,然后某一个函数的函数名 然后是 @@函数名 (@) 大概长成这样.或者还就根本就是 无法识别的外部符号. 解决方案: 我这 ...

  8. Log4Net(三)之记录日志到数据库

    前面两篇短文向大家介绍了如何使用log4net,以及如何将log4net记录到文本文件中.下面本文将向大家介绍如何将log4net记录到数据库中. 经过前面的介绍,我想大家对使用log4net的过程已 ...

  9. python基础语法小笔记

    这几天看着python,然后就记下一些自己觉得需要注意以下的基础语法吧! 如下: for i in range(0,100)表示从0到99,不包括后边界 单引号(')和双引号("" ...

  10. CF Exam (数学)

     Exam time limit per test 1 second memory limit per test 256 megabytes input standard input output s ...