Компилирование C # для Native?

Я думаю, что я несколько озадачен компиляцией байт-кода .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-программу в собственный двоичный файл, который Reflector не так легко декомпилирует? Или каковы лучшие рекомендации по защите продукта, написанного на языке .NET, от новичков-реверс-инженеров?

Если мне нужен другой инструмент, я бы предпочел что-то бесплатно, а не что-то вродеCodewall.

Спасибо!

ОБНОВИТЬ: Я понимаю, что то, что я ищу, может ограничивать некоторые особенности языка, такие как Reflection, но я думаю, что меня это устраивает. Ни один из моего кода не делает никаких явныхAssembly.Load звонки или что-нибудь в этом роде. Но нельзя было просто заменить ихGetProcAddress/LoadLibrary все равно звонит?

Ответы на вопрос(10)

Ваш ответ на вопрос