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

 更新时间:2009年02月11日 09:34:16   作者:  
任何时候,软件安全与版权保护都是很重要的,特别是企业级开发或一些特殊应用方面。对.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重新签名。

相关文章

  • asp.net 文件上传 实时进度

    asp.net 文件上传 实时进度

    在swfupload的基础上增加一些个性化东西.附图2张.
    2009-11-11
  • ASP.NET中图片显示方法实例

    ASP.NET中图片显示方法实例

    这篇文章主要介绍了ASP.NET中图片显示方法,实例分析了ASP.NET图片显示所涉及的图片路径、缩略图及更新数据库图片浏览次数等相关技巧,需要的朋友可以参考下
    2015-07-07
  • ASP.NET数据绑定GridView控件使用技巧

    ASP.NET数据绑定GridView控件使用技巧

    这篇文章主要为大家详细介绍了ASP.NET数据绑定GridView控件使用技巧,感兴趣的小伙伴们可以参考一下
    2016-03-03
  • .NET 纯分页代码实例

    .NET 纯分页代码实例

    这篇文章介绍了.NET 纯分页代码实例,有需要的朋友可以参考一下
    2013-09-09
  • 微信开发(一) asp.net接入

    微信开发(一) asp.net接入

    我们要进行微信公众平台的开发,第一步当然是要有公众号了。什么?不知道什么是微信公众号,看来你还要先回炉炼炼了,呵呵。通俗的说,我们微信平台就好像是一个大社会,里面有个体人,也有各种组织机构。
    2016-05-05
  • ASP.NET Core依赖注入(DI)讲解

    ASP.NET Core依赖注入(DI)讲解

    本文详细讲解了ASP.NET Core依赖注入(DI),文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • 使用DataGrid中扩展ItemRenderer和HeaderRenderer进行操作

    使用DataGrid中扩展ItemRenderer和HeaderRenderer进行操作

    这两天在用Flex DataGrid做点东西,走了不少弯路,现将心得分享一下。
    2009-02-02
  • .Net项目中NLog的配置和使用实例详解

    .Net项目中NLog的配置和使用实例详解

    这篇文章主要给大家介绍了关于.Net项目中NLog的配置和使用的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用.Net具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-07-07
  • 用存储过程向数据库存值的具体实现

    用存储过程向数据库存值的具体实现

    本文为大家介绍下使用存储过程向数据库存值的具体实现过程,感兴趣的朋友不要错过
    2014-01-01
  • C#中HTML字符转换函数分享

    C#中HTML字符转换函数分享

    在ASP.Net中经常会从网面中取数据或更新网页的显示。因为HTML中有些特殊字符如<, >, &等,显示实际值不一致,造成保存到数据库再取出来时会不一样
    2012-07-07

最新评论