如果加密函数需要密钥,那么如何对源中的密钥进行模糊处理以使反编译不会泄露密钥从而启用解密?
答案 0 :(得分:5)
答案在很大程度上取决于平台和开发工具,但总的来说,没有可靠的解决方案。加密功能是密钥必须存在于其中的点"自然"形成。因此,黑客需要做的就是将断点放在那里并转储密钥。甚至不需要反编译任何东西。因此,任何混淆只对新手有用,或者无论出于何种原因无法进行调试。使用应用程序中存在的文本字符串作为键是变体之一。
但最好的方法当然不是把钥匙放在里面。根据您的使用场景,您有时可以使用某些系统信息(例如智能手机的IMEI)作为密钥。在其他情况下,您可以在安装应用程序时生成密钥,并将该密钥存储为应用程序数据的组成部分(例如,使用数据库的列名作为密钥,或类似的东西)。
如上所述,当人们可以运行调试器时,所有这些都相对容易跟踪。
有一件事可以抵消调试 - 卸载解密到第三方。这可以通过使用外部密码设备(USB cryptotoken或智能卡)或通过调用Web服务来解密某些信息部分来完成。当然,这些方法也仅适用于一组有限的场景。
答案 1 :(得分:1)
加密内置于.NET配置系统中。您可以加密app / web.config文件的块,包括存储私钥的位置。