是否可以反编译整个.NET应用程序?

时间:2010-06-23 19:40:46

标签: c# reflection reverse-engineering decompiling

我知道.NET应用很难保护。我使用RedGate Reflector并且知道一般来说你可以从许多.NET dll获得源代码。

然而我的问题是 - 反编译整个应用程序实际上是否可行?

我的意思是 - 创建一个可行的VS解决方案,这样盗版者可以按F5并获得与他的机器上的作者完全相同的结果吗?

6 个答案:

答案 0 :(得分:4)

Reflector有很少的插件允许将程序集转储到代码中:

http://www.denisbauer.com/home/reflectorfiledisassembler

http://filegenreflector.codeplex.com/

但我不确定是否可以创建项目文件。

答案 1 :(得分:1)

对于小型应用程序,它既可行又可行。您必须逐个反编译这些类,并将代码复制/粘贴到Visual Studio中。

对于大型应用程序,尽管可能,但由于复制/粘贴过程变得非常繁琐,因此不太可行。

答案 2 :(得分:1)

这实际上取决于您编写的代码类型。如果您使用C#3及更高版本中的许多新功能(如lambda表达式,自动属性和yield),则反编译的源代码不可运行,并且需要相当多的工作才能使其编译。

即使没有这些功能,我也经常遇到至少一些问题,编译完整winforms应用程序的反编译源代码。

答案 3 :(得分:1)

我认为没有任何东西可以完全自动化这个由多个装配组成的应用程序,但我可以说,将这些碎片拼凑成一个解决方案真的并不难。对于大型应用程序来说可能有点单调乏味,但如果你真的想要它确实可行。

幸运的是,我don't worry about it that much

答案 4 :(得分:1)

现在有很多混淆器可以保护您的.NET应用程序免受反编译。一个这样的混淆器是http://www.red-gate.com/products/smartassembly/index.htm。他们试图将结构良好的.NET IL代码转换为spegatti代码(仍然有效),反编译器无法生成原始代码。这并不是100%肯定的盗版者无法获得可重新编译的代码,但使用混淆器时反编译并不容易。

答案 5 :(得分:1)

是的,您只需从Reflector导出并为您的程序集获得一个完整的可运行项目。 我做了几次。 通常,我必须将项目迁移到我的VS版本,有时需要一些小修复,但一般情况下它都有效。