Задать вопрос

Как помешать декомпилировать клиентскую программу?

Существует куча декомпиляторов классов Java, но а если есть задача не дать возможность юзерам откопать исходники ? Я понимаю, что в теории это в принципе невозможно, так как если человек сильно захочет, то даже самую защищенную систему у себя на машине обойдёт. Вопрос в том, как максимально продуманно этому помешать ? Речь идёт именно о клиентских приложениях.
  • Вопрос задан
  • 668 просмотров
Подписаться 4 Оценить 1 комментарий
Пригласить эксперта
Ответы на вопрос 3
@jkotkot
режим сарказма
1) Наговнокодить
2) Вырубить дебаг режим при компиляции.
3) Использовать какой-нибудь обфускатор типа ProGuard

Больше нет смысла заморачиваться.
Ответ написан
Комментировать
@nirvimel
Смотря какая цель преследуется:
1. Не дать воспользоваться вашим кодом для создания другого аналогичного продукта.
2. Скрыть какую-то маленькую "изюминку", которую можно использовать для читерства, если раскопать ее в коде.

Первое - вполне реально. Стоимость доработки вашего кода без исходников будет намного превышать стоимость создания аналогичного продукта с нуля.
Второе - нереально в принципе. Не стоит тратить время на это. Потребность в скрытии "изюминок" возникает обычно вследствие ошибочных архитектурных решений (например, проверка на клиенте того, что по-нормальному должно проверяться на сервере) или ошибочных бизнес-моделей.
Ответ написан
Комментировать
xappymah
@xappymah
Возможно, вам стоит посмотреть на проект Excelsior JET.

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

Собственно, прямых ссылок не буду давать, чтобы совсем не наглеть, учитывая, что я один из инженеров, работающих над этим проектом :)
Вместо этого дам ссылку на доклад моего коллеги на JavaZone на тему JET'а и AOT-компиляции Java-приложений в целом:
https://vimeo.com/181905276
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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