首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将C#编译成本机?

将C#编译成本机?
EN

Stack Overflow用户
提问于 2009-12-17 13:03:47
回答 11查看 67.3K关注 0票数 79

我想我对将.NET字节码编译成本机代码有点困惑,或者我可能对最终结果感到困惑。所以,请容忍我,因为我试着整理我认为我理解的东西,这样你就可以帮我找出我错过了什么。

我想要做的是将用C#编写的应用程序编译成常规的本地代码,就像我用C编写它一样。我的推理与性能无关,而是与某种程度的保护有关。我明白,我的最终目标并不是不可能(甚至很难)绕过的,但我只是觉得倒转x86程序集比逆转Reflector给我的东西更困难。

现在,如果我把我的C#应用程序扔到Reflector中,我基本上会得到我的源代码。通常,当我将我的非托管C/C++应用程序扔到IDAPro中并使用HexRays反编译器时,我无法得到同样程度的反编译,我不得不通过x86反汇编来理解逻辑流。我的理解是,如此伟大的反编译来自于Reflector,因为应用程序在MSIL中,而不是HexRays试图反编译的更简洁的本机代码。

我不担心客户端机器仍然需要.NET运行时,我不想回避这些问题。我想在我的程序上运行像upx这样的普通软件混淆程序,并将其作为.NET二进制文件执行失败。

我从相关问题上的理解是,ngen做我想做的事情。我试过使用ngen。但是,在将输出文件从C:\Windows\assemblies\...\applicationName.ni.exe目录复制到某个可以双击的位置之后,尝试运行它会产生一个错误,说明它不是“一个有效的Win32应用程序”。此外,当我将applicationName.ni.exe扔到Reflector中时,我得到的输出与仅从applicationName.exe中得到的输出相同。由于applicationName.ni.exe应该是本机代码,所以我希望Reflector会出错,但它没有。如果我应该这样做,为什么Reflector仍然给我这么好的反编译?

所以,我要再次总结一下我的主要问题:如何将我的.NET程序编译成一个反射器不会那么容易分解的本地二进制文件?或者,保护用.NET语言编写的产品不受新手逆向工程师影响的最佳实践是什么?

如果我需要一个不同的工具,我更喜欢免费的东西,而不是像代码墙这样的东西。

谢谢!

更新:--我明白我正在寻找的东西可能会限制语言的一些特性,比如反射,但我认为我对此没有意见。我的代码中没有任何代码会执行任何显式的Assembly.Load调用或任何类似的操作。但是,难道就不能用GetProcAddress/LoadLibrary调用来代替它们吗?

EN

Stack Overflow用户

发布于 2013-08-04 15:53:27

这是可以使用IL2CPU编译器的。IL2CPU是由那些开发cosmos (C#开放源码管理操作系统)的人开发的,只有通过下载COSMOS才能获得。IL2CPU生成的ASM文件可以通过Nasm进行编译(其他一些汇编程序可以工作,但最好使用nasm)。IL2CPU的唯一问题是它内置于宇宙项目,很难让它自己运行。

票数 3
EN
查看全部 11 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1921656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档