Как защитить программу от декомпиляции

Собственно вопрос:
На чём лучше писать чтобы затруднить декомпиляцию. Посмотрел интерент в суде по всему java программы декомпилируються в код на раз-два. Так ли это? Как с этим дела в C++, С#?

  • Вопрос задан более трёх лет назад
  • 18357 просмотров

Комментировать
Решения вопроса 0
Ответы на вопрос 12

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

Ответ написан более трёх лет назад
Нравится 9 1 комментарий
Присоединяюсь.

Ничто не защитит от ручной декомпиляции, специалист все равно разберется. Для автоматической же C++ существенно лучше в этом плане — бинарник почти не хранит метаинформации о коде, соответственно и разобрать программе его сложнее.

Ответ написан более трёх лет назад
Нравится 6 2 комментария
ida + hex rays.
Не спорю, но все равно большая часть работы в иде вручную.
Лучше вынести чувствительный код в виде SaaS, если это возможно.
Ответ написан более трёх лет назад

Как защитить программу от Взлома на C#

Комментировать
Нравится 4 Комментировать
Программист
Вы там что, софт для управления ядерными боеголовками пишете?
Ответ написан более трёх лет назад
Комментировать

Нравится 3 Комментировать

Из 3 языков, C#, Java и C++ сложнее всего декомпилировать C++, так как C++ компилируется в ассемблерный код, тогда как Java и C# в промежуточный (IL) код. Хотя и существуют обфускаторы, которые помогают сильно затруднить декомпиляцию C# и Java. Не до такой степени, как C++, но разбор программ после обфускации может также занять длительное время.

Ответ написан более трёх лет назад
Комментировать
Нравится 3 Комментировать

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

Ответ написан более трёх лет назад
Нравится 2 4 комментария

Имеет ли вообще смысл заморачиваться на эту тему? Велика ли вероятность (в случае обычного софта, конечно, не секретного и не ядерного), что кто-то будет копаться в коде?

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

Вероятность — есть.
Заморачиваться — в определённой степени. Выбирать язык по одному этому критерию я бы не стал.
А вот обфускацией в случае C# или Java заморочился бы — оно не требует больших усилий =)

В общем, как бы там ни было, в случае C# и Java проще получить представление об исходном коде даже после обфускации, структура у них такая. C++ значительно сложней декомпилировать, но получить, так сказать, примерный исходный код тоже вполне можно. Но опять же, если надо модифицировать программу, поменяв какие-то определённые её части или вырезав защиту, профи справится и с C++ за вменяемое время. ИМХО.

Реверсинг python программы, почему python не безопасен

software engineer

Не стоит игра свеч. Потребуется — разберут что угодно. А геммороя после обфускации Java кода, особенно активно использующую рефлексию, на ровном месте схлопочете изрядно.

Ответ написан более трёх лет назад
Комментировать
Нравится 2 Комментировать

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

Ответ написан более трёх лет назад
Комментировать
Нравится 1 Комментировать

Читайте также:
Фьюжн программа для торговли инструкция по применению

Лучше C++, конечно же. Программы на нём сложнее взломать. По крайней мере мне.
Но, всё же, я бы не определял C++, C# и Java в одну группу. Не правильно это.

Ответ написан более трёх лет назад
Комментировать
Нравится 1 Комментировать

В скомпилированной программе на си++ можно найти текстовые строки, имена фукнций и классов. Для того чтобы скрыть значение текстовых строк — программа может хранить их в зашифрованном виде, и расшифровывать перед использованием. Это сильно затруднит понимание того какое именно сообщение собиралась вывести программа, и следовательно что делает та или иная часть кода.

Однако у нас еще остались имена функций. По идее их можно вырезать используя strip но гораздо смешнее изменить их так чтобы важные вам фукнции ( например isAppRegistered() ) работали не совсем так как предполагается, например эта фукнция может вызываться по таймеру раз в 10 секунд, хэшировать значения разных переменных и возвращать какой-то результат. Реальная же фукцния проверки регистрации будет называться debugPrintString() и… не будет вызывать никаких окон оповещающих о том что что-то случилось не так. Эти окна опять вызовуться из другого потока, по таймеру в случае если наша debugPrintString() изменила пару значений. )

Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать

После того, как вы отдали скомпилированную (но не обработанную никакими средствами защиты) .NET-сборку (написанную на C#, например), то считайте, что отдали и исходники. ILSpy отлично разбирает сборку на исходники и генерирует solution, который отлично открывается в в Visual Studio.

Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать

Из перечисленных лучше всего С++, так как он компилирует сразу в ассемблерный код и отсутствует мета-информация. Для верности можно поверх обработать специальный ПО, чтобы реализовать антиотладочные механизмы и перемешать секции кода. Из подобных утилит работали с Sentinel Envelope, остались довольны.

Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

java

  • Java
  • +2 ещё

Какие-то проблемы с jdk или с конфигураций?

  • 1 подписчик
  • 14 часов назад
  • 19 просмотров

Источник: qna.habr.com

Защищаем приложение, написанное на C#

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

К сожалению, дотнетовские программы, равно как джавовские, довольно-таки просто «вскрыть». Виной всему байт-код, позволяющий специальными программами легко дизассемблировать и воссоздать первоначальный код. Далеко ходить не нужно за примерами, так как даже VS поставляется с дизассемблером ILDasm.

Декомпилированный код

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

Методы защиты C# приложения

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

Да, серьезные продукты привязывают к электронным ключам, вставляемым в ПК, но у инди-разработчиков подобных возможностей просто нет, да и даже такие решения все же можно эмулировать, хотя и довольно-таки сложно.

Как я уже писал, главная проблема дотнетовских программ, равно как джавашных – легкий способ получения исходников. Да, получить исходный код сейчас просто плевое дело. Например, можно воспользоваться бесплатным dotPeek от JetBrains. Фактически, основанный на базе известного Resharper от этой же студии, данный инструмент позволяет легко и непринужденно вскрыть внутренности исследуемой программы, если незадачливый программист не позаботился о ее своевременной защите.

Читайте также:
При закрытии не отвечающей программы может быть потеряна несохраненная информация

Исследование с помощью dotPeek

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

  • Декомпиляция сборок .NET версий в исходный код C# и IL-код

Для отображения декомпилированного кода dotPeek использует большинство функций, привычных пользователям Microsoft Visual Studio: открытие декомпилированных файлов в отдельных вкладках, подсветка синтаксиса, сворачивание блоков кода, нумерация строк и многое другое.

2) Преобразование и экспорт сборок .NET в проекты Microsoft Visual Studio

Если вы хотите не только исследовать сборку, но и внести в нее изменения, dotPeek позволит вам преобразовать и сохранить ее в проект Microsoft Visual Studio и, таким образом, продолжить работу уже с исходным кодом сборки.

Занятная тулза, не так ли? Но самое главное – dotPeek абсолютно бесплатный, в отличие от «дедушки» .NET Reflector, который раньше был едва ли не стандартом де-факто для декомпиляции дотнетовских приложений. Так как вам все равно нужно будет смотреть то, насколько хорошо вы защитили свое приложение, то dotPeek должен быть у вас всегда. Скачать его можно на сайте https://jetbrains.ru/products/dotpeek/

Естественно, что когда все знают о том, что программу на C# может «взломать» любой, способный крякнуть игру, начинается шевеление и волнение. В итоге, нужно устранить очевидные проблемы в защите.

  • Как бы это банально не звучало, но для начала сделаем обфускациюприложения. Иными словами, мы максимально запутаем исходный код, но сохраним функциональность. Достаточно действенный способ, если бы не одно «но» — на публичные обфускаторы есть масса деобфускаторов. Кроме того, основная масса обфускаторов платные. Вы без труда найдете обзоры наиболее «распиаренных». Могу лишь сказать, что часто их функционал оставляет желать лучшего. Иногда после такой обфускации программа может даже перестать нормально работать, особенно, если вы прошлись по ней взломанным обфускатором. Конечно, Майкрософт в свои студии разработки вставляла бесплатный Dotfuscator Software Services.

