JNI와 함께 사용하기 위한 Java .class - .cpp 변환기
현재는 Java 8만 완전히 지원합니다. Java 9+ 및 Android 지원은 완전히 실험적입니다.
경고: 이 도구는 코드 속도를 크게 저하시키므로 블랙리스트/화이트리스트 사용을 권장합니다(예: 전체 Minecraft .jar을 난독화하지 않음).
또한 이 도구는 코드를 특별히 난독화하지 않습니다. 그냥 네이티브로 트랜스파일합니다. VMProtect, Themida 또는 obfuscator-llvm과 같은 보호기를 사용해야 합니다(clang 사용의 경우).
JDK 8
Windows의 경우:
Oracle에 로그인 자격 증명이 필요하지만 Oracle JDK 8을 다운로드하는 것이 좋습니다.
Linux/MacOS의 경우:
Google "distro install jdk 8"을 검색하고 필요한 패키지를 설치합니다.
CMake
Windows의 경우:
CMake에서 최신 릴리스를 다운로드하세요.
Linux/MacOS의 경우:
Google "your distro install cmake"를 실행하고 필요한 패키지를 설치합니다(기본값 - apt/yum/brew install cmake
).
C++/C 컴파일러 툴체인
Windows의 경우:
Microsoft에서 무료 버전의 MSVS를 다운로드하고 옵트인에서 Visual C++ 컴파일러를 선택하세요.
또는 이에 대한 경험이 있으면 mingw를 설치하십시오.
Linux/MacOS의 경우:
Google "배포판 설치 g++"
Usage: native-obfuscator [-ahV] [--debug] [-b=<blackListFile>]
[--custom-lib-dir=<customLibraryDirectory>]
[-l=<librariesDirectory>] [-p=<platform>]
[--plain-lib-name=<libraryName>] [-w=<whiteListFile>]
<jarFile> <outputDirectory>
Transpiles .jar file into .cpp files and generates output .jar file
<jarFile> Jar file to transpile
<outputDirectory> Output directory
-a, --annotations Use annotations to ignore/include native obfuscation
-b, --black-list=<blackListFile>
File with a list of blacklist classes/methods for
transpilation
--custom-lib-dir=<customLibraryDirectory>
Custom library directory for LoaderUnpack
--debug Enable generation of debug .jar file (non-executable)
-h, --help Show this help message and exit.
-l, --libraries=<librariesDirectory>
Directory for dependent libraries
-p, --platform=<platform>
Target platform: hotspot - standard standalone
HotSpot JRE, std_java - java standard, android -
for Android builds (w/o DefineClass)
--plain-lib-name=<libraryName>
Plain library name for LoaderPlain
-V, --version Print version information and exit.
-w, --white-list=<whiteListFile>
File with a list of whitelist classes/methods for
transpilation
<jarFile>
- 난독화할 .jar 파일을 입력합니다.
<outputDirectory>
- C++/새 .jar 파일이 생성되는 출력 디렉터리
-l <librariesDirectory>
- 종속 라이브러리가 있어야 하는 디렉터리(선택 사항이지만 바람직함)
-p <platform>
- 라이브러리를 실행할 JVM 플랫폼
세 가지 옵션을 사용할 수 있습니다:
hotspot
: HotSpot JVM 내부를 사용하며 대부분의 난독 처리기와 작동해야 합니다(스택 추적 검사에서도 마찬가지임).std_java
: 모든 JVM에서 사용할 수 있어야 하는 작은 JVM 내부만 사용합니다.android
: Android용 라이브러리를 구축할 때 이 방법을 사용합니다. JVM 내부를 사용하지 않고 숨겨진 메서드에 DefineClass도 사용하지 않습니다(문자열/이름 난독 처리기에 스택을 사용하는 난독 처리는 일부 메서드가 숨겨지지 않기 때문에 작동하지 않습니다). -a
- 주석 처리 활성화
블랙/화이트리스트 메소드/클래스에 대한 주석을 native
으로 사용하려면 프로젝트에 다음 라이브러리를 추가할 수 있습니다.
com.github.radioegor146.native-obfuscator:annotations:master-SNAPSHOT
또한 저장소에 JitPack을 추가해야 합니다.
@Native
주석을 추가하여 네이티브 난독화 프로세스에 클래스/메서드를 포함하고 @Native
로 표시된 클래스의 메서드를 무시하려면 @NotNative
주석을 추가할 수 있습니다.
화이트리스트/블랙리스트는 주석보다 우선순위가 높습니다.
-w <whiteList>
- 필요한 경우 메서드 및 클래스의 화이트리스트에 대한 .txt 파일 경로
-b <blackList>
- 필요한 경우 메소드 및 클래스 블랙리스트에 대한 .txt 파일 경로
둘 다 다음과 같은 형식으로 와야 합니다.
<class>
<class>#<method name>#<method descriptor>
mypackage/myotherpackage/Class1
mypackage/myotherpackage/Class1#doSomething!()V
mypackage/myotherpackage/Class1$SubClass#doOther!(I)V
필터링을 위해 클래스의 내부 이름과 메서드 설명자를 사용합니다("java 내부 클래스 이름" 또는 "java 메서드 설명자"를 검색하여 자세한 내용을 읽을 수 있음).
또한 다음과 같은 와일드카드 매처를 사용할 수 있습니다.
mypackage/myotherpackage/*
mypackage/myotherpackagewithnested/**
mypackage/myotherpackage/*/Class1
mypackage/myotherpackagewithnested/**/Class1
mypackage/myotherpackage/Class*
*
클래스/패키지 이름의 단일 항목( /
로 구분)과 일치합니다.
**
클래스/패키지 이름의 모든 항목과 일치합니다.
--plain-lib-name
- 결과 네이티브 라이브러리와 별도로 .jar을 제공하거나 Android용으로 사용하는 경우 사용 중에 검색을 시도할 네이티브 라이브러리의 이름을 지정할 수 있습니다.
--custom-lib-dir
- jar 내부에 라이브러리를 저장하기 위한 사용자 정의 디렉토리를 설정하려는 경우
네이티브 라이브러리가 포함된 .jar을 제공하려면 해당 인수를 생략하고 네이티브 파일을 빌드한 후 다음 형식으로 추가해야 합니다.
x64-windows.dll
x64-linux.so
x86-windows.dll
x64-macos.dylib
arm64-linux.so
arm64-windows.dll
이 도구가 stdout
에서 인쇄할 .jar 파일의 디렉터리(기본적으로 native0/
또는 --custom-lib-dir
이 있는 경우 custom)
java -jar native-obfuscator.jar <input jar> <output directory>
사용하여 코드를 트랜스파일합니다.cmake .
결과 cpp
디렉토리에서cmake --build . --config Release
.so/.dll 파일을 빌드하기 위해 결과 cpp
디렉토리에 릴리스build/libs/
의 결과 .dll/.so를 이전 단락에서 지정한 경로에 복사합니다.java -jar <output jar>
실행하고 즐기세요!gradlew assemble
실행하여 gradle이 빌드 후 테스트를 실행하지 않도록 강제합니다. 테스트 스위트가 일부 테스트에 krak2
사용하고 있으므로 PATH에 Krakatau를 설치해야 합니다.
gradlew build
실행하세요.이 도구는 huzpsb/JavaObfuscatorTest의 테스트를 사용합니다.
문제가 있는 경우 언제든지 문제를 공개하거나 re146.dev로 연락해 주세요.