сделайте свою банку не декомпилированной

Как я могу упаковать приложение Java в исполняемую банку, которую нельзя декомпилировать (например, Jadclipse)?

Вы не можете. Если JRE может запустить его, приложение может декомпилировать его.

Лучшее, на что вы можете надеяться, это сделать его очень трудным для чтения (заменить все символы комбинациями «l» и «1» и «O» и «0», положить много бесполезного кода и т. Д.). Вы были бы удивлены, насколько нечитаемы вы можете сделать код, даже с относительно тупым инструментом перевода. Это называется обфускацией и, хотя и не совершенным, иногда бывает адекватным.

Помните, вы не можете остановить определенного хакера больше, чем решительный взломщик. То, что вы пытаетесь сделать, это сделать вещи очень трудными для случайного злоумышленника. Когда представлены символы O001l1ll10O , O001llll10O , OO01l1ll10O , O0Ol11ll10O и O001l1ll1OO , и код, который, кажется, ничего не полезен, большинство людей просто сдастся.

Во-первых, вы не можете избежать обратного преобразования кода. Байт-код JVM должен быть простым для выполнения, и есть несколько программ для его обратной инженерии (то же самое относится к .NET CLR). Вы можете только сделать все труднее поднять барьер (т.е. стоимость), чтобы увидеть и понять свой код.

Обычный способ заключается в том, чтобы запутать источник каким-то инструментом. Классы, методы и поля переименовываются на протяжении всей кодовой базы, даже с недопустимыми идентификаторами, если вы решите, что делает код, который невозможно понять. У меня были хорошие результаты с JODE в прошлом. После обфускации используйте декомпилятор, чтобы увидеть, как выглядит ваш код …

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

Вы также можете попытаться преобразовать приложение Java в некоторые windows EXE, которые скроют ключ, что это Java вообще (до некоторой степени) или действительно скомпилируются в машинный код, в зависимости от вашей потребности в JVM-функциях. (Я не пробовал это.)

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

Немного поздно я знаю, но ответ – нет.

Даже если вы пишете на C и компилируете собственный код, есть dissasemblers / debuggers, которые позволят людям пройти через ваш код. Предоставлено – отладка оптимизированного кода без символической информации – боль, но это может быть сделано, мне приходилось иногда это делать.

Есть несколько шагов, которые вы можете предпринять, чтобы сделать это сложнее – например, в windowsх вы можете вызвать API IsDebuggerPresent в цикле, чтобы узнать, отлаживает ли кто-то ваш процесс, и если да, и это релиз-assembly – завершите процесс. Конечно, достаточно решительный атакующий может перехватить ваш вызов IsDebuggerPresent и всегда возвращать false.

Есть целый ряд методов, которые возникли – люди, которые хотят защитить что-то и людей, которые хотят взломать его широко, это настоящая гонка вооружений! Как только вы пойдете по этому пути, вам придется постоянно обновлять / обновлять свои защиты, нет остановки.

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

Предложение с этого сайта (сообщество oracleов)

(чистый путь), Obfuscate вашего кода, существует множество инструментов с открытым исходным кодом и бесплатными инструментами обфускатора, вот их простой список: [Openfind obfuscators lis t]. Эти инструменты делают ваш код нечитаемым (хотя вы все же можете его декомпилировать), изменяя имена. это самый распространенный способ защитить ваш код.

2. (Не так чисто). Если у вас есть определенная целевая платформа (например, windows) или у вас могут быть разные версии для разных платформ, вы можете написать сложную часть своих алгоритмов на языке низкого уровня, таком как C (что очень сложно декомпилировать и понимать) и использовать его как родную библиотеку в вашем приложении Java. это не чисто, потому что многие из нас используют java для своих кросс-платформенных способностей, и этот метод ослабляет эту способность.

и это ниже шаг за шагом: ProtectYourJavaCode

Наслаждайтесь! Держите ваши решения добавленными, нам нужно это больше.

  • java.lang.NoClassDefFoundError: Не удалось инициализировать class XXX
  • Java EE6> Упаковка JSF facelets (xhtml) и ManagedBeans как JAR
  • Командная строка Java с внешним .jar
  • Как совместить библиотеку с моей банкой?
  • Запуск тестов JUnit, содержащихся в баке зависимости, используя Maven Surefire
  • Уменьшение размера приложения для Android (apk)
  • Java: как импортировать файл jar из командной строки
  • Доступ к файлу внутри файла .jar
  • Как сделать JAR-файл, содержащий файлы DLL?
  • чтение файла MANIFEST.MF из файла jar с использованием JAVA
  • включить внешнюю банку при запуске java -jar
  • Давайте будем гением компьютера.