保护硬编码字符串免于反编译

时间:2011-07-16 18:34:14

标签: c#

我正在编写一个需要连接到外部服务器上的MySQL数据库的应用程序。我需要一个“硬编码”字符串来连接到包含用户和密码详细信息的数据库。当人们可以反编译我的应用程序以查看我最初输入的代码时,这是一个问题,这可以让他们直接访问我的数据库。

有没有办法阻止人们用代码查看这些字符串?我不想使用混淆器。

非常感谢, 史蒂夫

5 个答案:

答案 0 :(得分:6)

您可以将呼叫发送到您自己的Web服务,然后根据需要重定向到数据库,而不是直接连接到数据库。这样做的好处是,如果您需要更改连接字符串,则可以重新部署Web服务,而不会影响客户端应用程序。

答案 1 :(得分:1)

加密字符串,存储它。解密作为连接过程的一部分。

答案 2 :(得分:0)

我会说 Obfuscator 你需要顺便使用,因为即使你加密字符串就像绝对正确的建议@jfar,一个人很容易就可以使用反射器找出你的加密和解密技术。

当然,如果真的想要,也可以破解混淆的代码,但它始终是为那些不会花时间破解你的应用程序的人创建足够困难的东西。

问候。

答案 3 :(得分:0)

鉴于您在客户端应用程序中对数据库的身份验证详细信息进行了硬编码,您必须通过其他一些机制对您的用户进行身份验证。否则你有一个巨大的安全漏洞 - 任何能够掌握你的二进制文件的人都可以访问数据库(如果这不是你的问题,那么首先不需要隐藏数据库密码,因为这不会实现任何东西)。

如果您的数据库无法使用相同的身份验证机制,那么您必须使用特定帐户进行连接,如您所述。但是,此连接应通过代理进行,可以对您的用户进行身份验证。例如,位于客户端和数据库之间的Web服务,代表客户端执行数据库调用。

答案 4 :(得分:0)

警告:如果您编写一个目录访问您的数据库的应用程序(即通过ODBC连接到MySQL数据库的WinForms / WPF应用程序),您可能会感到遗憾。我建议按照接受的答案建议创建Web服务。但是,如果你没有创造一个......

的奢侈

另一种选择是将连接字符串放入配置文件中(如果尚未安装),然后加密整个配置文件,或者只加密要保护的部分。