dotnet上的Windows应用程序绝对没有保护措施吗?

时间:2020-05-02 18:25:25

标签: c# .net winforms security obfuscation

我正在用Winforms开发应用程序,似乎无法对可执行文件和其他生成的程序集进行反编译……tools可以在几秒钟内反编译。有混淆器可用。但是,我专门在寻找免费的。

我在应用程序中存储了一些非常敏感的字符串,尽管我尽力将其加密或保存在本地sqlite数据库中,但总是存在一个单点故障,使整个应用程序容易受到攻击。我检查了两个混淆器,分别是open sourcecommercial offerings。开源软件似乎已经坏掉了,而商业软件的价格却相当高,对于像我这样的独立开发者来说,这是无法承受的。

我知道可执行文件必须在内存中运行,这本身使其容易受到攻击。坚定的攻击者最终可以反编译应用程序。但是,我想使此过程尽可能昂贵。至少我要保护应用程序中的字符串。

我的问题是,如果我决定不使用任何昂贵的可用选项,是否无法保护应用程序集免受逆向工程?

2 个答案:

答案 0 :(得分:1)

Windows中有很多保护措施。但这就是保护用户免受您侵害的全部方法,而不是相反。

答案 1 :(得分:0)

反编译的简单事实是:“只要计算机仍然可以执行它,它也可以反编译它。”

执行是将二进制文件转换为动作的过程。

反编译是将二进制文件转换为代码的过程。

如果其中一个被阻止,则另一个也被阻止。

混淆会使读取反编译后的代码变得更困难。但这就是它所能做的一切。

我在应用程序中存储了一些非常敏感的字符串,尽管我尽力使它们保持加密状态或在本地sqlite数据库中,但总是存在一个单点故障,使整个应用程序容易受到攻击

每个字符串仅与保存它的位置一样保存。加密密钥也是如此。有2种有限的解决方法:

  • 如果是将输入内容与后端中的内容进行比较-就像您使用密码一样-password security可以工作。现代化的PW安全性意味着,即使管理员都无法找出密码,但您仍然可以将用户输入与此密码进行比较。
  • 您可以将字符串移动到单独的应用程序中。不必给应用程序提供SQL Server连接字符串,而是给它访问您控制的WebService的权限。实际上只有WebService知道如何联系数据库。

这取决于您的实际方案。但是最后,如果要使用字符串或其他形式的信息,则它在内存中很容易受到攻击。