.Net下的签名与混淆图文分析

签名

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

签名前后程序集结构对比

假设程序集名子叫"WindowsApplication1",签名前后程序集信息对比


代码如下:

WindowsApplication1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
WindowsApplication1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=85377e8b68475fc8

如果项目中引用了一个已签名的程序集a.dll,而遭到一伪造的a.dll来偷梁换柱,此时主程序调用时就会产生异常

未签名的主程序可以引用已签名或未签名的程序集;而已签名的主程序不能引用未签名的程序集。

对程序集强签名后就有了唯一标识,就可以在程序中得知程序集的来路了,可以获取当前执行的程序集信息或调用程序集信息,见:


代码如下:

System.Reflection.Assembly.GetExecutingAssembly()
System.Reflection.Assembly.GetCallingAssembly()

如何生成密钥及签名,可使用.net sdk里的sn.exe命令行工具;或者visual studio里的项目--属性--签名

密钥如果有密码保护,则生成pfx文件,没有密码生成snk文件,pfx比snk文件较大些;

混淆

对编译生成的MSIL中间代码进行模糊处理,随着混淆的加重,人脑进行多方面智力思维的能力逐渐降低,保护源代码以提高反编译的难度。这种模糊处理并不改变程序执行的逻辑。

混淆的工具有很多:如DotFuscator、Obfuscator.NET、 XeonCode、 MaxtoCode

两者兼并

既对程序集签名又做混淆处理也是可以的,而强命名后的程序集如果做混淆会产生异常,程序也无法正常执行。正确的做法的:

延迟签名 -- 开发完成 -- 混淆 -- 重新签名  (即先延迟签名,混淆后再签名)

混淆后再签名,可以使用sn里的R选项完成


代码如下:

sn -R a.exe mykey.snk //使用mykey.snk密钥对a.exe重新签名

延迟签名(重新签名以前)程序不能运行的,如在.net cf会报异常
团队开发中不能每个人都知道私钥,一般的做法是创建一个包含公钥部分的.snk文件。


代码如下:

sn - p mykey.snk publicKey.snk

publicKey.snk给开发人员使用,开发完发布时用mykey.snk重新签名。

(0)

