从 Visual Studio 发布应用安全吗?

Is releasing app from Visual Studio safe?

我提供了一个 WPF 应用程序并将解决方案配置更改为 "Release"

我从发布中获得了一个 .exe 文件。这样共享安全吗?有人可以访问此 exe 文件的代码吗?我的意思是没有任何应用程序可以将 .exe 文件转换为代码吗?

分享前请告诉我如何保护它。

如果您在调试或发布模式下创建 .exe 文件并不重要 - 所有可执行文件 (.EXE) 都可以反编译 为代码。

反编译器是一种计算机程序,它将可执行文件作为输入,并尝试创建一个高级的、可编译的源文件来执行相同的操作。 因此,它与编译器相反,编译器获取源文件并生成可执行文件。反编译器被认为是逆向工程.

过程中的重要工具

曾经流行的工具是 hiew,它可以将以任何语言创建的任何 exe 文件分解成其高级代码。

对于使用 .NET 框架创建的二进制文件和 EXE 文件,有多种工具,包括 this one,这使得反编译变得非常容易和易于访问。

您可以使用混淆 来防止反编译。有几个工具可用,例如 secureteam.net and Dotfuscator.

您可以反编译任何使用 .NET 语言编译的程序集或可执行文件(这同样适用于 Java)。这是因为 .NET 语言被编译成所谓的 common intermediate language,这并不是真正的 机器码 。因此,您可以轻松将该文件反编译为代码。根据用于反编译的工具,您很有可能像编译前一样反编译代码,这意味着您可以轻松理解程序员的开发人员在代码中编写的内容。

但在很多情况下,你不会真正关心这个。首先,周围没有多少人真正会阅读该代码,或者您是否曾经阅读过著名网站的 javascript 代码,该代码甚至 直接可读 ?即使周围有一些人有兴趣阅读您的代码,但大多数人还是会付出一些努力才能理解它。这需要一些长期而艰苦的工作,而大多数开发人员不会这样做。你只能更难使用混淆器读取反编译的代码,那种加密你的代码编译过程之前使得它很难了解构建exe时的代码。

考虑这段代码:

var myVariable = "Some Text";
var anotherVariable = myVariable;
DoSomething(anotherVariable);

非常不言自明的代码,不是吗?现在考虑以下可以使用 DotFuscator 生成的内容,例如:

var a="Some Text";var b=a;hksdshd(b);

更难理解这段代码的作用,不是吗?基本上,混淆器只是用一些随机字符替换代码中的所有标识符,这使得很难猜测它们的预期用途或含义是什么。之后,加密的代码像任何其他代码一样被编译成程序集或可执行文件。当有人真正反编译你的程序时,他们得到的只是那些难以阅读的名称和片段。

话虽如此,但要真正保护您的应用程序不被任何人阅读是相当困难的,而且在大多数情况下,这不是您应该过多关注的。通常你想要保护的是你的数据,例如信息存储在数据库中。

您还可以查看 this question,其中更详细地介绍了混淆工具。