Подтвердить что ты не робот

Как защитить скомпилированные классы Java?

Я знаю, многие вопросы были заданы здесь. Я не спрашиваю, могу ли я защитить свой скомпилированный Java-класс, потому что, очевидно, вы скажете "нет, вы не можете". Я спрашиваю, что является самым известным методом защиты классов Java от декомпилирования? Если вы знаете какую-либо исследовательскую или академическую работу в этой области, пожалуйста, дайте мне знать. Также, если вы использовали некоторые методы или программное обеспечение, поделитесь опытом? Любая информация будет очень полезна. Спасибо.

4b9b3361

Ответ 1

Сначала, если вы нацеливаете "только" на рынок Windows, очень легко предотвратить декомпиляцию ".class to.java": используйте такой инструмент, как Excelsior Jet, который преобразует .jar в .exe.

Это безупречно: невозможно вернуть файл .java, если вы используете Excelsior Jet (так долго для всех людей, говорящих "невозможно предотвратить декомпиляцию файла .class" ), Конечно, злоумышленник может запустить SoftIce и попытаться отследить ваш .exe, но это окажется немного сложнее, чем использование JAD для декомпиляции .class в .java и, конечно же, не позволит найти файл .java.

Теперь, возможно, вы также нацеливаете OS X и Linux, иначе у вас нет $$$ для отключения Excelsior Jet.

Я пишу коммерческое программное обеспечение, написанное на Java. Это программное обеспечение имеет смысл только в случае подключения к Интернету. Следовательно, мы "защищаем" наше программное обеспечение, среди прочего, участвуя в вычислении на стороне сервера: у нас есть несколько .class, которые не будут работать, если они не сгенерированы с серверной стороны, и мы отправляем их по кабелю ( и то, что отправлено на проводе, всегда другое: мы генерируем уникальные одноразовые файлы .class на стороне сервера).

Для этого требуется подключение к Интернету, но если пользователю не нравится, как работает наше программное обеспечение, он может купить один из наших конкурентов, некачественный продукт;)

Декомпиляция не принесет много пользы: вам необходимо взломать программное обеспечение (то есть воспроизводить то, что происходит на стороне сервера), или вы не сможете его использовать.

Мы используем нашу собственную "обфускацию строк", прежде чем использовать Proguard. Мы также используем инструментарий с исходным кодом (мы могли бы также выполнить байт-код), где мы удаляем много вещей из кода (например, "assert", которые мы комментируем) и вводим случайную "обфускацию потока кода" [программное обеспечение может принимать разные пути, но получить тот же результат, это то, что действительно делает программное обеспечение трудно отслеживать]).

Затем мы используем Proguard (который является бесплатным), чтобы сгладить всю нашу иерархию OO и обфускать уже запутанный код-поток-и-string-код.

Итак, наш поток:

  • string obfuscation
  • обфускация случайного кода
  • Proguard
  • final.jar, который зависит от .class, которые (по-разному) динамически генерируются на стороне сервера.

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

Конечно, проще бросить полотенце и думать: "там я ничего не могу сделать, чтобы сделать жизнь злоумышленнику сложнее, потому что JAD может найти файл обратно .java все равно" (который больше, чем очень спорно и откровенно плохого в случае использования конвертера .class в .exe для защиты вашего .class от декомпиляции).

Ответ 2

Обфускатор (см. http://java-source.net/open-source/obfuscators) будет "скремблировать" код таким образом, что он не будет иметь никакого смысла при декомпилировании.

Ответ 3

Существует несколько методов:

все подробно обсуждено в моей статье Защитите свой код Java - через обфускаторы и дальше

Ответ 4

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

Как работает Crema? В принципе, прежде чем распространять свои файлы классов в Интернете, запустите Crema. Crema будет скрещивать символическую информацию, содержащуюся в них, и поместит каждый новый класс в файл 1.crema. Затем ваша задача переименовать 1.crema в нечто вроде filename.class, прежде чем распространять его в Интернете.

КАК ПРОЕКТ JAVA COMPLIED CLASSSES

Ответ 5

Вы можете попробовать Java Protector. Это лучший способ, чем obfuscation.It делает Native ClassLoader путем изменения источника OpenJDK, может зашифровать классы, которые вы хотите защитить AES, и проанализировать их в своем custom -JRE. Вы можете опубликовать свое программное обеспечение с помощью JRE и распространять безопасность вашего программного обеспечения.