Проверка фактов:насколько уязвимы приложения .NET к декомпиляции?

StackOverflow https://stackoverflow.com/questions/497980

  •  20-08-2019
  •  | 
  •  

Вопрос

Я наткнулся на этот пост в блоге MSMobiles.com, в котором, среди прочего, говорится следующее:

.Net великолепен во многих отношениях, но для коммерческих приложений?Ни за что!Любой может просто взгляните на свой исходный код.Высококлассный Обфускатор очень поможет, но любой решительный хакер исправит ваш код менее чем за день.Я знаю это по печальному опыту, несмотря на то, что потратил 1000 долларов на средства борьбы с пиратством и обфускации.

Затем в нем говорится следующее о разработке коммерческих приложений для Windows Mobile в .NET:

будьте готовы к задержке на 1 день, после которой ваши конкуренты скопируют вашу функциональность и разместят свои собственные приложения с такой же функциональностью в Skymarket

Для тех, кто знаком с .NET:это правда или бессмыслица?Является ли эта проблема каким-то образом специфичной для Windows Mobile, или она применима и к .NET также в Windows?Это просто показалось мне удивительным, потому что я знаю, что Microsoft пишет значительное количество собственного клиентского программного обеспечения на .NET (и что многие производители пишут дорогие приложения на Java, у которых, по-видимому, те же проблемы), и кажется странным, что их IP-адрес может быть украден так легко.

Это было полезно?

Решение

Я бы сказал, что это в значительной степени бессмысленно по той простой причине, что если ваше конкурентное преимущество и успех бизнеса зависят от какого-то алгоритма в вашем коде, то вы уже облажались.Успешные приложения - это гораздо больше, чем просто код, это одна из многих частей.

Если это то, чего вы действительно боитесь, то я бы вложил деньги в обфускацию и предварительно оплатил услуги какого-нибудь юрисконсульта (довольно дешевого, хотите верьте, хотите нет), который отправит письма о прекращении деятельности от вашего имени конкуренту, который, по вашему мнению, украл ваш код.Хотя юридически это практически ни к чему не приведет - угроза иска - едва ли не ваш самый эффективный инструмент.

Другие советы

В легкости декомпиляции .NET-приложения все же есть доля правды.(Это относится к любому .СЕТЕВОЕ приложение, а не только к тем, которые запущены на Windows Mobile.)

IT является относительно легко взять скомпилированную сборку и получить исходный код, используя как бесплатные, так и коммерческие инструменты.(Просто взгляните на Reflector.) При этом вы можете использовать обфускатор, который остановит большинство людей, но замедлит работу только решительного хакера.

Несмотря на все это, существуют декомпиляторы практически для любого языка, и если компания (или человек) полна решимости увидеть внутренности вашего продукта, они найдут способ, несмотря ни на что.

Чтение сообщения, на которое вы ссылаетесь, действительно звучит так, как будто оно было написано кем-то, у кого был очень неудачный опыт работы с Microsoft, .NET и / или Windows Mobile, и некоторые из сделанных утверждений в лучшем случае неверны.(В частности, о том, что это не является проблемой на iPhone, потому что это написано в "собственном" коде.)

Хотя это может быть немного проще с промежуточными языками байт-кода, дело в том, что вы можете сделать это с любым языком.

Исполняемый код может быть легко дизассемблирован и просмотрен. IDA-Pro (ИДА-Про) может загружать собственные исполняемые файлы, дизассемблировать их, а с помощью плагина Hex-Rays он может даже предоставлять псевдокод, подобный C, для перехода.Даже без шестнадцатеричных лучей не так уж сложно пройти через ассемблерный код и вывести, что происходит.Именно так создаются кейгены для лицензионных продуктов.Они дизассемблируются, и программисты изучают соответствующий ассемблерный код, ответственный за генерацию и проверку ключей продукта.

Однако стоимость удаления любой важной функции из приложения довольно высока.Таким образом, если это не какая-то высококонкурентная функция, включающая алгоритмы, составляющие коммерческую тайну, почти всегда проще и экономически выгоднее просто нанять программистов для написания ее с нуля, чем перепроектировать.

