C# - 可执行文件可以解密(可以进行逆向工程)?

时间:2009-10-01 09:26:10

标签: c# c++ reverse-engineering

C#可以进行逆向工程吗?怎么这么容易? 我们可以说C#在安全方面不够好吗?那么C ++与C#相比反编译呢?

8 个答案:

答案 0 :(得分:12)

这是真的!

使用Reflector查看您自己的可执行文件之一。

这是否意味着C#“从安全方面来说还不够好”?不,这并不意味着。

C#的安全性没有任何问题。如果您不希望全世界了解它们,您只需确保不在已发布的可执行文件中放置任何秘密。 (这几乎适用于任何语言,而不仅仅是C#。所有可执行代码都可以进行逆向工程,只是某些语言/框架比其他语言/框架更容易。)

答案 1 :(得分:8)

哦,亲爱的。

即使您用C语言或其他语言编写程序,您也可以始终从可执行文件中提取机器代码(即使它是一些奇怪的自修改代码),然后您始终可以获得程序集表示。这是必要的,因为CPU只能执行机器代码。对于为任何图灵机编写的任何程序来说,这都是正确的。

无论开发人员如何努力混淆代码,在发布后几天,任何游戏或应用程序都会出现裂缝,这说明了这一事实。有混淆技术,但最终,总是可以对机器代码(或.NET的情况下的IL代码)进行逆向工程。还有非常好的装配 - > C反编译器在那里。

接受这样一个事实,即您的代码可以进行逆向工程,并且如果有人需要足够的源代码并且愿意花一些时间在其中。记住这一点来设计你的软件。

答案 2 :(得分:2)

您显然可以使用 Reflactor 查看其源代码。但是使用像Dotfuscator

这样的混淆器可以使它变得有点困难

但是,正如每个人都说你不能让它逆向改造它。

答案 3 :(得分:1)

是的,C#可以是逆向工程师。事实上,这很容易做到。看看Reflector。使用混淆器变得更难,但并非不可能。

请记住,使用C / C ++或任何其他语言编写的应用程序可以进行逆向工程,尽管不像非混淆的C#或Java那样容易。

答案 4 :(得分:1)

每个新版本的C#都很难进行逆向工程。确实,当C#为1.0时,Reflector实际上会显示你的源代码,但现在我们处于3.0,如果你使用的是匿名委托,LINQ,匿名类等,所有高级语法都被编译成“哑” MSIL并不容易将它们逆向工程回原点。

答案 5 :(得分:1)

使用.NET框架编写的任何代码都可以轻松进行逆向工程。这就是混淆的概念所在。

混淆是一种工具使用的技术,它采用基于.NET的程序集输出并尝试加密字符串,更改方法体的流控制,重命名变量,参数和方法名称,从而使因果黑客更难以遵循和“反编译”代码。

混淆并不能保证完全保护您的“专有”代码。要保持代码的最佳安全性,只需将代码保留在私有服务器上即可。重要的是要记住,如果潜在的“黑客”有足够的时间和坚持,所有代码都可以进行逆向工程。

C#安全方面
如果你觉得你有“敏感”代码,你不希望其他用户看到和“解码”,你应该调查在本机Win32环境(C ++或Delphi)中开发这些代码部分,并继续从中获得的好处。 NET框架。

答案 6 :(得分:0)

Google for“Red Gate Reflector” - http://www.red-gate.com/products/reflector/

如果你想阻止这种情况,那么你需要一个混淆器,或者其他一些更高级的保护形式。

答案 7 :(得分:0)

将Reflector与File Disassembler插件http://www.denisbauer.com/NETTools/FileDisassembler一起使用 - 它将为您生成dll中的所有代码。