Как зашифровать файл.jar
Я работаю в проекте, где нам нужно зашифровать файл.jar, чтобы никто не мог получить доступ к файлам.class, которые находятся внутри файла jar.... есть ли кодировка java, которая может помочь мне зашифровать файл.jar?
10 ответов
Даже если вы зашифруете файл JAR, он должен быть дешифрован, прежде чем JVM сможет его запустить, поэтому вам понадобится другой файл JAR, содержащий классы, которые расшифровывают и загружают в JVM.
Поскольку этот второй файл jar сам по себе не может быть зашифрован, злонамеренный пользователь, желающий увидеть ваши файлы классов, может просто просмотреть классы в этом втором файле jar, а затем расшифровать ваш сверхсекретный файл jar и получить к нему доступ.
Возможно, вы можете повысить безопасность своего кода, используя обфускатор, но в конечном итоге он защитит (сделает это сложнее, но не невозможно) файлы классов от декомпиляции, а не от использования.
Если запутывания недостаточно, вы можете скомпилировать файл JAR в DLL для Windows или SO для Unix/ Linux, что затруднит декомпиляцию, но это не всегда возможно сделать правильно, и обычно это PITA. GCJ может как-то это сделать, и есть другие коммерческие продукты, которые на самом деле компилируют.class/.jar прямо в машинный код.
Однако, пожалуйста, учтите, что не имеет значения, какую безопасность вы в него вложите, поскольку клиентский компьютер ДОЛЖЕН иметь возможность его выполнять, он должен иметь возможность читать его, поэтому независимо от того, какой код будет представлен, вы можете только сделать это. Сильнее.
Если у вас действительно такой секретный алгоритм, что вы не хотите его раскрывать, подумайте о преобразовании его в веб-службу, размещении его на своем сервере, чтобы вам не приходилось отправлять действительный код на клиентские машины и может также лучше предотвратить несанкционированные копии вашего приложения, проверив доступ к этой важной части.
Я предполагаю, что вы знаете о том факте, что любой опытный Java-кодер может перепроектировать Java-инструмент, который вы используете (или пишете), и все же декодировать файлы приложения? Также можно декомпилировать написание пользовательских загрузчиков классов, которые читают ваш "зашифрованный" код, и может быть написан инструмент для его обхода.
Даже с запутыванием и модификацией байт-кода и пользовательскими загрузчиками классов, java можно взломать / декомпилировать, и источник почти всегда можно привести в несколько читабельное состояние.
Вы хотите запутать, а не зашифровать файл JAR.
Популярным выбором для этого в Java является ProGuard.
Насколько я знаю, это не поддерживается стандартной JVM. Но вы можете сделать следующее. Разделите ваше приложение на 2 части. Первый не будет зашифрован. Это будет простой загрузчик, который будет создавать все остальное с помощью пользовательского загрузчика классов. Этот загрузчик классов получит классы как массивы байтов, расшифрует и загрузит их.
Нет. Так как ваша программа должна иметь возможность запускать код, она все равно будет бессмысленной.
Вы можете запутать свой код, хотя декомпиляция файлов.class приведет к менее читаемому коду (бессмысленные имена переменных / классов и т. Д.).
Если вы не хотите предоставлять доступ к файлам классов внутри jar-файла, почему вы должны предоставить jar-файл приложению? Такое ощущение, что твой вопрос не совсем концептуально...
Если вам нужен какой-то особый способ загрузки классов, рассмотрите возможность использования собственного загрузчика классов.
Поставьте пароль или проверку лицензии при запуске приложения. При правильной аутентификации только тогда пользователь сможет запустить приложение дальше.
Для проверки пароля вы должны сгенерировать концепцию закрытого открытого ключа. Для получения лицензии можно использовать некоторое установленное программное обеспечение или подключенное оборудование.
Если вы упаковываете в jar -> просто переименуйте его в jarname.ABCD или любое вводящее в заблуждение расширение или даже снимите расширение и, соответственно, укажите имя jar в вашем приложении.
Вы можете попробовать https://bce.gopiqiu.com/. Вот описание: BCE — это инструменты шифрования java jar/war/class, которые позволяют избежать декомпиляции вашего кода; формат поддержки:jar, Springbootjar, War; поддержка сканирования файлов классов Spring и Tomcat перед загрузкой классов; поддержка встроенного шифрования jar и предотвращение любого расшифрованного класса дампа программы.
Я предпочитаю jCrypt! Это простой инструмент, где вы можете зашифровать классы (и ресурсы)