相关推荐

  • Asp.Net类型转换类(通用类)代码分享

    废话不多说了,直接给大家贴代码了,具体代码如下所述: /// <summary> /// 类型转换类 /// 处理数据库获取字段为空的情况 /// </summary> public static class DBConvert { #region------------------ToInt32类型转换------------------ /// <summary> /// 读取数据库中字符串并转换成Int32 /// 为空时返回0 /// </summary&

  • asp.net 数字签名实例代码

    A给B发送信息,A会将信息用A的密码进行加密,然后将加密后的字符串和原文一起发给B,然后B用B的密码进行解密,然后判断解密后的字符串和A发过来的原文比对是否一致,关键问题在于, A和密码和B的密码不一样,这个才是数字签名的精华,A的密码就是私钥,B的密码就是公钥 具体步骤: 生成一个私钥和公钥,A就用私钥进行加密,因为A的私钥只有A自己有,所以加密后的字符串就是A的签名字符串,然后A将这个签名的字符串和原文发给B, B获取加密的字符串用公钥进行解密,然后判断解密后的字符串和原文是否一致,一致说明

  • .Net下的签名与混淆图文分析

    签名 即强命名程序集,可以确保你的程序集唯一,而不被篡改.冒用等:即使相同名字的程序集如果签名也会不同. 签名前后程序集结构对比 假设程序集名子叫"WindowsApplication1",签名前后程序集信息对比 复制代码 代码如下: WindowsApplication1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=nullWindowsApplication1, Version=1.0.0.0, Culture=neutral

  • Windows环境下的MYSQL5.7配置文件定位图文分析

    1.MYSQL安装目录 复制代码 代码如下: select @@basedir; 2.MYSQL数据文件目录 复制代码 代码如下: select @@datadir; 3.相应地,配置文件在数据文件上一级目录中 4.停止MYSQL服务 复制代码 代码如下: net stop 本机mysql服务名 5.启动MYSQL服务 复制代码 代码如下: net start 本机mysql服务名 6.配置参数max_allowed_packet 客户端/服务器之间通信的缓存区的最大大小,默认是4M 7.配置参

  • Java图文分析之继承内存布局

    目录 一.初步了解继承的内存布局 (1) 继承内存布局初探 (2) Object 类 (3) 同名的成员变量 二.更复杂的继承的内存布局 一.初步了解继承的内存布局 (1) 继承内存布局初探 看下面拥有继承关系的代码,并画出内存布局图: public class Person { public int age; public void smile() { System.out.println("Person_smile()_age_" + age); } } class Student

  • win10环境下python3.5安装步骤图文教程

    点我去Python官网下载 往下翻几页就能看到各种版本的Python,当前最新的是Python3.6,也没多大区别,我选择的是3.5.2 64位的,点击download 根据自己的电脑配置,我选择的是64位的 一路默认下去吧! 安装成功!下面打开命令提示符,输入python,回车如下图一样就安装成功啦! 以上所述是小编给大家介绍的win10环境下python3.5安装步骤图文教程,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的.在此也非常感谢大家对我们网站的支持!

  • ubuntu16.04下vim安装失败的原因分析及解决方案

    先给大家说下问题描述? 重装了ubuntu系统,安装vim出现了以下问题: sudo apt-get install vim 正在读取软件包列表... 完成 正在分析软件包的依赖关系树 正在读取状态信息... 完成 有一些软件包无法被安装.如果您用的是 unstable 发行版,这也许是 因为系统无法达到您要求的状态造成的.该版本中可能会有一些您需要的软件 包尚未被创建或是它们已被从新到(Incoming)目录移出. 下列信息可能会对解决问题有所帮助: 下列软件包有未满足的依赖关系: vim :

  • windows下的WAMP环境搭建图文教程(推荐)

    本篇文章主要是讲一下我自己安装wamp环境的一些步骤和见解,前方多图预警,慎入!!!!! PHP运行环境 : Linux下的三种安装方式:源码包安装.rpm包安装.集成环境安装(lnmp) windows安装的两种方式:单个下载安装.集成环境安装(AppServ,phpstudy,wamp) 在Windows系统上安装PHP开发环境: 所需软件分别独立安装: 安装前准备 安装Apache 安装MySQL 安装PHP 安装phpMyA 软件名称 下载地址 Apache下载 http://httpd

  • ubuntu16.04.1下 mysql安装和卸载图文教程

     删除 MySQL sudo apt-get autoremove --purge mysql-server-* sudo apt-get remove mysql-server sudo apt-get autoremove mysql-server sudo apt-get remove mysql-common 清理残留数据 dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P 安装mysql 安装服务: 安装客户端: 安装完成后,M

  • Windows10下安装Docker的步骤图文教程

    本文主要是记录吾本人在Windows10下安装Docker的过程,当然这些步骤也是在网上搜索查阅资料得知而来的!具体步骤如下: 一.启用Hyper-V 打开控制面板 - 程序和功能 - 启用或关闭Windows功能,勾选Hyper-V,然后点击确定即可,如图: 点击确定后,启用完毕会提示重启系统,我们可以稍后再重启. 二.安装Docker Docker下载地址为:https://store.docker.com/editions/community/docker-ce-desktop-windo

  • Windows 7下Python Web环境搭建图文教程

    最近想尝试一下在IBM Bluemix上使用Python语言创建Web应用程序,所以需要在本地搭建Python Web的开发测试环境. 关于Python的版本 进入Python的网站,鼠标移到导航条上的下载,我们会发现提供两下主版本的下载链接! 这两个之间存在什么差别呢? 个人理解,2.7.x的版本为更加稳定的版本,而3.x的版本则是比较前卫的版本,包含了很多新功能新特性之类的: 但如果想要用Python开发一个新项目,那么该如何选择Python版本呢?大部分Python库都同时支持Python

  • windows10下python3.5 pip3安装图文教程

    最近Google官方的开发者博客中宣布新的版本Tensorflow(0.12)将增加对Windows的支持,想试着windows10下学习tensorflow,之前已经安装anaconda2(python2.7),怕安装python3.5会冲突,但还是想试一下,最终成功. 下载地址:官网地址 这是我下载的当前 python 3.x 最新版本的安装包 安装python 3.x 此处选择自定义安装,因为要修改默认安装位置.另外这里勾选了 "Add Python 3.5 to PATH" 选

随机推荐