C#入门教程08.04:添加强签名

系列索引:C#开发入门系列教程索引

上一篇:C#开发入门教程08.03:非托管dll调用

强签名

  • 可以将强签名的dll注册到GAC,不同的应用程序可以共享同一dll。
  • 强签名的 库/应用程序 只能引用强签名的dll,不能引用未强签名的dll,但是未强签名的dll可以引用强签名的dll。
  • 强签名无法保护源代码,强签名的dll是可以被反编译的。
  • 强签名的dll可以防止第三方恶意篡改。

生成强签名

打开vs命令行工具,执行命令生成公钥

1
2
3
4
5
6
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community>sn -k D:\jackeylea.snk

Microsoft(R) .NET Framework 强名称实用工具 版本 4.0.30319.0
版权所有(C) Microsoft Corporation。保留所有权利。

密钥对写入到 D:\jackeylea.snk

直接指定文件保存位置,如果没有指定位置默认保存在VS安装目录C:\Program Files (x86)\Microsoft Visual Studio\2019\Community

dll添加强签名

打开上一篇的sumdll工程,打开属性的签名标签页

签名页

勾选为程序集签名

为程序集签名

选择刚刚生成的签名,点击Browse打开文件选择对话框选择文件

选择类型

文件加载后

重新编译生成dll。

未签名的输出为

1
2
3
4
5
6
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community>sn -T C:\Users\Administrator\Nutstore\1\Nutstore\sumdll.dll

Microsoft(R) .NET Framework 强名称实用工具 版本 4.0.30319.0
版权所有(C) Microsoft Corporation。保留所有权利。

C:\Users\Administrator\Nutstore\1\Nutstore\sumdll.dll 不表示具有强名称的程序集

签名后输出

1
2
3
4
5
6
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community>sn -T "C:\Users\Administrator\Documents\Visual Studio 2019\Projects\sumdll\bin\Debug\sumdll.dll"

Microsoft(R) .NET Framework 强名称实用工具 版本 4.0.30319.0
版权所有(C) Microsoft Corporation。保留所有权利。

公钥标记为 a4cbbae7e46852ef

注意是T表示程序集,t表示文件

测试

当前状态是编译exe调用了签名的dll

运行测试

  • 签名exe调用签名dll,正常
  • 未签名exe调用签名dll,正常
  • 签名exe调用为未签名dll,异常
  • 未签名exe调用未签名dll,异常

异常报错信息为

1
2
3
未经处理的异常:  System.IO.FileLoadException: 未能加载文件或程序集“sumdll, Version=1.0.0.0, Culture=neutral, PublicKeyToken=a4cbbae7e46852ef”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)
在 getsum.Program.Main(String[] args)
请按任意键继续. . .

删除强签名

加壳软件是无法删除强签名的,需要先脱壳。

删除签名

下一篇:C#开发入门教程08.05:代码混淆


C#入门教程08.04:添加强签名
https://feater.top/csharp/add-sign-to-csharp-app/
作者
JackeyLea
发布于
2023年10月10日
许可协议