C# 从VisualStudio发布应用程序安全吗?

C# 从VisualStudio发布应用程序安全吗?,c#,wpf,publish,C#,Wpf,Publish,我提供了一个WPF应用程序,并将解决方案配置更改为“发布” 我从发布中获得了一个.exe文件。这是安全的分享吗?有人可以访问此exe文件的代码吗?我的意思是没有任何应用程序可以将.exe文件转换为代码 请在共享之前告诉我如何保护它。无论您是在调试模式还是发布模式下创建.exe文件,都无所谓-所有可执行文件(.exe)都可以反编译为代码 反编译器是一种计算机程序,它以一个可执行文件作为输入,并尝试创建一个高级别的、可编译的源文件来执行相同的操作。 因此,它与编译器相反,后者接受源文件并生成可执行文

我提供了一个WPF应用程序,并将解决方案配置更改为“发布”

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


请在共享之前告诉我如何保护它。

无论您是在调试模式还是发布模式下创建.exe文件,都无所谓-所有可执行文件(.exe)都可以反编译为代码

反编译器是一种计算机程序,它以一个可执行文件作为输入,并尝试创建一个高级别的、可编译的源文件来执行相同的操作。 因此,它与编译器相反,后者接受源文件并生成可执行文件。反编译器被认为是逆向工程过程中的重要工具

曾经,这种流行的工具提供了将任何语言创建的exe分解为高级代码的功能

对于使用.NET framework创建的二进制文件和EXE文件,有几种工具,包括,使反编译非常容易且可访问


您可以使用模糊处理来防止反编译。有几种工具可用,例如和。

您可以对使用.NET语言编译的任何程序集或可执行文件进行反编译(这同样适用于Java)。这是因为.NET语言被编译成所谓的机器代码,而不是实际的机器代码。因此,您可以轻松地将该文件反编译为代码。根据反编译所使用的工具,您有很好的机会像在编译之前一样对代码进行反编译,这意味着您很容易理解程序员的开发人员在代码中写了什么

但在很多情况下,你不会真的那么在意这个。首先,没有多少人会真正阅读这些代码,或者你是否读过一个著名网站的javascript代码,它甚至可以直接供人阅读?即使周围有人对阅读你的代码感兴趣,大多数人还是会有一些艰苦的工作来理解它。这需要一些长期而艰苦的工作,这是大多数开发人员不会做的。使用模糊处理程序只能使反编译代码更难读取,这种情况会在编译过程之前将代码加密,从而使生成exe时很难理解代码

考虑以下代码:

var myVariable = "Some Text";
var anotherVariable = myVariable;
DoSomething(anotherVariable);
很容易解释的代码,不是吗?现在考虑以下可能产生的,例如:

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

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


您还可以看一看,它更详细地介绍了模糊处理工具。

您可以反编译使用.NET语言编译的任何程序集或可执行文件。这与使用发布或调试配置无关。如果您真的想避免或至少使其难以实现,请使用模糊器。然而,您真正想要保存的不是您的程序,而是您的数据,因此通常不需要进行模糊处理。@HimBromBeere谢谢,是否有人可以将我的.exe文件转换为代码?是的,没有办法。您只能使转换后的代码更难阅读。@HimBromBeere谢谢您的评论。我添加了一些OP可以使用的模糊工具。顺便说一句:不是所有的exe文件都可以反编译,只有那些以某种中间格式存在的文件,比如MSIL。即使Java也有一些字节码,但是你不能真正反编译C代码,至少不能用你为C#实现的方式。谢谢,这意味着当我与用户共享我的应用程序时,这意味着我与优秀的开发人员共享我的代码?:):|@alihaghdoust9你可以向你的用户发布你的EXE,但是你不能百分之百的相信他们中的一个是黑客或者有滥用你代码的意图。但是,你仍然可以使用我在回答中提供的工具使这个过程几乎不可能。@HimBromBeere再次感谢你的评论,我来自一个.NET世界,我现在正在阅读你提到的内容。谢谢你的回答,我认为现在使用这样的工具已经足够了,对吗?似乎这很合适。试试看,看看。
var a="Some Text";var b=a;hksdshd(b);