jar 패키지 암호 화 방안 공유
jar 가방 은 모두 가 잘 알 고 있 으 며 자바 프로젝트 를 포장 하여 얻 은 결과 물이 라 고 믿 습 니 다.그러나 jar 가방 은 치 명 적 인 단점 이 있 습 니 다.그것 은 쉽게 역 컴 파일 되 고 jd-gui 만 사용 하면 자바 소스 코드 를 쉽게 얻 을 수 있 습 니 다.
다른 사람 이 역 컴 파일 하 는 것 을 막 으 려 면 jar 가방 을 암호 화 하 는 것 이 중요 한 일이 다.
오픈 소스 jar 암호 화 는 두 가지 코드 혼동,바이트 코드 변환 으로 나 뉜 다.
바이트 코드 를 헷 갈 리 게 하 는 것 은 주로 유형 명,변수 명 과 방법 명,부분 적 인 매개 변수 명 을 교체 하여 이름 을 무의미 하 게 만 들 고 읽 기 어렵 지만 논리 에 영향 을 주지 않 지만 인내심 이 있 는 사람 에 게 는 알 아 볼 수 있 습 니 다!구체 적 으로 컴 파일 하기 전에 헷 갈 렸 는 지,컴 파일 한 후에 헷 갈 렸 는 지 잘 모 르 겠 습 니 다.
바이트 코드 변환 은 두 조각 으로 나 뉘 는데 하 나 는 암호 화 이 고 컴 파일 된 class 파일 에 대해 바이트 코드 변환 을 할 수 있 습 니 다(암호 화 알고리즘,바이트 코드 가 다 르 거나 연산 또는 자체 정의 규칙 을 사용 할 수 있 습 니 다).하 나 는 복호화 입 니 다.클래스 를 불 러 올 때 암호 화 된 바이트 코드 를 복호화 하 는 것 입 니 다.암호 화 는 로 컬 에서 class 파일 바이트 코드 를 변환 하 는 것 이 간단 하고 방식 도 자 유 롭 기 때 문 입 니 다.복호화 라 는 것 은 주로 클래스 로 더 를 중심 으로 글 을 쓰 고 자바 버 전 실현 과 C/C+버 전 으로 나 눌 수 있 습 니 다.자바 버 전 은 주로-agentJava:xxx.jar 를 바탕 으로 Premain-Class 를 통 해 Instrumentation 에 ClassFileTransformer 를 주입 하여 이 루어 집 니 다.자신 은 ClassFileTransformer 에서 복호화 가 필요 한 class 파일 을 복호화 합 니 다.C/C++는 주로-agentpath:xxx.so 를 사용 하고 JVMTI 를 바탕 으로 C/C++를 통 해 클래스 로드 과정 을 조작 합 니 다.
전체적으로 말 하면 코드 혼동 과 바이트 코드 전환 은 결합 할 수 있다.예 를 들 어 코드 가 혼 란 스 러 운 다음 에 바이트 코드 를 암호 화하 고 실행 할 때 바이트 코드 를 복호화 할 수 있다.코드 가 헷 갈 리 고 손 이 가장 간단 하 며 암호 화 단계 가 낮 으 며 쉽게 풀 립 니 다.바이트 코드 변환,자바 버 전 은 자바 숙련 자 에 게 매우 빠 르 고 암호 화 단계 가 일반적 입 니 다.개인 적 으로 이 방식 의 결함 은 암호 화 하고 싶 은 내용 에 대한 암호 화 입 니 다.그러나 복호화 방식 이 노출 되 었 습 니 다.복호화 방식 을 잘 숨 길 수 있다 면 암호 화 안전 계수 가 매우 높 습 니 다.C/C++버 전 암호 화 수준 이 가장 높 지만 자바 와 C/C++에 대한 숙련 이 필요 하 며 JVMTI 관련 지식 을 연구 해 야 합 니 다.만약 에 기본 적 인 해결 위험 이 없 지만 SpringBoot 등 프레임 워 크 에 대해 그 내부 에서 class 파일 을 직접 분석 하고 해결 해 야 할 구덩이 가 있 습 니 다.
또 다른 문 제 는 jar 암호 화 를 사용 하 는 것 입 니 다.실행 중인 메 인 프로그램 jar 패키지 암호 화 인지 제3자 jar 암호 화 인지 확인 해 야 합 니 다.일부 차이 가 있 습 니 다.
기초 환경 준비
현재 프로젝트 가 Maven 프로젝트 라 고 가정 하면 암호 화 는 매우 쉽 습 니 다.
우선 pom 파일 에 플러그 인 창고 주 소 를 추가 하 는 것 입 니 다.다음 과 같 습 니 다.
<pluginRepositories>
<pluginRepository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</pluginRepository>
</pluginRepositories>
그리고 pom 파일 에 다음 플러그 인 을 추가 합 니 다.
<plugin>
<groupId>com.github.core-lib</groupId>
<artifactId>xjar-maven-plugin</artifactId>
<version>4.0.1</version>
<executions>
<execution>
<goals>
<goal>build</goal>
</goals>
<phase>install</phase>
<configuration>
<includes>
<include>/com/huc/**/*.class</include>
<include>/mapper/**/*Mapper.xml</include>
<include>/*.yml</include>
</includes>
<excludes>
<exclude>/templates/**.*</exclude>
<exclude>/static/**.*</exclude>
</excludes>
</configuration>
</execution>
</executions>
</plugin>
이렇게 해서 우리 의 준비 작업 이 끝 났 습 니 다.주의해 야 할 것 은 includes 는 우리 가 암호 화 하고 자 하 는 내용 을 대표 하고 Ant 표현 식 을 사용 합 니 다.excludes 는 암호 화 할 필요 가 없 는 내용 을 대표 하고 똑 같이 사용 하 는 Ant 표현 식 을 대표 합 니 다.일반적인 상황 에서 우 리 는 이 두 가지 내용 을 반드시 작성 하 는 것 을 권장 합 니 다.만약 에 작성 하지 않 으 면 전체 jar 가방 의 모든 파일 을 암호 화 할 것 입 니 다.그러면 필요 하지 않 고 모든 암호 화 후에 시작 할 때 예상 치 못 한 오류 가 발생 할 수 있 습 니 다.
또한 암호 화 된 jar 패 키 지 는 golang 환경 을 통 해 실행 되 어야 하기 때문에 우 리 는 golang 의 운영 환경 을 미리 설치 해 야 합 니 다.설치 과정 은 자체 바 이 두 를 사용 하 십시오.
암호 화 시작
이제 우 리 는 정식 적 인 암호 화 작업 을 시작 합 니 다.암호 화 과정 은 매우 간단 합 니 다.Maven 의 install 명령 만 사용 하면 자동 으로 포장 할 수 있 습 니 다.명령 은 다음 과 같 습 니 다.
mvn clean install -Dxjar.password=password -Dmaven.test.skip=true
이곳 의 password 는 스스로 비밀 번 호 를 지정 할 수 있 습 니 다.필수 항목 입 니 다.실행 하면 두 개의 파일 을 얻 을 수 있 습 니 다.하 나 는 xjar.go 의 go 소스 파일 이 고 하 나 는 프로젝트 의 xjar 패키지 입 니 다.즉,암호 화 된 jar 패키지 입 니 다.
암호 화 된 jar 패키지 실행
암호 화 된 jar 패 키 지 를 실행 하려 면 먼저 xjar.go 원본 파일 을 컴 파일 하여 jar 패 키 지 를 생 성 해 야 합 니 다.컴 파일 방식 은 다음 과 같 습 니 다:
go build ./xjar.go
컴 파일 후 xjar.exe 실행 기 를 생 성 합 니 다.다음 명령 을 사용 하면 암호 화 된 jar 패 키 지 를 실행 할 수 있 습 니 다.
./xjar.exe java -jar ./**.xjar
자바-jar 를 사용 하기 전에 시동 기 를 추가 하면 편리 하 다 는 것 을 알 수 있 습 니 다.후기
역 컴 파일 을 방지 하려 면 jar 가방 이 역방향 으로 풀 리 는 것 만 방지 할 수 있 습 니 다.사용자 의 사용 시간 을 제한 하려 면 시간 에 따라 비용 을 지불 하려 면 어떻게 해 야 합 니까?
license 암호 화 기술 에 대해 말씀 드 리 겠 습 니 다.다음 글 은 프로젝트 에 license 를 추가 하여 사용자 의 사용 을 제한 하 는 방법 에 대해 말씀 드 리 겠 습 니 다.
다른 암호 화 방안 참고:
ClassFinal: Mr.K/ClassFinal
바이트 코드 를 바탕 으로 자바 버 전 을 바 꾸 면 국민 들 이 실현 할 수 있 습 니 다.아주 좋 습 니 다.SpringBoot 에 대한 지원 도 좋 습 니 다.그 논 리 는 바로-agentJava:xxx.jar 라 는 원 리 를 바탕 으로 암호 화 할 때 class 파일 을 두 번 처 리 했 습 니 다.한 번 은 class 파일 의 바이트 코드 를 완전히 암호 화 했 습 니 다.한 번 은 class 파일 에 대한 혼동 입 니 다.이 혼동 은 구성원 과 방법 을 유지 하 는 것 입 니 다.방법 내부 구현 숨 기기;복호화 할 때 이 클래스 가 자신 이 암호 화 한 것 이 라면 완전히 암호 화 된 바이트 코드 를 찾 아 복호화 하고 자신 이 암호 화 하지 않 았 다 면 건 너 뛰 었 을 것 이 라 고 판단 합 니 다.class 파일 에 대한 혼동 은 SpringBoot 등 3 자 프레임 워 크 가 class 파일 을 직접 분석 하 는 데 편리 하 다 는 것 이다.좋 은 점 은 도구 꾸러미 라면 암호 화 된 후에 다른 사람 에 게 프로 그래 밍 을 할 때 인용 하거나 컴 파일 하 는 데 영향 을 주지 않 지만 실행 할 때 암호 화 된 측의 지원 이 필요 하고 비밀 키 를 제공 해 야 한 다 는 것 이다.비교적 유연 하고 사용 하기 좋 으 며 이 방식 의 통 일 된 결함 도 존재 하지만 메 인 프로그램 jar 암호 화 를 지원 하고 단독 제3자 도구 jar 암호 화 를 지원 합 니 다.
JarEncrypt: https://github.com/zhikun0704/api-zxv-jvmit
바이트 코드 를 바탕 으로 C/C++버 전 을 변환 하고 JVMIT 개인 을 바탕 으로 이 루어 진 것 을 조금 연구 한 결과 일부 class 암호 화 를 지원 하 며 일반 자바 응용 에 대한 문제 가 크 지 않 지만 SpringBoot 프로젝트 지원 에 문제 가 있 을 수 있 습 니 다.본인 의 C++수준 이 유한 하기 때문에 심층 적 인 연구 가 없 기 때문에 C/C++와 자바 가 모두 익숙 한 대신 이 시간 이 있 으 면 완전한 것 을 만 들 기 를 바 랍 니 다.
이상 은 jar 패키지 암호 화 방안 이 공유 하 는 상세 한 내용 입 니 다.jar 패키지 암호 화 에 관 한 자 료 는 다른 관련 글 을 주목 하 십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Android Studio를 사용하여 실행 가능한 jar 만들기Android Studio를 사용하여 실행 가능한 항아리를 만드는 방법을 설명합니다. OS 버전은 다음과 같습니다. Android Studio 버전은 다음과 같습니다. 자바 버전은 다음과 같습니다. 다음 절차에 따라...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.