1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/roseboy-classfinal

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

ClassFinal

Описание

ClassFinal — это инструмент безопасной шифровки Java class файлов, поддерживающий прямое шифрование JAR и WAR пакетов без необходимости изменения исходного проектного кода. Инструмент совместим с spring-framework и позволяет избежать утечки исходного кода или декомпиляции байткода.

Git: https://gitee.com/roseboy/classfinal

Описание модулей проекта

  • classfinal-core: Ядро инструмента ClassFinal, где находится большинство кода шифровки;
  • classfinal-fatjar: Упакованная версия инструмента ClassFinal в виде независимого исполняемого JAR файла;
  • classfinal-maven-plugin: Maven плагин для автоматической шифровки при сборке;

Функциональные возможности

  • Шифровка готовых JAR/WAR пакетов без необходимости изменения исходного проектного кода.
  • Поддержка запуска зашифрованных проектов без необходимости изменения конфигураций Tomcat или Spring.
  • Поддержка обычных JAR пакетов, JAR пакетов Spring Boot и WAR пакетов Java Web.
  • Поддержка фреймворков Spring Framework и Swagger, требующих сканирования аннотаций или генерации байткода при старте.
  • Поддержка Maven плагина, который автоматически шифрует пакеты во время сборки.
  • Поддержка шифрования зависимостей JAR в WEB-INF/lib или BOOT-INF/lib.
  • Возможность привязки к конкретному компьютеру, что ограничивает запуск зашифрованного проекта только на этом компьютере.
  • Поддержка шифрования конфигурационных файлов Spring Boot.## Требования к среде JDK 1.8+

Инструкция по использованию

Скачивание

Скачать здесь

Шифрование

Выполните следующую команду:

java -jar classfinal-fatjar.jar -file yourproject.jar -libjars a.jar,b.jar -packages com.yourpackage,com.yourpackage2 -exclude com.yourpackage.Main -pwd 123456 -Y
Параметры команды
-file        Полный путь до JAR/WAR файла для шифровки
-packages    Названия пакетов для шифровки (может быть пустым; несколько значений разделены запятой)
-libjars     Названия JAR файлов в директории lib для шифровки (может быть пустым; несколько значений разделены запятой)
-cfgfiles    Конфигурационные файлы для шифровки, обычно расположенные в директории classes (может быть пустым; несколько значений разделены запятой)
-exclude     Названия классов для исключения из шифровки (может быть пустым; несколько значений разделены запятой)
-classpath   Директория внешних зависимостей JAR, например /tomcat/lib (может быть пустым; несколько значений разделены запятой)
-pwd         Пароль шифровки, если используется символ #, то используется режим шифровки без пароля
-code        Машина-код, создается на привязанной машине, после шифровки проект может выполняться только на этой машине
-Y           Безопасный режим, без этого параметра будет запрос на подтверждение информации выше
```Результат: Создается файл yourproject-encrypted.jar, этот файл является зашифрованным JAR файлом; зашифрованный файл не может быть выполнен напрямую, требуется настройка javaagent.> Примечание:
> Выше приведены примеры выполнения с помощью параметров. Также можно запустить командой `java -jar classfinal-fatjar.jar`, следуя указаниям в консоли.### Конфигурация плагина Maven

Добавьте следующую конфигурацию плагина в pom.xml проекта, который требуется зашифровать. На данный момент последняя версия — 1.2.1.
```xml
<plugin>
    <!-- https://gitee.com/roseboy/classfinal -->
    <groupId>net.roseboy</groupId>
    <artifactId>classfinal-maven-plugin</artifactId>
    <version>${classfinal.version}</version>
    <configuration>
        <password>000000</password><!-- После шифрования и сборки pom.xml будет удален, поэтому не беспокойтесь о том, что найдете этот пароль в jar-файле -->
        <packages>com.yourpackage,com.yourpackage2</packages>
        <cfgfiles>application.yml</cfgfiles>
        <excludes>org.spring</excludes>
        <libjars>a.jar,b.jar</libjars>
    </configuration>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>classFinal</goal>
            </goals>
        </execution>
    </executions>
</plugin>

Выполнение команды mvn package автоматически создаст зашифрованный jar-файл yourproject-encrypted.jar в директории target.

Параметры плагина Maven совпадают с параметрами для прямого запуска; подробнее см. описание параметров выше.

