如何检查DLL的Authenticode?

时间:2018-02-23 13:36:21

标签: c# cryptography authenticode

我有一个数字签名的dll,当我的应用程序启动时,我想检查这个dll是"原来",特别是没有用假的替换。 如何检查Authenticode签名?

我从未做过这样的事情,我需要一些帮助才能开始。

更新

我希望阻止有人用自己的dll替换dll,并为这个dll提供自己的api方法,因此myApp.exe总是显示正确的许可。

我问作者,他告诉我:

"您可以采取一些措施来防止您提到的破解类型。例如,在代码中的某个位置,您可以通过检查Authenticode签名是否仍然有效来验证TurboActivate(TurboActivate是代码签名的)。或者,如果您想要一个更简单的解决方案,您可以进行简单的MD5或CRC检查。这样可以防止"掉落"用恶意版本替换TurboActivate。"

1 个答案:

答案 0 :(得分:1)

如果dll是您程序的常规参考,则系统会自动为您执行检查,如果程序被篡改,您的程序将无法启动。你不需要做任何额外的事情,它是正常启动的一部分,并找到所有引用的程序集例程。

如果此程序集在程序中的某个位置“背后”加载,您可以查看它并检查它的标记:

var assembly = AppDomain.CurrentDomain.GetAssemblies().First(a => a.FullName.Contains("TurboActive"));
var token = assembly.GetName().GetPublicKeyToken();

// check if token is *their* valid token