Konverter Java .class ke .cpp untuk digunakan dengan JNI
Saat ini hanya mendukung penuh Java 8. Dukungan Java 9+ dan Android sepenuhnya bersifat eksperimental
Peringatan: penggunaan daftar hitam/daftar putih disarankan karena alat ini memperlambat kode secara signifikan (seperti jangan mengaburkan Minecraft .jar secara penuh)
Selain itu, alat ini tidak terlalu mengaburkan kode Anda; itu hanya mengubahnya menjadi bahasa asli. Ingatlah untuk menggunakan pelindung seperti VMProtect, Themida, atau obfuscator-llvm (dalam kasus penggunaan dentang)
JDK 8
Untuk Windows:
Saya sarankan mengunduh Oracle JDK 8, meskipun Anda harus memiliki beberapa kredensial login di Oracle.
Untuk Linux/MacOS:
Google "instal distro Anda jdk 8", dan instal paket yang diperlukan
CMembuat
Untuk Windows:
Unduh rilis terbaru dari CMake
Untuk Linux/MacOS:
Google "distro install cmake Anda" dan instal paket yang diperlukan (default - apt/yum/brew install cmake
)
Rantai alat kompiler C++/C
Untuk Windows:
Unduh MSVS versi gratis dari Microsoft dan pilih kompiler Visual C++ di opt-in
Atau instal mingw jika Anda punya pengalaman dengan ini.
Untuk Linux/MacOS:
Google "distro Anda instal 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>
- masukkan file .jar untuk mengaburkan
<outputDirectory>
- direktori keluaran tempat file C++/file .jar baru dibuat
-l <librariesDirectory>
- direktori tempat perpustakaan dependen seharusnya berada, opsional, tetapi lebih disukai
-p <platform>
- Platform JVM untuk menjalankan perpustakaan
Tersedia tiga opsi:
hotspot
: akan menggunakan internal HotSpot JVM dan harus bekerja dengan sebagian besar obfuscator (bahkan dengan pemeriksaan pelacakan tumpukan juga)std_java
: hanya akan menggunakan internal JVM minor yang harus tersedia di semua JVMandroid
: gunakan metode ini saat membuat perpustakaan untuk Android. Tidak akan menggunakan internal JVM, serta tidak ada DefineClass untuk metode tersembunyi (obfuscator yang mengandalkan tumpukan untuk string/nama obfuscator tidak akan berfungsi karena beberapa metode tidak akan disembunyikan) -a
- aktifkan pemrosesan anotasi
Untuk menggunakan anotasi metode/kelas yang dimasukkan ke dalam daftar hitam/putih sebagai native
Anda dapat menambahkan pustaka berikut ke proyek Anda:
com.github.radioegor146.native-obfuscator:annotations:master-SNAPSHOT
Selain itu, Anda perlu menambahkan JitPack ke repositori Anda.
Anda dapat menambahkan anotasi @Native
untuk menyertakan kelas/metode ke proses kebingungan asli dan menambahkan anotasi @NotNative
untuk mengabaikan metode di kelas yang ditandai sebagai @Native
Daftar Putih/Daftar Hitam mempunyai prioritas lebih tinggi dibandingkan anotasi.
-w <whiteList>
- jalur ke file .txt untuk daftar putih metode dan kelas jika diperlukan
-b <blackList>
- jalur ke file .txt untuk daftar hitam metode dan kelas jika diperlukan
Keduanya harus datang dalam bentuk seperti ini:
<class>
<class>#<method name>#<method descriptor>
mypackage/myotherpackage/Class1
mypackage/myotherpackage/Class1#doSomething!()V
mypackage/myotherpackage/Class1$SubClass#doOther!(I)V
Ia menggunakan nama internal kelas dan deskriptor metode untuk memfilter (Anda dapat membaca lebih lanjut tentang hal ini dengan googling "nama kelas internal Java" atau "deskriptor metode Java")
Selain itu, Anda dapat menggunakan pencocokan wildcard seperti ini:
mypackage/myotherpackage/*
mypackage/myotherpackagewithnested/**
mypackage/myotherpackage/*/Class1
mypackage/myotherpackagewithnested/**/Class1
mypackage/myotherpackage/Class*
*
cocok dengan satu entri (dibagi dengan /
) pada nama kelas/paket
**
cocok dengan semua entri dalam nama kelas/paket
--plain-lib-name
- jika Anda mengirimkan .jar secara terpisah dari perpustakaan asli hasil, atau Anda menggunakannya untuk Android, Anda dapat menentukan nama perpustakaan asli yang akan coba dicari saat digunakan.
--custom-lib-dir
- jika Anda ingin mengatur direktori khusus untuk menyimpan perpustakaan di dalam toples
Jika Anda ingin mengirimkan .jar Anda dengan perpustakaan asli di dalamnya, Anda harus menghilangkan argumen itu, dan setelah membuat file asli, tambahkan file tersebut dalam bentuk
x64-windows.dll
x64-linux.so
x86-windows.dll
x64-macos.dylib
arm64-linux.so
arm64-windows.dll
ke direktori file .jar yang akan dicetak alat ini di stdout
(secara default native0/
atau custom jika --custom-lib-dir
ada)
java -jar native-obfuscator.jar <input jar> <output directory>
cmake .
di direktori hasil cpp
cmake --build . --config Release
di direktori hasil cpp
untuk membuat file .so/.dllbuild/libs/
ke jalur yang ditentukan di paragraf sebelumnya.java -jar <output jar>
yang dibuat dan nikmatilah!gradlew assemble
untuk memaksa gradle agar tidak menjalankan tes setelah build Anda harus menginstal Krakatau ke PATH Anda, karena test suite menggunakan krak2
untuk beberapa tes
gradlew build
untuk merakit dan menjalankan rangkaian pengujian lengkapAlat ini menggunakan pengujian dari huzpsb/JavaObfuscatorTest
Jika ada masalah, jangan ragu untuk membuka masalah atau menghubungi saya di re146.dev