Я работаю над защитой программного обеспечения в течение последних двух лет, и я оценил большинство европейских решений на рынке (извините, мы избегаем американских решений ...).
Существует четыре метода, которые мы рассматривали как защитные решения:
- запутывание
- шифрование
- Компиляция в нативный код
- транскодирование
Вы, вероятно, знаете большинство этих методов, за исключением транскодирования.
Запутывание требует много работы для того, что, в конце концов, плохая защита. Но вы можете комбинировать запутывание и со всеми другими приемами.
Шифрование довольно легко взломать (не существует решения для хранения ключа в безопасном месте; даже с помощью ключа его легко получить). Кроме того, существует обходной путь кражи расшифрованных классов из памяти (или, точнее, ключа шифрования).
Большинство разработчиков Java считают, что компиляция в нативный код обеспечивает хорошую защиту ... Но она вообще не обеспечивает защиту; на протяжении более 20 лет можно было перевернуть нативный код, и для этого есть несколько очень опытных реверс-инженеров. Есть также несколько хороших реверс-компиляторов для языка Си, которые могут помочь ...
Наконец, есть Транскодирование (о котором очень мало информации в Интернете). Это единственная эффективная защита от опытных реверс-инженеров. Это боль, чтобы сломать, потому что это требует лет работы. Это не невозможно, но требует очень и очень долгого времени. Кроме того, каждый раз, когда выпускается новый патч, вы должны снова запускать реверс-инжиниринг, потому что при каждом выпуске код полностью отличается. Есть ли недостаток? Да, производительность. Но его можно комбинировать со всеми другими методами, и в нем нет ограничений на развертывание (сервер приложений, генерация динамических классов и т. Д.) Или Java-ограничений (рефлексия и т. Д.).
Серебряной пули нет. Каждое решение может быть использовано в зависимости от вашей цели. Защита от правительства или от сценаристов не одно и то же ... Выберите решение относительно плюсов и минусов и, что более важно, относительных ограничений (таких как Jarcryp и запутывание в веб-приложении).
Чтобы ответить на вопрос о Jarcryp (и других решениях, использующих шифрование), возможно: вам просто нужно попросить Componio (предоставляя JInstaller / Jarcryp) предоставить вам загрузчик классов, который наследуется от загрузчика классов сервера приложений, который вы использовать.
Транскодирование работает со всеми серверами приложений.