Проверка фактов: насколько уязвимы приложения .NET к декомпиляции? - PullRequest
1 голос
/ 31 января 2009

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

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

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

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

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

Ответы [ 11 ]

9 голосов
/ 31 января 2009

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

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

5 голосов
/ 31 января 2009

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

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

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

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

4 голосов
/ 31 января 2009

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

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

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

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

3 голосов
/ 31 января 2009

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

1 голос
/ 31 января 2009

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

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

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

1 голос
/ 31 января 2009

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

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

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

0 голосов
/ 02 апреля 2009

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

0 голосов
/ 31 января 2009

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

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

0 голосов
/ 31 января 2009

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

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

0 голосов
/ 31 января 2009

Очень легко прочитать сборку .Net. Вы можете попробовать сами:

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

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

...