用於 JNI 的 Java .class 到 .cpp 轉換器
目前僅完全支援 Java 8。
警告:建議使用黑名單/白名單,因為此工具會顯著減慢程式碼速度(例如不要混淆完整的 Minecraft .jar)
此外,該工具不會特別混淆您的程式碼;它只是將其轉換為原生的。請記得使用 VMProtect、Themida 或 obfuscator-llvm 等保護器(以防使用 clang)
JDK 8
對於 Windows:
我建議下載 Oracle JDK 8,儘管您需要在 Oracle 上擁有一些登入憑證。
對於 Linux/MacOS:
谷歌“your 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:
谷歌“你的發行版安裝 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
註解以將類別/方法包含到本機混淆過程中,並新增@NotNative
註解以忽略標記為@Native
類別中的方法
白名單/黑名單的優先順序高於註釋。
-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
它使用類別的內部名稱和方法描述符進行過濾(您可以透過Google搜尋“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
存在)
java -jar native-obfuscator.jar <input jar> <output directory>
轉譯程式碼cmake .
在結果cpp
目錄中cmake --build . --config Release
--config 在結果cpp
目錄下cmake --build . --config Release
以建置.so/.dll文件build/libs/
複製到上一段指定的路徑。java -jar <output jar>
並享受吧!gradlew assemble
強制 gradle 在建置後不執行測試您需要將 Krakatau 安裝到您的 PATH 中,因為測試套件使用krak2
進行某些測試
gradlew build
來組裝並運行完整的測試套件該工具使用 huzpsb/JavaObfuscatorTest 的測試
如有任何問題,請隨時提出問題或透過 re146.dev 與我聯繫