当前位置: 首页 > news >正文

.Net下的签名与混淆

任何时候,软件安全与版权保护都是很重要的,特别是企业级开发或一些特殊应用方面。对.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重新签名。

 

标签:签名,混淆,强命名程序集,混淆后签名
http:
//www.cnblogs.com/chy710

 

本文转自chy710博客园博客,原文链接:http://www.cnblogs.com/chy710/archive/2008/11/20/1337746.html ,如需转载请自行联系原作者

相关文章:

  • PHP $_SERVER详解
  • 人工智能+医疗 未来医生真的会失业吗
  • 企业如何实施物联网解决方案
  • Learning JQuery(一)
  • [转载]项目风险管理七种武器之结语
  • 构建Xamarin.Forms NuGet
  • 基于Android客户端的人人网开放平台开发系列教程 (有源码哦)
  • UGUI精灵图片实现图片裁剪
  • 26、C#里面标签的属性和事件
  • 广义线性模型
  • Python socket服务器端、客户端传送信息
  • Unity3D加密外壳如何做到防止反编译?
  • PHP二维关联数组的遍历方式
  • SpringMVC的拦截器(Interceptor)和过滤器(Filter)的区别与联系
  • 大型软件公司.Net面试题(一)
  • [Vue CLI 3] 配置解析之 css.extract
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • 08.Android之View事件问题
  • Java 最常见的 200+ 面试题:面试必备
  • log4j2输出到kafka
  • Python_OOP
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 回顾 Swift 多平台移植进度 #2
  • 三栏布局总结
  • 项目管理碎碎念系列之一:干系人管理
  • Java总结 - String - 这篇请使劲喷我
  • postgresql行列转换函数
  • $(selector).each()和$.each()的区别
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (八十八)VFL语言初步 - 实现布局
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (四) 虚拟摄像头vivi体验
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (转)详解PHP处理密码的几种方式
  • .Net IOC框架入门之一 Unity
  • .Net Memory Profiler的使用举例
  • .NET Micro Framework初体验(二)
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?
  • .NET关于 跳过SSL中遇到的问题
  • .net实现客户区延伸至至非客户区
  • /proc/stat文件详解(翻译)
  • @Repository 注解
  • [android] 手机卫士黑名单功能(ListView优化)
  • [Asp.net MVC]Bundle合并,压缩js、css文件
  • [C#]C# OpenVINO部署yolov8图像分类模型
  • [C++从入门到精通] 14.虚函数、纯虚函数和虚析构(virtual)
  • [cocos2d-x]关于CC_CALLBACK
  • [Django 0-1] Core.Email 模块
  • [hadoop读书笔记] 第十五章 sqoop1.4.6小实验 - 将mysq数据导入HBASE
  • [HCTF 2018]WarmUp (代码审计)
  • [hdu2196]Computer树的直径
  • [IM] [Webhook] Webhook实现IM平台机器人
  • [MICROSAR Adaptive] --- autosar官方文档阅读建议