.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 ,如需转载请自行联系原作者
相关文章
|
4月前
|
JSON JavaScript 前端开发
全面的.NET微信网页开发之JS-SDK使用步骤、配置信息和接口请求签名生成详解
全面的.NET微信网页开发之JS-SDK使用步骤、配置信息和接口请求签名生成详解
|
算法 安全 开发工具
微软:SHA-1 算法签名的.NET 框架 4 月 26 日将不再支持
微软:SHA-1 算法签名的.NET 框架 4 月 26 日将不再支持
104 0
微软:SHA-1 算法签名的.NET 框架 4 月 26 日将不再支持
一起谈.NET技术,Visual Studio对程序集签名时一个很不好用的地方
  由于我们的项目底层使用到一个通过LogicalCallContext实现的上下文数据管理框架,导致所有的Unit Test不能正常运行。具体的现象在《只在UnitTest和WebHost中的出现的关于LogicalCallContext的严重问题》有过详细的介绍。
847 0
|
存储 安全 C#
浅谈.NET程序集安全签名
本文讲的是浅谈.NET程序集安全签名,如果你能看懂上面的代码行是什么意思,那么你可能是一个.NET开发人员。同时你也可能知道结尾处的十六进制字符串表示的是一个公共密钥令牌,这是一个表示程序集具有强名称签名的标识。
1396 0
|
安全 C# 数据安全/隐私保护
微信消息体签名及加解密功能详细解析以及.net实现
原文:微信消息体签名及加解密功能详细解析以及.net实现 前言 微信消息体签名及加密功能已上线,明文传输确实存在安全风险,鉴于微信的用户范围使用之广泛,必定会成为众矢之的。所以大家还是尽快接入安全模式为好。
1412 0
|
数据安全/隐私保护 开发工具
浅谈.Net脱壳中方法体的局部变量签名还原
在之前介绍Jit层脱壳原理时曾提到两个难点,1。方法体的局部变量签名。2。方法体的SEH 异常处理表。 本文主要就第一个问题进行简单探讨,随带也涉及到一些第二个问题。 前面提到过投机的方式获取,不在本文讨论范围,投机总是过于侥幸。
1038 0
|
3月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
38 0
|
29天前
|
开发框架 前端开发 .NET
进入ASP .net mvc的世界
进入ASP .net mvc的世界
28 0
|
29天前
mvc.net分页查询案例——mvc-paper.css
mvc.net分页查询案例——mvc-paper.css
5 0