【发布时间】:2018-02-23 21:56:25
【问题描述】:
我有一个经过数字签名的 dll,当我的应用程序启动时,我想检查这个 dll 是否是“原始的”,特别是没有被假的替换。 如何检查 Authenticode 签名?
我从来没有做过这样的事情,我需要一些帮助才能开始。
更新
我想阻止某人用他们自己的 dll 替换并为这个 dll 提供他们自己的 api 方法,因此 myApp.exe 总是显示为正确许可。
我问过作者,他告诉我:
“您可以采取一些步骤来防止您提到的破解类型。例如,您可以在代码中的某处通过检查 Authenticode 签名是否仍然有效来验证 TurboActivate(TurboActivate 是代码签名的)。或者,如果您想要一个更简单的解决方案,您可以进行简单的 MD5 或 CRC 检查。这将防止 TurboActivate 被恶意版本“插入”替换。”
【问题讨论】:
-
使用强命名程序集 - stackoverflow.com/questions/2354129/…
-
@auburg dll 不是我的,由另一位作者提供,所以我无权访问代码
-
Afaik .Net 会在您使用强命名签名库时自动执行此操作,方法是在引用中包含公钥。
-
@FacundoColidio 要记住的一件事是,你的程序也可以(感谢反编译器和其他有用工具的奇迹)也可以轻松修改 - 例如完全删除检查或将检查许可证的 IL 代码替换为始终返回 true 的函数。 (你可以认为这是最简单的破解形式)
-
篡改原生 dll 比仅仅篡改程序以绕过 dll 的调用要困难得多,工作量也更大。在这种情况下检查本机 dll 有点毫无意义......就像用额外的铅带加固钢门,而它就设置在打开的窗户旁边。
标签: c# cryptography authenticode