系列索引: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:代码混淆