我使用Microsoft Visual Studio 2012,我想用本机C ++编写应用程序。我不想使用Manged Code(.NET)的原因是因为我不希望我的应用程序被反编译回源代码使用像.NET Reflector这样的工具,但如果我仍然可以使用它会很好我的应用程序中的UI(CLR Windows窗体)。
但是当我在我的Win32项目中添加UI(CLR Windows窗体)时,会弹出以下消息:
这是否意味着从现在起我的所有项目都不会被编译为本机代码,并且可以使用像.NET Reflector这样的工具反编译整个应用程序?
或者它将是“混合”(Native Code + Managed Code)项目ant无法用.NET Reflector之类的工具反编译整个应用程序只能负责UI的某些部分?
P.S。 是的,我知道任何应用程序都可以反编译(!!!),但我要问的是基于.NET的应用程序的反编译工具。使用.NET Reflector,您可以从.NET应用程序“获取原始源代码”。所以我的问题是,是否有可能“从这个应用程序中取回原始源代码”,或者它将以某种方式“混合”代码(manged + native)并且不可能将其反编译回原始代码像.NET Reflector这样的工具的源代码?
答案 0 :(得分:4)
如果“反编译”menas“以取回原始来源”,则在可执行文件中没有任何符号表时,就无法实现。
如果“反编译”意味着“获得一个在语义上等同于原始的用户可修改代码并且可以编译回可执行程序”,这总是可行的(即使直接修改机器代码本身:有人认为明白它!)。对于那些与众不同的大型观众来说,这是多么容易理解。
营销的一般规律说“唯一不可复制的是永远不会被出售的东西!”这与软件的物理性质有关。没有解决方法(除了为另一个宇宙工作)