2017-08-14 56 views
-1

我提供了一个WPF应用程序,并将解决方案配置更改为“发布”从Visual Studio安全发布应用程序吗?

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

请让我知道如何在分享之前保护它。

+0

你可以反编译*这是使用.NET语言编写的任何*组装或可执行文件。这与使用发行版或调试配置无关。如果你真的想要避免或至少难以实现这一目标,请使用混淆器。然而,你真正想要保存的不是你的程序,而是你的数据,因此通常不需要混淆。 – HimBromBeere

+0

@HimBromBeere谢谢,有人可以将我的.exe文件转换为代码或不? – alihaghdoust9

+0

是的,没有办法解决这个问题。您只能使读取转换后的代码变得更加困难。 – HimBromBeere

回答

1

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

但在很多情况下,你不会真正关心这一点。首先,周围并没有很多人会阅读那些代码,或者你曾经阅读过一个着名网站的JavaScript代码,它甚至可以直接用读懂?即使有一些有兴趣阅读你的代码的人,大多数人都会努力去理解。这需要一些长期而艰苦的工作,大多数开发人员不会这样做。你只能用它读取使用混淆器反编译的代码,这种编码编码过程之前使编码过程中难以理解的代码时,构建的exe。

考虑以下代码:

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

相当不言自明的代码,isn't呢?现在考虑其可使用DotFuscator例如为:

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

更难理解这段代码做什么,isn't它可以产生以下?基本上,混淆器只是用一些随机字符替换代码中的所有标识符,这使得很难猜测它们的用途或意义是什么。之后,将加密的代码作为任何其他代码编译到程序集或可执行文件中。当有人真的反编译你的程序时,他们所得到的就是那些难以阅读的名字和片段。

话虽如此it's非常难以真正保护您的应用程序从任何人读,并且在大多数情况下,这isn't你应该关心什么太多。通常你要保护你有什么数据,例如该信息被存储在数据库中。

您也可以看看this question,这对混淆工具一些一探究竟。

+0

感谢您的回答,我想现在使用这样的东西就足够了https://www.nuget.org/packages/Obfuscar/,对不对? – alihaghdoust9

+0

似乎适合。试试看看。 – HimBromBeere

0

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

反编译器是一种计算机程序,它将可执行文件作为输入,并尝试创建可执行相同操作的高级可编译源文件。 因此,它是一个编译器的反面,该​​编译器需要一个源文件并生成一个可执行文件。在逆向工程的过程中,反编译器被认为是重要的工具。

一旦这样流行的工具是hiew,它提供将任何语言创建的任何exe分解为高级代码。

对于使用.NET框架创建的二进制文件和EXE文件,有几个工具,其中包括this one,这使得反编译非常简单和可访问。

您可以使用阻止反编译。有几种工具可用,例如secureteam.netDotfuscator

+0

@HimBromBeere感谢您的评论。我添加了一些OP可以使用的工具的混淆。 –

+0

顺便说一句.:未所有exe-文件可以被反编译,只有那些存在于某些中间格式如MSIL。即使Java有一些这样的字节码,但是你不能真正反编译C代码,至少不能以你为C#实现的方式进行反编译。 – HimBromBeere

+0

谢谢,所以这意味着当我与用户分享我的应用程序,这意味着我与优秀的开发人员分享我的代码? :):| – alihaghdoust9

相关问题