反编译.exe时避免暴露数据库凭据

问题描述 投票:0回答:1

我刚刚在我正在开发的 C# 项目上测试数据库连接。我想知道是否有任何保护措施可以防止我的凭据暴露给可能的反编译。

public int connect_DB()
{
    try
    {
        string server = "localhost";
        string db = "myDB";
        string username = "myUsername";
        string password = "passwordDB";

        string constring = $"SERVER={server};DATABASE={db};UID={username};PASSWORD={password};";

        conn = new MySqlConnection(constring);
        conn.Open();

        return 1;
    }
    catch (Exception)
    {
        MessageBox.Show("Please contact to an administrator", "DataBase connection failed", 
            MessageBoxButtons.OK, MessageBoxIcon.Error);
        return 0;
    }
}

该项目将构建为.exe并提供给公司。如果有人反编译代码,数据库凭据将显示为纯文本,这可能会导致一些明显的问题。

谢谢!

c# database mysql-connector password-protection decompiling
1个回答
0
投票

在.NET环境中反编译构建(.exe)并不困难。 为此,有 dnSpy、JustDecompile 等反编译器。 为了保护您的代码免遭反编译,您需要使用混淆器。混淆器使您的源代码在反编译期间难以阅读,但同时保留了其功能。还有大量的混淆器,有付费的也有免费的。 我建议使用 .NET Reactor。 但还值得记住的是,对于几乎所有混淆器,也有反混淆器可以解密混淆器处理的程序集。例如,为了对程序集 .NET Reactor 进行反混淆,有一个 NETReactorSlayer 项目。

因此,我建议您:

  1. 如果可能,不要直接使用数据库。最好部署一个Web API服务器,在上面实现用户授权和请求处理。
  2. 使用混淆器提供额外保护。上面我建议使用.NET Reactor,但是你需要了解它工作的本质。例如,这个混淆器有一个有用的功能“Code Virtualization”,它使方法的反编译变得复杂。至少NETReactorSlayer无法反编译标有此属性的方法。
© www.soinside.com 2019 - 2024. All rights reserved.