запутывание веб-приложений Java

Насколько я понимаю, запутывание веб-приложения java просто затруднит чтение вашего приложения, но реверс-инжиниринг все еще возможен.

Моя цель - просто сделать его очень трудным для чтения и не иметь возможности декомпилировать и запускать (не уверен, что это возможно, я думаю, он все равно будет работать только с уродливыми именами переменных??)

Итак, имена переменных, такие как:

Строковое имя пользователя = "asdfsadf";

станет

Строка aw34Asdf234jkasdjl_asdf2343 = "asdfsdaf";

Это правильно:

  1. публичные классы и переменные останутся без изменений
  2. ТОЛЬКО частные строки/классы/методы могут быть переименованы
  3. шифрование строк может использоваться для некоторых конфиденциальных строковых данных, таких как ключи шифрования и т. д.

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


person mrblah    schedule 05.01.2010    source источник
comment
Вы боитесь показать свой код миру? :П   -  person shylent    schedule 05.01.2010


Ответы (6)


Веб-приложения работают на стороне сервера. Клиенты не увидят код, если вы не напортачите.

person Thorbjørn Ravn Andersen    schedule 02.07.2010

Существует множество хороших обфускаторов Java, которые делают то, что вы говорите, и многое другое. Вот некоторые из гугла:

Хотя это значительно усложнит чтение декомпилированного кода (и некоторые декомпиляторы откажутся даже пытаться), имейте в виду, что всегда кто-то может перепроектировать код, если у него есть бинарный, достаточно хорошо осведомлены и терпеливы.

person BlueRaja - Danny Pflughoeft    schedule 05.01.2010
comment
Просто повторюсь, реверс-инженерный источник все равно будет запутан. - person Jeff Storey; 05.01.2010
comment
Декомпилированный код будет запутан; Обратный инжиниринг обычно относится к коду, который декомпилируется «вручную», что просто сложнее сделать с запутанным байт-кодом. - person BlueRaja - Danny Pflughoeft; 05.01.2010

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

(http://www.program-transformation.org/Transform/JavaDecompilers#Java_Bytecode_Decompilers)

Что вам нужно сделать, так это хранить проприетарную часть программного обеспечения в таком месте, где ваши пираты не смогут ее увидеть. Насколько мне известно, это ЕДИНСТВЕННЫЙ способ избежать взлома вашего программного обеспечения.

person Ritwik Bose    schedule 05.01.2010

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

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

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

person Sylar    schedule 05.01.2010
comment
Все, что вы публикуете, может быть реконструировано. Верно. Дело в том, какова стоимость реверс-инжиниринга. - person ; 03.07.2010

http://www.excelsior-usa.com/protect-java-web-applications.html

Отказ от ответственности: я работаю в Excelsior.

http://www.arxan.com/products/server/guardit-for-java/

Отказ от ответственности: я не работаю на Arxan.

person Dmitry Leskov    schedule 23.08.2013

Никакая запутанность не может защитить вас от «декомпиляции и повторной компиляции» (без попытки понять, что делает код). Декомпиляторы не заботятся о нечитаемых именах переменных, равно как и компиляторы.

Между прочим, если кто-то имеет доступ к вашему коду, ему не нужно его декомпилировать, чтобы использовать.

Итак, вопрос на самом деле: Чего вы хотите достичь? Когда вы это знаете, вы можете перейти к следующему вопросу: сколько это стоит и сколько денег я могу заработать?

Обычно это уравнение таково: вы не можете сэкономить/заработать деньги на запутывании, но это стоит вам времени и денег (хорошие запутатели не бесплатны). Так что это отрицательный ROI.

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

Если вы планируете получить деньги от воров и преступников, забудьте об этом. Они не хотят платить вам, несмотря ни на что. Вы можете немного усложнить им жизнь, но за это придется заплатить.

person Aaron Digulla    schedule 25.09.2014