Если вы ищете более высокий уровень защиты, вы можете запутать свой код и использовать коммерческий упаковщик, который усложняет разборку программы (и предотвращает использование каких-либо отражателей во время упаковки приложения).Однако их можно обойти и распаковать, а запутанный код на самом деле совсем не замедляет хороший запуск.Так что не стоит слишком зацикливаться на этом, .NET, по моему собственному мнению, так же подходит, как и любой другой язык без байт-кода.

Ваш единственный вариант - иметь сетевое приложение - вы распространяете только клиентов, которые запрашивают главный сервер.Таким образом, источник, который выполняет тяжелую работу, является вашим секретом.

Это относится и к .NET в Windows также.Это также относится к Java.

Вы можете запутать код, и некоторые из обфускаторов хороши (вы можете легко найти хороший через Google), но, в конце концов, вам придется проявлять бдительность при защите вашего IP, поскольку обфускаторы не являются совершенной технологией.Обфускаторы побеждают декомпиляторы, которые становятся умнее, и побеждают обфускаторы, которые становятся умнее, и т.д., и т.п.

Технически, вы можете выяснить, как работает программа на C ++ или любая другая программа, просмотрев скомпилированный код.Просто уровень, до которого он скомпилирован, намного сложнее, чем, скажем, IL (вот до чего .Скомпилированы приложения NET).

Иди и погугли в Reflector.Да, это реально, да, это случается, и да, вам может помочь запутывание, но оно не идеально.А затем идите и поразмышляйте над самим Отражателем.Не уверен, что Redgate все еще запутывает его, но оригинальный автор запутал его, используя непечатаемые символы preety nasty для работы.

Однако та же проблема существует и с Java, так что выбирайте свой posion.Ооо, настоящий целеустремленный хакер взломает любое приложение на любой платформе, поэтому выбирайте платформу с учетом ее функциональности, соответствующей вашей проблеме и вашему набору навыков.

Используйте инструменты, которые помогут повысить вашу безопасность и поднять планку.

Одна из приятных особенностей IL заключается в том, что он полностью определяет все типы по их полному имени.Таким образом, когда вы смотрите на запутанный код, скажем, в Reflector, у вас может быть дюжина переменных в одном классе с одинаковым именем, но поскольку они полностью определены в IL, среда выполнения не имеет с ними проблем.

Читать очень легко .Сетевая сборка.Вы можете попробовать сами:

http://www.codeproject.com/KB/dotnet/NetDasm.aspx http://www.shutterspeaks.com/2006/08/27/how-to-disassemble-net-assembly-files/

Существуют доступные обфускаторы, которые усложняют работу.С Mono (реализация .Net с открытым исходным кодом) также возможно скомпилировать .net-код в исполняемый файл, что должно значительно усложнить дизассемблирование.

Да, Каспер, безусловно, прав, вы всегда можете просто посмотреть на машинный код.Хотя более сложные объектно-ориентированные отношения, такие как полиморфизм, трудно различить на уровне ассемблерного кода.

Но, на мой взгляд, весь подход к защите исходного кода порочен.Философия открытого исходного кода заключается в том, что публичное изучение вашего кода помогает сделать ваше программное обеспечение лучше, потому что все больше людей находят ошибки и бреши в системе безопасности.Также, Закон Лайнуса его используют все больше и больше крупных компаний, таких как Sun, Google и т.д.

Интеллектуальная собственность программного обеспечения на самом деле заключается не только в самом коде, но и в идее, положившей начало продукту, знаниях, полученных при разработке, тестировании и развертывании продукта, а также в инфраструктуре, участвующей в исправлении, обслуживании и совершенствовании продукта.

Наличие кода для приложения во многом похоже на наличие автомобиля.Конечно, вы можете разобрать его на части и посмотреть, как именно он был собран, но можете ли вы начать выпускать автомобили на следующей неделе только потому, что у вас есть эти знания?Вряд ли.

Я давно им не пользовался, но Salamander.NET преобразует приложения .NET в собственные приложения Win32 (без каких-либо зависимостей от платформы).Не уверен, обновлялся ли он когда-либо до .NET 2.0 или выше, но в версии 1.1 он работал еще в 2005 году.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top