Компиляция C# в Native?C#

Место общения программистов C#
Ответить
Anonymous
 Компиляция C# в Native?

Сообщение Anonymous »

Я думаю, что меня несколько смущает компиляция байт-кода .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?

Подробнее здесь: https://stackoverflow.com/questions/192 ... -to-native
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»