Безпарольный режим

Для шифрования установите параметр -pwd равным значению #. При запуске пароль вводить не нужно; если это war-пакет, при запуске укажите параметр -nopwd, чтобы пропустить ввод пароля.

Установка машины

Установка машины позволяет запускать зашифрованный проект только на конкретной машине;На машине, которая должна быть связана, выполните следующую команду, чтобы сгенерировать код машины:

java -jar classfinal-fatjar.jar -C

При шифровании используйте параметр -code для указания кода машины. Машина может быть связана как с использованием кода машины, так и с использованием пароля.### Запуск зашифрованного jar

Зашифрованный проект требует использования аргумента -javaagent для запуска. Проект расшифровывает классы во время запуска полностью в памяти, не оставляя никаких расшифрованных файлов.

Функция расшифровки уже включена в ваш jar-файл yourpaoject-encrypted.jar, поэтому при запуске вам не потребуется дополнительный jar-файл.

Запуск jar-проекта выполняется следующей командой:

java -javaagent:yourpaoject-encrypted.jar='-pwd 0000000' -jar yourpaoject-encrypted.jar

// Параметры:
// -pwd      Пароль зашифрованного проекта
// -pwdname  Название переменной окружения, содержащей пароль

Или вы можете запустить jar без указания пароля, после чего ввести его в консоли при запуске. Этот метод рекомендован.

java -javaagent:yourpaoject-encrypted.jar -jar yourpaoject-encrypted.jar

Порядок получения пароля был изменён следующим образом: пароль передаётся через аргументы командной строки || через переменные окружения || из файла с паролем || вводится в консоль || вводится через графическое окно || программа завершает работу.### Запуск зашифрованного war-файла в Tomcat

Установите зашифрованный war-файл в папку tomcat/webapps, в файл tomcat/bin/catalina добавьте следующие параметры:

# Linux
CATALINA_OPTS="$CATALINA_OPTS -javaagent:classfinal-fatjar.jar='-pwd 0000000'";
export CATALINA_OPTS;

# Windows
set JAVA_OPTS="-javaagent:classfinal-fatjar.jar='-pwd 000000'"

# -pwd       Пароль для шифрованного проекта
# -nopwd     При отсутствии пароля, добавьте этот параметр для пропуска этапа ввода пароля
# -pwdname   Название переменной окружения, содержащей пароль

Этот инструмент использует алгоритм AES для шифрования class-файлов. Пароль является ключом безопасности, поэтому сохраните его в надёжном месте и не раскрывайте третьим лицам.

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

После шифрования методы остаются доступными для сканирования аннотаций Spring, Swagger и других систем; при этом тело метода очищается, что делает невозможным чтение содержимого метода при декомпиляции; когда класс загружается класслоадером, реальное тело метода дешифруется и внедряется.

Для обеспечения безопасности проекта во время выполнения, при запуске JVM добавьте параметр -XX:+DisableAttachMechanism.## Версия

  • v1.2.1 исправлены ошибки
  • v1.2.0 добавлена возможность использования шаблонов для параметров packages, libjars, cfgfiles, exclude
  • v1.1.7 поддерживается шифрование конфигурационных файлов Spring Boot; добавлена возможность считывать пароль из переменных окружения
  • v1.1.6 добавлена функциональность привязки к конкретному устройству
  • v1.1.5 добавлена возможность шифрования без пароля, позволяющая запускать проект без ввода пароля, но это менее безопасно
  • v1.1.4 при запуске jar в чистой консоли пароль считывается из файла конфигурации, после чего файл очищается
  • v1.1.3 добавлено графическое окно для ввода пароля
  • v1.1.2 исправлены проблемы запуска jar на Windows после шифрования
  • v1.1.1 при запуске jar пароль вводится в консоль, без необходимости указывать его в аргументах командной строки
  • v1.1.0 при шифровании jar-пакета добавляется код для дешифрования в сам jar-пакет, без необходимости использовать дополнительные jar-файлы
  • v1.0.0 первый официальный выпуск версии

Декларация лицензии

Apache-2.0

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Инструмент для шифрования байт-кода Java. Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/roseboy-classfinal.git
git@api.gitlife.ru:oschina-mirror/roseboy-classfinal.git
oschina-mirror
roseboy-classfinal
roseboy-classfinal
master