ASP.NET 用签名/强命名保障代码安全

作者:vkvi 来源:ITPOW(原创) 日期:2016-7-18

大家都知道 ASP.NET 生成的 DLL 只是中间语言,用很多工具,比如 .NET Reflector 就可以看到源代码。

保护源代码,有人用混淆工具,将变量命名为 a、b、c 这种人看起很累的名称,比如 Dotfuscator 这个工具就很常用,而且 Visual Studio 中已经在菜单“工具”中集成了基础版。

而有时候,我们对源代码的保护倒不是特别迫切,倒是希望客户不要更改我们的代码,比如:授权使用,利用不对称加密,客户看到了源代码也只有公钥,没有私钥,就没办法算出注册码。

但是客户有一招,可以自己改 DLL,将验证授权使用这段代码去除,然后用新的 DLL 覆盖老的 DLL,照样达到了破解的目的。

但是开发公司也是有法避免客户修改的,就是用签名/强命名。

选中需要保护的项目,按 Alt + Enter 键,进入属性页面,切换到签名标签:

为程序集签名

自己新建一个强名称密钥文件,这个文件要保密,然后重新生成,DLL 就受保护了。

当 DLL 已经签名:

  • 如果将就原有 DLL,在上面直接改,由于文件已经变动,所以原有签名失效,软件无法运行。
  • 如果用没有签名的 DLL 替换该 DLL,软件无法运行。
  • 如果用不同的强名称密钥文件签名的 DLL 替换该 DLL,软件无法运行。
  • 如果用相同的强名称密钥文件签名的 DLL 替换该 DLL,软件才能够正常运行。由于客户无法拿到强名称密钥文件,所以它无法做一个相同签名的 DLL。

当 DLL 没有签名:

  • 如果用没有签名的 DLL 替换该 DLL,软件正常运行。
  • 如果用已经签名的 DLL 替换该 DLL,软件无法运行。
相关文章