3

如果加密函数需要密钥,您如何混淆源代码中的密钥,以便反编译不会泄露密钥从而启用解密?

4

2 回答 2

6

答案很大程度上取决于平台和开发工具,但总的来说没有可靠的解决方案。加密功能是密钥必须以其“自然”形式存在的点。所以黑客需要做的就是把断点放在那里并转储密钥。甚至不需要反编译任何东西。因此,任何混淆只对新手有好处,或者当出于某种原因无法进行调试时。使用应用程序中存在的文本字符串作为键是变体之一。

但最好的方法当然是不要把钥匙放在里面。根据您的使用场景,您有时可以使用一些系统信息(例如智能手机的 IMEI)作为密钥。在其他情况下,您可以在安装应用程序时生成密钥并将该密钥存储为应用程序数据的组成部分(例如,使用数据库的列名作为密钥,或类似的东西)。

尽管如此,如前所述,当可以运行调试器时,所有这些都相对容易跟踪。

有一件事可以抵消调试 - 将解密卸载给第三方。这可以通过使用外部加密设备(USB 加密令牌或智能卡)或调用 Web 服务来解密某些信息部分来完成。当然,有些方法也只适用于有限的场景。

于 2012-05-24T05:28:52.217 回答
1

加密内置于 .NET 配置系统中。您可以加密 app/web.config 文件的块,包括您存储私钥的位置。

http://www.dotnetprofessional.com/blog/post/2008/03/03/Encrypt-sections-of-WebConfig-or-AppConfig.aspx

资源

于 2012-05-24T05:09:26.470 回答