【发布时间】:2010-12-02 22:32:17
【问题描述】:
C# 可以逆向工程,对吗?怎么容易做到这一点? 我们可以说 C# 在安全方面不够好吗?反编译方面,C++ 与 C# 相比又如何呢?
【问题讨论】:
-
你可以说,但你错了。
标签: c# c++ reverse-engineering
C# 可以逆向工程,对吗?怎么容易做到这一点? 我们可以说 C# 在安全方面不够好吗?反编译方面,C++ 与 C# 相比又如何呢?
【问题讨论】:
标签: c# c++ reverse-engineering
这是真的!
使用Reflector 查看您自己的一个可执行文件。
这是否意味着 C#“在安全方面不够好”?不,不是那个意思。
C# 的安全性没有任何问题。如果您不想让全世界知道它们,您只需要确保不会在已发布的可执行文件中放入任何秘密。 (这几乎适用于任何语言,而不仅仅是 C#。所有可执行代码都可以进行逆向工程,只是某些语言/框架比其他语言/框架更容易。)
【讨论】:
亲爱的。
即使您使用 C 或任何语言编写程序,您也始终可以从可执行文件中提取机器代码(即使它是一些奇怪的自修改代码),然后您始终可以获得汇编表示。这是必要的,因为 CPU 只能执行机器代码。对于为任何图灵机编写的任何程序,这本质上都是正确的。
无论开发人员如何努力混淆代码,任何游戏或应用程序在发布几天后都会出现裂缝,这很好地说明了这一事实。有一些混淆技术,但最终,总是可以对机器代码(或 .NET 的 IL 代码)进行逆向工程。还有非常好的汇编 -> C 反编译器。
只要接受这样一个事实,即您的代码可以进行逆向工程,并且如果有人足够需要源代码并且愿意在其中投入一些时间,那么就可以进行逆向工程。请牢记这一点来设计您的软件。
【讨论】:
您显然可以使用 Reflactor 来查看其源代码。但是你可以通过使用像Dotfuscator这样的混淆器来让它变得有点困难
但正如大家所说,你不能让它不可能逆向工程。
【讨论】:
是的,C# 可以进行逆向工程。事实上,这很容易做到。看看反射器。为了使它更难,但并非不可能使用混淆器。
请记住,使用 C/C++ 或任何其他语言编写的应用程序也可以进行逆向工程,尽管不像非混淆 C# 或 Java 那样容易。
【讨论】:
每个新版本的 C# 都更难进行逆向工程。确实,当 C# 在 1.0 时,Reflector 实际上会显示您的源代码,但是现在我们在 3.0 并且如果您使用匿名委托、LINQ、匿名类等。所有高级语法都被编译为“哑” MSIL,并且将它们逆向工程回其原始来源并不容易。
【讨论】:
使用 .NET 框架编写的任何代码都可以轻松进行逆向工程。这就是混淆的概念出现的地方。
混淆是一些工具使用的一种技术,它采用基于 .NET 的程序集输出并尝试加密字符串、更改方法主体的流控制、重命名变量、参数和方法名称,从而使因果黑客更难跟踪和“反编译”代码。
混淆不能保证完全保护您的“专有”代码。为了保持代码的最佳安全性,只需将代码保存在您的私人服务器上。请务必记住,如果准“黑客”有足够的时间和毅力,所有代码都可以进行逆向工程。
C# 安全方面
如果您觉得您的“敏感”代码不想让其他用户看到和“解码”,您应该研究在本机 Win32 环境(C++ 或 Delphi)中开发这些代码部分,并继续享受 . NET 框架。
【讨论】:
“红门反射器”的谷歌 - http://www.red-gate.com/products/reflector/
如果你想防止这种情况发生,那么你需要一个混淆器,或者其他更高级的保护形式。
【讨论】:
将 Reflector 与 File Disassembler 插件 http://www.denisbauer.com/NETTools/FileDisassembler 一起使用 - 它会为您从 dll 生成所有代码。
【讨论】: