Задать вопрос
DoctorX
@DoctorX
Веб разработчик

Защита программы от декомпиляции Java, C++, С#

Собственно вопрос:
На чём лучше писать чтобы затруднить декомпиляцию. Посмотрел интерент в суде по всему java программы декомпилируються в код на раз-два. Так ли это? Как с этим дела в C++, С#?
  • Вопрос задан
  • 18953 просмотра
Подписаться 8 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 12
@xredor
C++
И поручить разработку плохому архитектору, он запутает код лучше любого обфускатора.
Можно подумать заодно о собственном упаковщике, кое-кого остановит.
Ответ написан
Monnoroch
@Monnoroch
Ничто не защитит от ручной декомпиляции, специалист все равно разберется. Для автоматической же C++ существенно лучше в этом плане — бинарник почти не хранит метаинформации о коде, соответственно и разобрать программе его сложнее.
Ответ написан
surething
@surething
Лучше вынести чувствительный код в виде SaaS, если это возможно.
Ответ написан
Комментировать
Gorthauer87
@Gorthauer87
Программист
Вы там что, софт для управления ядерными боеголовками пишете?
Ответ написан
Комментировать
Nevecap
@Nevecap
Из 3 языков, C#, Java и C++ сложнее всего декомпилировать C++, так как C++ компилируется в ассемблерный код, тогда как Java и C# в промежуточный (IL) код. Хотя и существуют обфускаторы, которые помогают сильно затруднить декомпиляцию C# и Java. Не до такой степени, как C++, но разбор программ после обфускации может также занять длительное время.
Ответ написан
Комментировать
Nevecap
@Nevecap
Ну, точнее даже не столько декомпиляцию, сколько понимание кода после декомпиляции.
Хотя хороший обфускатор обломает некоторые декомпиляторы. Но не все.
Опять же хороший декомпилятор поможет сделать код относительно читаемым и после обфускации.
В общем, лучше всего дела у С++ в данном плане, насколько я знаю, но и там они не идеальны.
Ответ написан
kivsiak
@kivsiak
software engineer
Не стоит игра свеч. Потребуется — разберут что угодно. А геммороя после обфускации Java кода, особенно активно использующую рефлексию, на ровном месте схлопочете изрядно.
Ответ написан
Комментировать
@sergei-grigorev
Для Java и C# используются обфускаторы, из-за них декомпилляция уже не доставит удовольствия, плюс к этому, обычно в они добавляют в код защиту, некоторый код, приводящий к отказу работы декомпиллятора.
Ответ написан
Комментировать
krovatti
@krovatti
Лучше C++, конечно же. Программы на нём сложнее взломать. По крайней мере мне.
Но, всё же, я бы не определял C++, C# и Java в одну группу. Не правильно это.
Ответ написан
Комментировать
bogolt
@bogolt
В скомпилированной программе на си++ можно найти текстовые строки, имена фукнций и классов. Для того чтобы скрыть значение текстовых строк — программа может хранить их в зашифрованном виде, и расшифровывать перед использованием. Это сильно затруднит понимание того какое именно сообщение собиралась вывести программа, и следовательно что делает та или иная часть кода. Однако у нас еще остались имена функций. По идее их можно вырезать используя strip но гораздо смешнее изменить их так чтобы важные вам фукнции ( например isAppRegistered() ) работали не совсем так как предполагается, например эта фукнция может вызываться по таймеру раз в 10 секунд, хэшировать значения разных переменных и возвращать какой-то результат. Реальная же фукцния проверки регистрации будет называться debugPrintString() и… не будет вызывать никаких окон оповещающих о том что что-то случилось не так. Эти окна опять вызовуться из другого потока, по таймеру в случае если наша debugPrintString() изменила пару значений. )
Ответ написан
Комментировать
@Cryptochild
После того, как вы отдали скомпилированную (но не обработанную никакими средствами защиты) .NET-сборку (написанную на C#, например), то считайте, что отдали и исходники. ILSpy отлично разбирает сборку на исходники и генерирует solution, который отлично открывается в в Visual Studio.
Ответ написан
Комментировать
mihavxc
@mihavxc
Из перечисленных лучше всего С++, так как он компилирует сразу в ассемблерный код и отсутствует мета-информация. Для верности можно поверх обработать специальный ПО, чтобы реализовать антиотладочные механизмы и перемешать секции кода. Из подобных утилит работали с Sentinel Envelope, остались довольны.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы