任何时候,软件安全与版权保护都是很重要的,特别是企业级开发或一些特殊应用方面。对.NET平台下的开发如何做到安全,本文主要讨论签名与混淆和原理与思路。

签名

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

签名前后程序集结构对比

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

WindowsApplication1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=nullWindowsApplication1, 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重新签名。

转载于:https://www.cnblogs.com/develop/p/3543894.html

.Net下的签名与混淆相关推荐

  1. linux 下 c++ 实现 netstat_Linux下基于签名技术的软件保护之实现流程

    2.1 软件总体流程 在信息安全中,安全通信需要具有以下三个特性[8].①机密性,仅有发送者和接受者能够理解传送信息的含义,保证信息在传输时不被泄露.②完整性,需要确保信息在传输过程中不被篡改.③有效 ...

  2. Android apk 安全措施详细说明(签名、混淆、加固、H5安全方案)

    文章简介:当一个Android app 开发完成后,我们总是希望对app进行一些安全措施,防止自己开发的apk被别人二次打包和签名上传到应用市场,同时防止apk被别人拿到之后进行反编译进行二次开发.那 ...

  3. android微信第三方登陆混淆,基于微信api Android程序签名+代码混淆

    微信开放平台真是独特啊!!! 微信的ap调用确实别新浪微博,人人,QQ互联这些方便很多,也不用判断绑定什么的,让人眼前一亮.但是到代码混淆这一步,我真瞎了,网上关于微信签名混淆资料讲的让人摸不着头脑, ...

  4. C#下ECDsa签名、验签

    因为业务需要,与第三方对接时,第三方签名方法居然采用的ECDsa,而不是更常见的RSA.MD5之类,真是不走寻常路,当然我是不会承认是我见识太少的!!! 麻利的让对方提供了签名算法代码,奈何对方是ja ...

  5. MacOS下qt签名与公证

    签名以及公证参考 简书参考 一.证书查看 security find-identity -p codesigning 二.签名 codesign -f -o runtime --timestamp - ...

  6. Unity unsigned(debug) 模式下的签名理解

    用unity打包apk时,通常渠道都会进行二次签名,因此经常有人选择签名时用Unity unsigned(debug) 模式,但是也有部分渠道不会去重新签名(比如360),这个时候每次更新包,就必须用 ...

  7. MAC下 Android签名生成keystore

    1.生成证书 在终端输入 keytool -genkey -v -keystore android.keystore -alias android -keyalg RSA -validity 2000 ...

  8. linux系统下ipa签名,安装isign 自动签名ipa包

    #centos7 安装 isign #centos应该自带python和openssl,这两个就不用装了,先安装zip和git yum install -y unzip zip yum install ...

  9. android rom签名 作用,Ubuntu下折腾Android笔记(一)——ROM 签名 | 翅膀~

    2010.8.30 UPDATE:java环境的配置也可以直接使用openjdk,打开终端 sudo apt-get install openjdk-6-jre 就可以了. ------------- ...

最新文章

  1. Eight puzzle --HOJ 11918
  2. bootstrap-datetimepicker bootstrap-datepicker bootstrap-timepicker 时间插件
  3. java接口签名(Signature)实现方案续
  4. PHP框架 CI与TP之MVC比较
  5. 干不过微信,又抢钉钉地盘!中移动砸下 8400 万重做飞信
  6. 中科大博士写外挂被抓:涉案总牟利 300 多万,每月分得 4~6k
  7. 并发编程学习之线程8锁
  8. 《Qt基础教程之Qt学习之路》
  9. iframe中加载html页面,jQuery - 动态创建iframe并加载页面
  10. SpringBoot整合MyBatis(七)
  11. itext文本域自动换行_itextpdf生成pdf问题汇总
  12. java.lang.ArithmeticException: Division undefined
  13. macOS 开发 - 使用 ScreenSaverView 制作屏幕保护程序
  14. React使用iconfont阿里巴巴矢量图库
  15. 【JS】问题——解决JS文件页面更新不生效问题
  16. linux之if语句详解
  17. IDEA 2019.1 注册码激活
  18. 使用python调用nmap模块实现端口扫描
  19. 家用宽带搭建个人服务器(二)
  20. 查看进程及结束进程命令

热门文章

  1. Openlayers中将某个feature置于最上层
  2. 信息系统项目管理师-项目成熟度模型、量化项目管理核心知识点思维脑图
  3. Android中使用Canvas和Paint绘制一个安卓机器人
  4. Ubuntu Server 16.04 LTS上给Docker配置镜像加速器
  5. Java中使用递归算法实现子级架构的查询
  6. EasyUI中分页的简单使用
  7. Sqlserver中格式化日期作为查询条件的语句写法
  8. Ecplise中怎样进行全局搜索
  9. java垃圾回收算法超详细全解
  10. 数据库系统概念总结:第二章 关系模型介绍