.Net下的签名与混淆

.Net下的签名与混淆
.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重新签名。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
.NET代码混淆是一种保护代码的技术,它能够使代码难以被反编译或者逆向工程攻击者分析。本文将介绍.NET代码混淆的实践,包括如何选择混淆器、如何配置混淆选项、如何处理混淆后的代码等。 ## 选择混淆.NET代码混淆器有很多种,常见的包括Dotfuscator、Eazfuscator.NET、CodeFort、SmartAssembly等。在选择混淆器时,需要考虑以下因素: - 混淆器的稳定性和可靠性; - 混淆器的安全性,即是否会泄露敏感信息; - 混淆器的性能,即混淆时间和代码运行性能的影响; - 混淆器所提供的混淆选项和功能; - 混淆器的价格和许可证限制等。 一般来说,商业混淆器提供的混淆选项和功能更加丰富,而免费混淆器则相对简单。如果需要使用商业混淆器,可以在官方网站上下载试用版进行测试,以确定是否符合需求。 ## 配置混淆选项 混淆器提供了丰富的混淆选项和配置项,需要根据具体需求进行选择和配置。常见的混淆选项包括: - 重命名:将代码中的类、方法、字段、属性等标识符进行随机重命名,增加反编译和逆向工程攻击者的难度; - 混淆控制流:通过插入无用代码、交换代码块、使用goto语句等方式,使代码的控制流变得难以理解,增加攻击者的难度; - 字符串加密:将代码中的字符串进行加密,避免明文字符串被攻击者直接获取; - 资源加密:将代码中的资源文件进行加密,避免明文资源文件被攻击者直接获取; - 防调试:通过检测调试器状态、修改IL代码等方式,防止被调试和破解; - 异常处理:通过修改异常处理代码,使得反编译和逆向工程攻击者难以理解代码的异常处理逻辑。 需要注意的是,混淆器提供的混淆选项可能会影响代码的运行性能和稳定性,需要进行适当的测试和调整。 ## 处理混淆后的代码 混淆器处理完代码后,会生成一份混淆后的程序集文件,需要进行一些处理才能使用。常见的处理方式包括: - 反混淆:如果需要对混淆后的代码进行调试和修改,可以使用反混淆工具将代码还原成原始代码; - 引用修复:由于混淆器可能会修改代码中的类型和命名空间,因此在使用混淆后的程序集时可能会出现引用丢失的情况,需要使用引用修复工具修复; - 驱动签名:如果使用混淆后的程序集进行驱动开发,需要对程序集进行数字签名,以避免Windows操作系统拒绝加载未签名的驱动程序。 需要注意的是,在处理混淆后的代码时,需要保证处理的工具和方法与混淆器兼容,否则可能会导致代码无法正常运行。 ## 结论 .NET代码混淆是一种保护代码的技术,可以有效地防止反编译和逆向工程攻击。在实践中,需要选择合适的混淆器、配置适当的混淆选项和处理混淆后的代码,才能达到最佳的保护效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值