我有一个控制台应用程序引用程序集 A。我想确保如果 A.dll 被篡改或替换,该应用程序将不会运行。
一种选择是使用强名称签名。但是我需要担心强名称绕过吗?
还有其他好的选择吗?
如果您可以建立保护,黑客就可以破坏它。不要太担心防止篡改,那些可以在心跳中破坏它的人可能不会在乎,即使他们这样做了,你几乎没有什么可以阻止他们。
最好的建议是许可由团队专门为以这种方式保护您的应用程序而构建的产品。就像密码学一样,通常最好不要自己动手。
您可以使用 dll 的 MD5 哈希,但即使这样也不是非常万无一失,因为任何想要破坏您的应用程序的人只会使用反射器并找出您真正在做什么,并且可能只是直接修改您的程序。您可以获得有助于解决此问题的代码混淆器,但没有什么是完全防黑客的。这确实是一种权衡 - 阻止某人更改您的 dll 的价值是什么?有人会的可能性有多大?以及在时间=金钱方面要花多少钱来防止这种情况发生?
实际上,甚至不要试图捍卫您的代码/程序集或其他任何东西。我的意思是,如果有可能(并且它被设计为)在计算机上运行,对于公众等,就不可能保护它 - 你可以在你自己的计算机上做任何你想做的事,使用好的工具和你拆卸的工具一秒钟后。
所以,不要尝试,你只会浪费你的时间。
根据该页面的作者:
相反,对于完整性检查,您确实需要使用 Authenticode 签名。
你需要的是像 www.red-gate.com/products/smartassembly/ 这样的产品,而且有很多这样的产品。但是,它们只能在一定程度上保护您的组件,没有一个是 100% 安全的。
做网络浏览器所做的事情,并依赖来自受信任的第三方的证书。