Компилирование 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)

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