【问题标题】:How to encrypt the WPF exe file to avoid being de-compiled [duplicate]如何加密WPF exe文件以避免被反编译[重复]
【发布时间】:2021-05-17 14:43:34
【问题描述】:

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

Server=myServerAddress;Database=myDataBase;User Id=abd;Password=xyz;

我给用户一个exe文件作为界面。我们不允许用户的 Windows ID 直接访问数据库。所以 WPF 工具不能使用 Windows 身份验证。 WPF 中的连接字符串包含数据库用户名和密码。如果有人有知识,他可以使用ILSpy之类的工具来反编译exe文件并查看数据库连接字符串。 我看到一些工具可以混淆 exe 文件。但它们不是免费的。我们不想使用它们。当我们提供 WPF exe 文件时,还有其他方法可以保护数据库用户名和密码吗?

【问题讨论】:

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

标签: c# wpf


【解决方案1】:

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

如果这不是一个选项,您可以查看Securing a password in source code。

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

【讨论】:

    【解决方案2】:

    没有万无一失的方法可以保护分发的任何代码不被反编译。

    您应该始终假设您公开公开的任何代码都可以被反编译和反向工程,无论您进行了任何混淆尝试。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-21
      • 1970-01-01
      • 2011-09-11
      • 1970-01-01
      • 2015-12-29
      • 1970-01-01
      • 2013-05-09
      • 2014-07-11
      相关资源
      最近更新 更多