当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > .Net下的签名与混淆图文分析

ASP.NET
二级域名Cookie问题的解决方法
如何为asp.net网站项目添加子项目
asp.net用url重写URLReWriter实现任意二级域名
asp.net 序列化and反序列化演示
asp.net Timer的使用方法
AjaxControlToolKit DropDownExtender(下拉扩展控件)使用方法
AjaxControlToolKit CalendarExtender(日历扩展控件)的使用方法
让GridView只显示特定用户的数据的方法
让GridView只更新某些特定的数据的方法
ajaxControlToolkit中CascadingDropDown的用法说明
axp.net ScriptManager的简单用法
把程序集安装到全局程序集缓存中的步骤
引用全局程序集缓存内的程序集的方法
asp.net COOKIES需要注意的一点
asp.net UrlReWriter使用经验小结
页面导出为Excel的时间格式的问题
asp.net cookie清除的代码
Asp.net XMLHTTP封装类(GET,Post发送和接收数据)
ASP.NET XmlHttp跨域访问实现代码
Asp.NET 随机码生成基类(随机字母,随机数字,随机字母+数字)

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-11   浏览: 145 ::
收藏到网摘: n/a

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