Я знаю, многие подобные вопросы были заданы здесь. Я не спрашиваю, могу ли я защитить свой скомпилированный Java-класс, потому что, очевидно, вы скажете «нет, вы не можете». Я спрашиваю, что является самым известным методом защиты классов Java от декомпилирования? Если вы знаете какую-либо исследовательскую или академическую работу в этой области, пожалуйста, дайте мне знать. Также, если вы использовали некоторые методы или программное обеспечение, поделитесь опытом? Любая информация будет очень полезна. Спасибо.Как защитить скомпилированные классы Java?
ответ
Во-первых, если вы ориентируетесь «только» на рынке Windows, есть очень легко предотвратить «.class в .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 и сфотографировать код с уже запутанным кодом и потоком с запутанным кодом.
Таким образом, наш поток:
- строка запутывание
- запутывания случайного код поток
- Proguard
- окончательный .jar, что зависит от .class, которые (по-разному) динамически генерируемых на стороне сервера.
В дополнение к этому мы выпускаем очень регулярное (и автоматическое) обновление, которое всегда позволяет немного изменить нашу схему защиты клиент/сервер (так что с каждой версией гипотитический злоумышленник должен начинать в основном с нуля).
Конечно, это легче бросить полотенце и думать: «нет ничего, что я могу сделать, чтобы сделать жизнь атакующего труднее, потому что JAD может найти файл обратно .java все равно» (что больше, чем очень спорно и вопиюще неправильно в том случае, когда вы используете конвертер .class в .exe для защиты вашего .class от декомпиляции).
Я сомневаюсь, что это доказательство дурака, хотя я использую Launch4J для упаковки банку в exe. Я считаю, что с правильным пониманием структуры файла exe и помощью Launch4J можно сделать обратное проектирование. Конечно, это будет сложно, чем использование декомпилятора Java. –
У меня небольшая коррекция: Excelsior JET доступен как для Windows, так и для Linux. –
@Yan Cheng CHEOK: Excelsior JET не является оберткой вокруг .jar: он преобразует ваш байт-код Java в собственный исполняемый файл Windows (или Linux). Таким образом, это не «безупречно» в этом, конечно, люди все еще могут попытаться декомпилировать его. Но не существует *, они вернут файл .java, позволяющий скомпилировать .class (потому что больше нет файлов .class, а не байт-кода, это все родной .exe [или исполняемый файл Linux]). Это совсем не похоже на обертку, такую как izpack или Launch4J и т. Д. – SyntaxT3rr0r
Обфускатор (см. http://java-source.net/open-source/obfuscators) будет «скремблировать» код таким образом, что он не будет иметь никакого смысла при декомпилировании.
Есть несколько способов:
- Obfuscation
- Программное шифрование (flawed)
- Аппаратное шифрование (nearly unbreakable but the performance hit is huge)
- Родной сборник
все подробно обсуждаются в моей статье Protect Your Java Code - Through Obfuscators And Beyond
Итак, как вы можете защитить свои классы от декомпиляции? Один ответ - Крема. Crema скремблирует символическую информацию в ваших .class-файлах, чтобы они стали менее уязвимыми к декомпиляции. Символьная информация о том, что Crema скремблирует, включает имя класса, его суперкласс, интерфейсы, имена переменных, методы и т. Д. Эти символические имена необходимы виртуальной машине Java (JVM) для связывания ваших классов с библиотечными пакетами. Crema скремблирует эти символические имена и делает ссылки на них таким же образом, чтобы JVM все же могла достичь правильной связи между классами и пакетами.
Как работает Crema? В принципе, прежде чем распространять свои файлы классов в Интернете, запустите Crema. Crema будет скрещивать символическую информацию, содержащуюся в них, и поместит каждый новый класс в файл 1.crema. Затем ваша задача - переименовать 1.crema в нечто вроде filename.class, прежде чем распространять его в Интернете.
Вы можете попробовать Java Protector. Это лучший способ, чем obfuscation.It делает Native ClassLoader путем изменения источника OpenJDK, может зашифровать классы, которые вы хотите защитить AES, и проанализировать их в своем custom -JRE. Вы можете опубликовать свое программное обеспечение с помощью JRE и распространять безопасность вашего программного обеспечения.
- 1. Как воссоздать скомпилированные классы?
- 2. Скомпилированные классы с ресурсами как проект библиотеки?
- 3. ANT - Как добавить скомпилированные классы динамически
- 4. Как заблокировать скомпилированные классы Java для предотвращения декомпиляции?
- 5. Как загрузить и вызвать java скомпилированные классы из C?
- 6. Как выполнить скомпилированные классы java с библиотеками GPU (Jogamp JOCL)?
- 7. Сканировать скомпилированные классы с SBT
- 8. Скомпилированные классы JiBX не в EAR-файле
- 9. Ошибки, скомпилированные Apache Thrift-генерируемые классы Java, реализующие абстрактный класс
- 10. Как вы можете защитить/зашифровать свои классы Java?
- 11. Можете ли вы назвать скомпилированные классы JRuby из java?
- 12. Как указать для javac, где должны быть скомпилированные классы?
- 13. Может ли архив AAR содержать скомпилированные классы?
- 14. Скомпилированные классы отсутствуют в файле WAR
- 15. Плагин Gradle, который должен загружать скомпилированные классы из проекта
- 16. Как заставить Groovy Script Engine выводить скомпилированные классы в файлы?
- 17. Как запустить Scala скомпилированные классы из другого каталога
- 18. Как включить скомпилированные классы из одного модуля maven в другой?
- 19. Где gradle хранит все скомпилированные классы для проекта ANDROID?
- 20. ant javac не может найти другие скомпилированные классы проекта
- 21. JNI - Невозможно загрузить классы, скомпилированные с помощью netbeans
- 22. Как использовать java скомпилированные библиотеки в python?
- 23. Как защитить или защитить код Java от декомпиляции
- 24. Как найти классы java?
- 25. Как организовать классы Java?
- 26. Скомпилированные классы Scala от Gradle не совместимы с IntelliJ?
- 27. Как заставить scala-maven-plugin make видеть классы, скомпилированные maven-compiler-plugin?
- 28. Предварительно скомпилированные шаблоны Handlebars в среде Java
- 29. шаблоны, скомпилированные в JavaScript в среде Java
- 30. как обновить скомпилированные виды?
Подобный вопрос к вашему - http: // stackoverflow.com/questions/49379/how-to-lock-compiled-java-classes-to-prevent-decompilation –
Вы заинтересованы в предотвращении декомпиляции или защите ваших коммерческих секретов, встроенных в код? – Yuval
@ Yuval - меня интересует и то, и другое ... –