Как я могу предотвратить обратный инжиниринг файлов JavaEE 6 .war? - PullRequest
9 голосов
/ 10 ноября 2011

У нас есть несколько приложений JavaEE 6 (файлы .war), которые нам необходимо защитить от обратного инжиниринга, но, похоже, вариантов не так много.

Мне нравится идея зашифрованного файла .jar (SJAR), используемого в продуктах JarCrypt / JInstaller , но не ясно, будет ли JarCrypt / JInstaller работать в приложении JavaEE 6. сервер как Glassfish3.1. Зашифрованные файлы SJAR должны быть расшифрованы собственной библиотекой с помощью пользовательского загрузчика классов, поэтому, очевидно, мне придется добавить пользовательский загрузчик классов в Glassfish.

Кто-нибудь использовал технологии JInstaller / JarCrypt? Они работают на сервере приложений?

Я также рассмотрел запутывание, но для приложений JavaEE есть много проблем. Я должен был бы оставить все веб-сервисы и JNDI поиски в покое. Использование таких вещей, как a.b.c.MyClass.class (то есть для создания log4j Loggers) проблематично. Чтение лог-файлов становится затруднительным. И для всех этих проблем запутывание делает почти ничего, чтобы защитить наш код.

Я пробовал Proguard, но, очевидно, он не может работать с библиотеками JavaEE 6 .

Существуют ли другие альтернативы или они касаются всех имеющихся у меня вариантов?

Спасибо.

Ответы [ 4 ]

2 голосов
/ 18 ноября 2011

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

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

Если ваши приложения работают на Tomcat, вы можетескомпилировали их в нативный код.Или им нужен полный сервер приложений Java EE?

1 голос
/ 19 января 2015

Я работаю над защитой программного обеспечения в течение последних двух лет, и я оценил большинство европейских решений на рынке (извините, мы избегаем американских решений ...).

Существует четыре метода, которые мы рассматривали как защитные решения: - запутывание - шифрование - Компиляция в нативный код - транскодирование

Вы, вероятно, знаете большинство этих методов, за исключением транскодирования.

Запутывание требует много работы для того, что, в конце концов, плохая защита. Но вы можете комбинировать запутывание и со всеми другими приемами.

Шифрование довольно легко взломать (не существует решения для хранения ключа в безопасном месте; даже с помощью ключа его легко получить). Кроме того, существует обходной путь кражи расшифрованных классов из памяти (или, точнее, ключа шифрования).

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

Наконец, есть Транскодирование (о котором очень мало информации в Интернете). Это единственная эффективная защита от опытных реверс-инженеров. Это боль, чтобы сломать, потому что это требует лет работы. Это не невозможно, но требует очень и очень долгого времени. Кроме того, каждый раз, когда выпускается новый патч, вы должны снова запускать реверс-инжиниринг, потому что при каждом выпуске код полностью отличается. Есть ли недостаток? Да, производительность. Но его можно комбинировать со всеми другими методами, и в нем нет ограничений на развертывание (сервер приложений, генерация динамических классов и т. Д.) Или Java-ограничений (рефлексия и т. Д.).

Серебряной пули нет. Каждое решение может быть использовано в зависимости от вашей цели. Защита от правительства или от сценаристов не одно и то же ... Выберите решение относительно плюсов и минусов и, что более важно, относительных ограничений (таких как Jarcryp и запутывание в веб-приложении).

Чтобы ответить на вопрос о Jarcryp (и других решениях, использующих шифрование), возможно: вам просто нужно попросить Componio (предоставляя JInstaller / Jarcryp) предоставить вам загрузчик классов, который наследуется от загрузчика классов сервера приложений, который вы использовать.

Транскодирование работает со всеми серверами приложений.

0 голосов
/ 28 июля 2015

Обфускация WAR-файла с помощью ProGuard поможет вам в значительной степени зашифровать ваш war-файл. Для более подробной информации перейдите по ссылке http://bratonfire.blogspot.in/2012/01/war-file-obfuscation-using-proguard.html

0 голосов
/ 04 февраля 2012

Профилактика на самом деле невозможна.Лучшее, на что вы можете надеяться, - это слегка поднять барьер, что в значительной степени приведет к тому, что вы почувствуете себя хорошо - 1001 * Безопасность через неизвестность означает безопасности вообще нет .Продукты, которые утверждают, что делают это, фактически торгуют силиконовым змеиным маслом

...