Как помешать декомпилировать клиентскую программу?
Существует куча декомпиляторов классов Java, но а если есть задача не дать возможность юзерам откопать исходники ? Я понимаю, что в теории это в принципе невозможно, так как если человек сильно захочет, то даже самую защищенную систему у себя на машине обойдёт. Вопрос в том, как максимально продуманно этому помешать ? Речь идёт именно о клиентских приложениях.
Разными способами: техническими - обфускация, шифрование строк, защита от отладки, перехвата сетевых пакетов и запуска в эмуляторах, применение модулей на C/C++ (NDK), и психологическими - например, дача методам и классам имен, не отражающих реальную суть или не содержащих никакой полезной информации (обфусцированные типа "otokhojt" нельзя считать таковыми - они содержат информацию о том, что создателю есть что прятать и спрятано именно там где обфусцировано, правда этим тоже можно манипулировать - "тупую" обфускацию применять для не ценного, чтобы человек на него отвлекся, захотел произвести как можно больше телодвижений и устал, а ценное спрятано совсем в другом месте, где применены гораздо более умные приемы).
Смотря какая цель преследуется:
1. Не дать воспользоваться вашим кодом для создания другого аналогичного продукта.
2. Скрыть какую-то маленькую "изюминку", которую можно использовать для читерства, если раскопать ее в коде.
Первое - вполне реально. Стоимость доработки вашего кода без исходников будет намного превышать стоимость создания аналогичного продукта с нуля.
Второе - нереально в принципе. Не стоит тратить время на это. Потребность в скрытии "изюминок" возникает обычно вследствие ошибочных архитектурных решений (например, проверка на клиенте того, что по-нормальному должно проверяться на сервере) или ошибочных бизнес-моделей.