如何在反编译时不显示任何信息的情况下使用 C# 安全连接到 MySQL

How to make safe connection with C# to a MySQL without showing any info when decompiling

所以我 运行 遇到了大问题。 所以问题是,当我编译我的 C# 项目时,它包含一个连接到 MySQL 服务器的函数,当使用 ILSpy 反编译我的项目时,我的连接字符串是可见的。

我的函数是这样的

void ConnectToDatabase()
{
    string myConnectionString;
    myConnectionString = "Server=sql7.freemysqlhosting.net;UID==**********;Pwd==**********;Database=**********;";

    try
    {
        conn = new MySql.Data.MySqlClient.MySqlConnection(myConnectionString);
        secondconn = new MySql.Data.MySqlClient.MySqlConnection(myConnectionString);
        secondconn.Open();
        secondconn.ChangeDatabase("information_schema");

        conn.Open();
        ConnectionEstablished(true);
    }

但这就是问题所在

有什么解决办法吗? 即使我通过服务器端连接检查 MySQL,我怎么能在不吐出我的信息的情况下连接。

谢谢。

您可以使用网络服务在 rogram 启动时向受信任的机器提供配置文件或连接字符串。然后,您可以提示用户输入 Web 服务的用户凭据或使用证书。这样,实际的数据库密码就不会在用户计算机上 "stored",您可以集中禁止 Machines/Users/Certificates。 请注意通常的网络服务安全措施适用(使用 HTTPs、使用强加密、不要自行加密、使用会话等)

没有办法让它 100% 万无一失,但为了保护它免受 ordinary/regular 用户加密,混淆应该足够了。

需要在客户本地系统上部署的应用程序必须进行模糊处理,以保护最终用户不应该看到的任何内容。

加密可用于在本地系统上存储信息,但执行 encryption/decryption 的代码必须通过使用代码混淆进行反编译保护。

由于它是一个客户端应用程序 (winform),因此您需要客户端计算机上的连接信息。我建议使用混淆,使用工具相当容易。

它的常见问题和很多可用的帮助: List of obfuscation tools for .Net

许多类似的问题已经得到解答:

How can I protect my .NET assemblies from decompilation?

Protect .NET code from reverse engineering?