C# 如何加密WPF exe文件以避免被反编译

C# 如何加密WPF exe文件以避免被反编译,c#,wpf,C#,Wpf,在我的WPF工具中,有如下数据库连接字符串: Server=myServerAddress;Database=myDataBase;User Id=abd;Password=xyz; 我给用户一个exe文件作为接口。我们不允许用户的Windows ID直接访问数据库。因此WPF工具不能使用Windows身份验证。WPF中的连接字符串包含数据库用户名和密码。如果有人知道,他可以使用诸如ILSpy之类的工具来反编译exe文件并查看数据库连接字符串。 我看到一些工具可以混淆exe文件。但它们不是免费

在我的WPF工具中,有如下数据库连接字符串:

Server=myServerAddress;Database=myDataBase;User Id=abd;Password=xyz;
我给用户一个exe文件作为接口。我们不允许用户的Windows ID直接访问数据库。因此WPF工具不能使用Windows身份验证。WPF中的连接字符串包含数据库用户名和密码。如果有人知道,他可以使用诸如ILSpy之类的工具来反编译exe文件并查看数据库连接字符串。
我看到一些工具可以混淆exe文件。但它们不是免费的。我们不想使用它们。当我们提供WPF exe文件时,是否有其他方法来保护数据库用户名和密码?

最好的方法可能是根本不允许直接访问数据库。而是创建一个网络服务,接受来自应用程序的请求并将其转发到数据库。这样,服务可以处理身份验证和权限

如果这不是一个选项,你可以看看


也可能更容易混淆密码而不是整个应用程序。仅将字符串编码为字节数组并存储该数组将使使用反编译器简单地提取变得有点困难。添加某种“加密”,即使它只是一个带有随机数组的异或,也会使它更加困难。请注意,这不会阻止具有管理员权限的熟练且坚定的攻击者,因为您需要某种外部身份验证。

没有防弹的方法来保护分发的任何代码不被反编译

您应该始终假定公开的任何代码都可以反编译和反向工程,而不管您是否尝试过任何模糊处理


因此,您应该将任何机密信息移动到受适当防火墙保护的远程服务。不要在您分发的文件中包含任何敏感信息。

因此,这是一个内部应用程序?用户的动机如何?如果应用程序需要能够对其进行解密,那么最终攻击者可以获得该值-您无法真正阻止它(这是他们的机器;例如,他们可以使用低级调试器,在您添加的任何解密代码后添加断点,并检查值)。使用集成安全性(SSPI/域身份验证)有效吗?(如果你不使用密码,你就不能窃取密码)另一个攻击向量是一个内存转储,它可能包含所有数据。为此,您可以使用SecureString。