Java .class-zu-.cpp-Konverter zur Verwendung mit JNI
Unterstützt derzeit nur Java 8 vollständig. Die Unterstützung für Java 9+ und Android ist völlig experimentell
Warnung: Die Verwendung einer Blacklist/Whitelist wird empfohlen, da dieses Tool den Code erheblich verlangsamt (z. B. nicht die vollständige Minecraft-.jar-Datei verschleiern).
Außerdem verschleiert dieses Tool Ihren Code nicht besonders; es transpiliert es einfach in native. Denken Sie daran, Protektoren wie VMProtect, Themida oder obfuscator-llvm zu verwenden (im Falle der Verwendung von Clang).
JDK 8
Für Windows:
Ich empfehle, Oracle JDK 8 herunterzuladen, allerdings benötigen Sie einige Anmeldeinformationen für Oracle.
Für Linux/MacOS:
Google „Ihre Distribution installiert JDK 8“ und installiert die erforderlichen Pakete
CMake
Für Windows:
Laden Sie die neueste Version von CMake herunter
Für Linux/MacOS:
Googeln Sie „Ihre Distribution, installieren Sie cmake“ und installieren Sie das erforderliche Paket (Standard: apt/yum/brew install cmake
).
C++/C-Compiler-Toolchain
Für Windows:
Laden Sie die Freeware-Version von MSVS von Microsoft herunter und wählen Sie in den Opt-Ins den Visual C++-Compiler aus
Oder installieren Sie mingw, wenn Sie Erfahrung damit haben.
Für Linux/MacOS:
Google „Ihre Distribution installiert 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>
– Geben Sie die zu verschleiernde .jar-Datei ein
<outputDirectory>
– Ausgabeverzeichnis, in dem die C++/neue .jar-Datei erstellt wird
-l <librariesDirectory>
– Verzeichnis, in dem sich abhängige Bibliotheken befinden sollten, optional, aber vorzuziehen
-p <platform>
– JVM-Plattform, auf der die Bibliothek ausgeführt werden soll
Es stehen drei Optionen zur Verfügung:
hotspot
: verwendet HotSpot-JVM-Interna und sollte mit den meisten Verschleierern funktionieren (auch mit Stack-Trace-Überprüfung).std_java
: verwendet nur kleinere JVM-Interna, die auf allen JVMs verfügbar sein müssenandroid
: Verwenden Sie diese Methode beim Erstellen einer Bibliothek für Android. Verwendet keine JVM-Interna und auch keine DefineClass für versteckte Methoden (Verschleierer, die auf dem Stapel für die Verschleierung von Zeichenfolgen/Namen basieren, funktionieren nicht, da einige Methoden nicht ausgeblendet werden). -a
– Anmerkungsverarbeitung aktivieren
Um Anmerkungen für Black-/Whitelisting-Methoden/-Klassen native
zu verwenden, können Sie die folgende Bibliothek zu Ihrem Projekt hinzufügen:
com.github.radioegor146.native-obfuscator:annotations:master-SNAPSHOT
Außerdem müssen Sie JitPack zu Ihren Repositorys hinzufügen.
Sie können die Annotation @Native
hinzufügen, um Klassen/Methoden in den nativen Verschleierungsprozess einzubeziehen, und die Annotation @NotNative
hinzufügen, um Methoden in als @Native
markierten Klassen zu ignorieren
Whitelist/Blacklist hat eine höhere Priorität als Anmerkungen.
-w <whiteList>
– Pfad zur TXT-Datei für die Whitelist von Methoden und Klassen, falls erforderlich
-b <blackList>
– Pfad zu einer TXT-Datei für eine Blacklist von Methoden und Klassen, falls erforderlich
Beide sollten in folgender Form vorliegen:
<class>
<class>#<method name>#<method descriptor>
mypackage/myotherpackage/Class1
mypackage/myotherpackage/Class1#doSomething!()V
mypackage/myotherpackage/Class1$SubClass#doOther!(I)V
Es verwendet interne Namen von Klassen und Methodendeskriptoren zum Filtern (Sie können mehr darüber lesen, indem Sie „Java-interne Klassennamen“ oder „Java-Methodendeskriptoren“ googeln).
Sie können auch einen Wildcard-Matcher wie diesen verwenden:
mypackage/myotherpackage/*
mypackage/myotherpackagewithnested/**
mypackage/myotherpackage/*/Class1
mypackage/myotherpackagewithnested/**/Class1
mypackage/myotherpackage/Class*
*
entspricht einem einzelnen Eintrag (geteilt durch /
) im Klassen-/Paketnamen
**
stimmt mit allen Einträgen im Klassen-/Paketnamen überein
--plain-lib-name
– Wenn Sie Ihre .jar-Datei getrennt von den nativen Ergebnisbibliotheken versenden oder sie für Android verwenden, können Sie den Namen der nativen Bibliothek angeben, die bei der Verwendung durchsucht werden soll.
--custom-lib-dir
– wenn Sie ein benutzerdefiniertes Verzeichnis zum Speichern von Bibliotheken im JAR festlegen möchten
Wenn Sie Ihre .jar-Datei mit nativen Bibliotheken ausliefern möchten, sollten Sie dieses Argument weglassen und sie nach dem Erstellen nativer Dateien in der Form hinzufügen
x64-windows.dll
x64-linux.so
x86-windows.dll
x64-macos.dylib
arm64-linux.so
arm64-windows.dll
in das Verzeichnis der .jar-Datei, die dieses Tool in stdout
druckt (standardmäßig native0/
oder custom, wenn --custom-lib-dir
vorhanden ist)
java -jar native-obfuscator.jar <input jar> <output directory>
cmake .
im Ergebnis cpp
Verzeichniscmake --build . --config Release
--config Im Ergebnis- cpp
Verzeichnis cmake --build . --config Release
, um die .so/.dll-Datei zu erstellenbuild/libs/
in den im vorherigen Absatz angegebenen Pfad.java -jar <output jar>
aus und genießen Sie!gradlew assemble
aus, um gradle zu zwingen, nach dem Build keine Tests mehr auszuführen Sie müssen Krakatau in Ihrem PATH installiert haben, da die Testsuite für einige Tests krak2
verwendet
gradlew build
aus, um die vollständige Testsuite zusammenzustellen und auszuführenDieses Tool verwendet Tests von huzpsb/JavaObfuscatorTest
Bei Problemen können Sie gerne ein Problem eröffnen oder mich unter re146.dev kontaktieren