jar 패키지 암호 화 방안 공유

6534 단어 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 패키지 암호 화 에 관 한 자 료 는 다른 관련 글 을 주목 하 십시오!

좋은 웹페이지 즐겨찾기