Kompilieren von C # zu Native?

Ich glaube, ich bin etwas verwirrt über das Kompilieren von .NET-Bytecode in systemeigenen Code, oder vielleicht bin ich verwirrt über das Endergebnis. Bitte nehmen Sie Kontakt mit mir auf, wenn ich versuche zu klären, was ich verstehe, damit Sie mir helfen können, herauszufinden, was mir fehlt.

Was ich tun möchte, ist meine in C # geschriebene Anwendung in normalen nativen Code zu kompilieren wie ich es bekommen würde, wenn ich es in C geschrieben hätte. Meine Argumentation hat nichts mit Leistung zu tun, sondern eher mit einem gewissen Grad an Schutz. Ich verstehe, dass mein Endziel nicht unmöglich (oder sogar so schwierig) zu umgehen ist, aber ich habe das Gefühl, dass es schwieriger ist, die x86-Assemblierung umzukehren, als das, was Reflector mir gibt.

Wenn ich jetzt meine C # -Anwendung in Reflector stecke, erhalte ich im Grunde genommen meinen Quellcode zurück. Wenn ich meine nicht verwalteten C / C ++ - Anwendungen in IDAPro verwende und den HexRays-Dekompiler verwende, erhalte ich in der Regel nicht den gleichen Grad der Dekompilierung zurück, und ich muss auf das Durchwaten der x86-Disassembly zurückgreifen, um den Logikfluss zu verstehen. Ich verstehe, dass diese großartige Dekompilierung von Reflector kommt, weil sich die Anwendung in MSIL befindet und nicht in dem knapperen nativen Code, den HexRays zu dekompilieren versucht.

Ich habe keine Bedenken, dass der Client-Rechner immer noch die .NET-Laufzeiten benötigt. Ich versuche nicht, irgendetwas davon zu umgehen. Ich würde gerne normale Software wie Verschleierungsprogramme ausführenupx auf meinem Programm, und es als .NET-Binärdatei zu tun, schlägt fehl.

Es war mein Verständnis vondiese verwandte Frage, diengen macht was ich will. Ich habe versucht mitngen. Aber nach dem Kopieren der Ausgabedatei aus demC:\Windows\assemblies\...\applicationName.ni.exe Ich kann auf ein Verzeichnis doppelklicken, und der Versuch, es auszuführen, erzeugt einen Fehler, der besagt, dass es sich nicht um eine gültige Win32-Anwendung handelt. Weiter, wenn ich das warfapplicationName.ni.exe In Reflector erhalte ich die gleiche Ausgabe wie inapplicationName.exe. Schon seitapplicationName.ni.exe Soll nativer Code sein, ich habe erwartet, dass Reflector einen Fehler macht, aber das war nicht der Fall. Wenn das so ist, wie ich es tun soll, warum hat Reflector mich dann immer noch so großartig dekompiliert?

Um meine Hauptfrage noch einmal zusammenzufassen: Wie kann ich mein .NET-Programm in eine native Binärdatei kompilieren, die Reflector nicht so einfach dekompiliert? Oder was sind einige bewährte Methoden zum Schutz eines in einer .NET-Sprache geschriebenen Produkts vor unerfahrenen Reverse-Engineers?

Wenn ich ein anderes Tool benötige, würde ich etwas Freies und nicht etwas Ähnliches bevorzugenCodewand.

Vielen Dank!

AKTUALISIEREN: Ich verstehe, dass das, wonach ich suche, einige der Merkmale der Sprache wie Reflection einschränken könnte, aber ich denke, ich bin damit einverstanden. Keiner meiner Codes enthält explizite InformationenAssembly.Load Anrufe oder ähnliches. Aber konnten diese nicht einfach durch ersetzt werden?GetProcAddress/LoadLibrary trotzdem anrufen?

Antworten auf die Frage(10)

Ihre Antwort auf die Frage