JNI で使用する Java .class から .cpp へのコンバータ
現在完全にサポートされているのは Java 8 のみです。Java 9 以降と Android のサポートは完全に実験的です。
警告: このツールはコードの速度を大幅に低下させるため、ブラックリスト/ホワイトリストの使用をお勧めします (完全な Minecraft .jar を難読化しないなど)。
また、このツールはコードを特に難読化することはありません。それをネイティブに変換するだけです。 VMProtect、Themida、obfuscator-llvm などのプロテクターを忘れずに使用してください (Clang を使用する場合)
JDK8
Windowsの場合:
Oracle JDK 8 をダウンロードすることをお勧めしますが、Oracle へのログイン資格情報が必要です。
Linux/MacOSの場合:
Googleで「ディストリビューションインストールjdk 8」と検索し、必要なパッケージをインストールします
CMake
Windowsの場合:
CMake から最新リリースをダウンロードする
Linux/MacOSの場合:
Googleで「ディストリビューションインストール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 プラットフォーム
次の 3 つのオプションが利用可能です。
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
フィルタリングにはクラスの内部名とメソッド記述子が使用されます (詳細については、「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
結果のcpp
ディレクトリをリリースして .so/.dll ファイルを構築しますbuild/libs/
から前の段落で指定したパスにコピーします。java -jar <output jar>
を実行して楽しんでください。gradlew assemble
実行して、ビルド後に gradle がテストを実行しないように強制しますテストスイートでは一部のテストでkrak2
使用しているため、Krakatau を PATH にインストールする必要があります。
gradlew build
実行して完全なテスト スイートをアセンブルして実行しますこのツールは huzpsb/JavaObfuscatorTest のテストを使用します
問題が発生した場合は、お気軽に問題をオープンするか、re146.dev までご連絡ください。