Обладает обычными визардами

  • Вернее, он бесплатный только для личного использования, для бизнеса он стоит ну очень много убитых енотов. Он уже интегрирован в Visual Studio. Честно, помню недовольные отзывы о нем в плане неочевидности и прочего, но как по мне, пользоваться им достаточно просто. Да, есть хромые места, но идеальных обфускаторов, думаю вообще не существует. В любом случае, начните хотя бы с него. По крайней мере, у него есть также и защита от отладки. Для новичков он будет весьма и весьма кстати.

Еще один обфускатор, который лично мне нравится – это пресловутый ConfuserEx. Он опенсорсный и дает весьма сильную защиту. Например, можете увидеть то, как он «путает» код и не дает прочитать его с помощью еще одного исследователя ILSpy.

До обфускации

Скачать его можете на https://yck1509.github.io/ConfuserEx/. Тем не менее, его можно все же снять небезызвестным De4dot, при условии, что реверсер его правильно определит, имейте это в виду.

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

3) Новые студии разработки (начиная с 2015) меня больше радуют. Майкрософт разработала технологию .NET Native, позволяющую скомпилировать дотнетовское приложение в нативный код.

Вот так схематично все происходит

А вот этот момент весьма и весьма интересен, так как для реверсера предстанет весьма любопытный плюсовский код, «приправленный» автоматическим кодом AOT-компилятором .NET. Это очень усложнит задачу по взлому и реверсингу приложения. Фактически, я бы посоветовал его. Но проблема есть и у этого способа – все будет только работать на майкрософтовской платформе.

Читайте также:
ТВ канал вариант программа

Резюме

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

C# приложения были изначально уязвимы для реверсинга. В этом плане, они не сильно далеко ушли даже от того же JS, хотя там вообще все очевидно. Обфускация запутает код и инструменты типа dotPeek или ILSpy. Но важно понимать, что все они обрасли дополнительными плагинами, которые позволяют определить защиту и всячески ее снять. Тем не менее, пренебрегать ими не стоит.

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

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

Источник: www.programbeginner.ru

Защита .NET приложения от декомпиляции

Listen to this article

Программы, напи­санные на всех .NET языках (таких как C#, VB.NET, F# и т.д.) очень легко деком­пи­ли­ро­вать, т.к. они хранятся в виде MSIL кода и детальных мета­данных, позво­ля­ющих почти полно­стью восста­но­вить исходный код. Обфускаторы или еще их называют протекторы, препят­ствуют этому, уничтожая все данные способные помочь в реверс-инжи­ни­ринге, и защищая Ваш код.

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

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

Серьезные продукты привязывают к электронным ключам, вставляемым в ПК, но у инди-разработчиков подобных возможностей просто нет, да и даже такие решения все же можно эмулировать, хотя и довольно-таки сложно.

Защищаем свое .NET приложение

Существует очень много протекторов, таких как: Themida, Confuser, Enigma, VMProtect, .NET Reactor. И пожалуй, про Reactor мы и поговорим…

А теперь про саму программу

Нажимаем на Open, и выбираем наш .NET файл для протекта. В Quick Settings желательно включить больше всего функций, дабы поиметь полную защиту. В этой вкладке пока все, идем дальше, Settings!

В принципе, в Settings вкладке вы можете задать дополнительные параметры протекту. Например: в Force Admin Privileges вы можете задать True, и программа будет требовать права администратора; Хотя по сути, если вы задали все параметры в прошлом пункте, то ничего настраивать не надо.

Когда все настроили, жмем на кнопку справа Protect! Начинает идти процесс…

Приложение полностью работает, и расшифровать данную защиту сможет только профессионал, через какой-нибудь debugger.

По итогу

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

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

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

Источник: rucore.net

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru