¿Compilando C # a Native?

Creo que estoy algo confundido acerca de compilar el código de bytes .NET a código nativo, o tal vez estoy confundido sobre el resultado final. Así que, por favor, tengan paciencia conmigo mientras trato de ordenar lo que creo que entiendo para que puedan ayudarme a descubrir lo que me estoy perdiendo.

Lo que me gustaría hacer es compilar mi aplicación escrita en C # hasta el código nativo regular como el que obtendría si lo hubiera escrito en C. Mi razonamiento no tiene nada que ver con el rendimiento, sino con cierto grado de protección. Entiendo que mi objetivo final no es imposible (o incluso realmente tan difícil) de eludir, pero siento que invertir el ensamblaje de x86 es más difícil que revertir lo que me da Reflector.

Ahora mismo, si lanzo mi aplicación C # en Reflector, básicamente recupero mi código fuente. Por lo general, cuando lanzo mis aplicaciones C / C ++ no administradas en IDAPro y uso el descompilador HexRays, no recupero el mismo grado de descompilación y tengo que recurrir al desarme de x86 para comprender el flujo lógico. Tengo entendido que dicha gran descompilación proviene de Reflector debido a que la aplicación está en MSIL en lugar del código nativo más conciso que HexRays intenta descompilar.

No me preocupa que la máquina cliente aún necesite los tiempos de ejecución de .NET, no estoy tratando de eludir nada de eso. Me gustaría ejecutar programas de ofuscación de software normales comoupx en mi programa, y ​​hacerlo como un binario .NET falla.

Fue mi entendimiento deesta pregunta relacionada quengen hace lo que quiero He intentado usarngen. Pero después de copiar el archivo de salida de laC:\Windows\assemblies\...\applicationName.ni.exe El directorio a algún lugar donde pueda hacer doble clic y al intentar ejecutarlo produce un error porque no es "una aplicación Win32 válida". Además, cuando lanzo elapplicationName.ni.exe en Reflector, obtengo la misma salida que obtuve solo delapplicationName.exe. Ya queapplicationName.ni.exe se supone que es un código nativo, esperaba que Reflector se fuera por error, pero no lo hizo. Si es así como se supone que debo hacer esto, ¿por qué Reflector todavía me dio una gran descompilación?

Entonces, solo para resumir mi pregunta principal nuevamente: ¿Cómo puedo compilar mi programa .NET en un binario nativo que Reflector no descompilará tan fácilmente? ¿O cuáles son algunas de las mejores prácticas para proteger un producto escrito en un lenguaje .NET de los nuevos ingenieros de ingeniería inversa?

Si necesito una herramienta diferente, preferiría algo gratis y no algo comoCodewall.

¡Gracias!

ACTUALIZAR: Entiendo que lo que estoy buscando podría limitar algunas de las características del lenguaje como Reflexión, pero creo que estoy bien con eso. Ninguno de mi código hace explícitoAssembly.Load Llamadas o algo por el estilo. Pero no podrían ser reemplazados porGetProcAddress/LoadLibrary llama de todos modos?

Respuestas a la pregunta(10)

Su respuesta a la pregunta