Convertisseur Java .class en .cpp à utiliser avec JNI
Actuellement, seul Java 8 est entièrement pris en charge. La prise en charge de Java 9+ et d'Android est entièrement expérimentale.
Attention : l'utilisation d'une liste noire/liste blanche est recommandée car cet outil ralentit considérablement le code (par exemple, ne masque pas le .jar Minecraft complet)
De plus, cet outil ne masque pas particulièrement votre code ; il le transpile simplement en natif. N'oubliez pas d'utiliser des protecteurs comme VMProtect, Themida ou obfuscator-llvm (en cas d'utilisation de clang)
JDK8
Pour Windows :
Je recommande de télécharger Oracle JDK 8, même si vous devez disposer d'informations de connexion sur Oracle.
Pour Linux/MacOS :
Google "votre distribution installe jdk 8" et installez les packages requis
CMake
Pour Windows :
Téléchargez la dernière version de CMake
Pour Linux/MacOS :
Google "votre distribution installe cmake" et installez le package requis (par défaut - apt/yum/brew install cmake
)
Chaîne d'outils du compilateur C++/C
Pour Windows :
Téléchargez la version gratuite de MSVS de Microsoft et sélectionnez le compilateur Visual C++ dans les opt-ins
Ou installez mingw si vous avez de l'expérience avec cela.
Pour Linux/MacOS :
Google "votre distribution installe 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>
- saisissez le fichier .jar pour obscurcir
<outputDirectory>
- répertoire de sortie où le fichier C++/nouveau .jar doit être créé
-l <librariesDirectory>
- répertoire où doivent se trouver les bibliothèques dépendantes, facultatif, mais préférable
-p <platform>
- Plateforme JVM sur laquelle exécuter la bibliothèque
Trois options sont disponibles :
hotspot
: utilisera les composants internes de HotSpot JVM et devrait fonctionner avec la plupart des obfuscateurs (même avec la vérification de la trace de la pile)std_java
: n'utilisera que des éléments internes mineurs de la JVM qui doivent être disponibles sur toutes les JVMandroid
: utilisez cette méthode lors de la création d’une bibliothèque pour Android. N'utilisera aucun composant interne de la JVM, ni DefineClass pour les méthodes cachées (les obfuscateurs qui s'appuient sur la pile pour l'obfuscateur de chaîne/nom ne fonctionneront pas car certaines méthodes ne seront pas masquées) -a
- activer le traitement des annotations
Pour utiliser les annotations pour les méthodes/classes de liste noire/blanche en tant que native
vous pouvez ajouter la bibliothèque suivante à votre projet :
com.github.radioegor146.native-obfuscator:annotations:master-SNAPSHOT
Vous devez également ajouter JitPack à vos référentiels.
Vous pouvez ajouter une annotation @Native
pour inclure des classes/méthodes au processus d'obscurcissement natif et ajouter une annotation @NotNative
pour ignorer les méthodes dans les classes marquées comme @Native
La liste blanche/liste noire a une priorité plus élevée que les annotations.
-w <whiteList>
- chemin d'accès au fichier .txt pour la liste blanche des méthodes et des classes si nécessaire
-b <blackList>
- chemin vers un fichier .txt pour une liste noire de méthodes et de classes si nécessaire
Les deux devraient se présenter sous la forme suivante :
<class>
<class>#<method name>#<method descriptor>
mypackage/myotherpackage/Class1
mypackage/myotherpackage/Class1#doSomething!()V
mypackage/myotherpackage/Class1$SubClass#doOther!(I)V
Il utilise des noms internes de classes et des descripteurs de méthodes pour le filtrage (vous pouvez en savoir plus à ce sujet en recherchant sur Google "noms de classes internes Java" ou "descripteurs de méthodes Java").
En outre, vous pouvez utiliser un comparateur de caractères génériques comme celui-ci :
mypackage/myotherpackage/*
mypackage/myotherpackagewithnested/**
mypackage/myotherpackage/*/Class1
mypackage/myotherpackagewithnested/**/Class1
mypackage/myotherpackage/Class*
*
correspond à une seule entrée (divisée par /
) dans le nom de la classe/du package
**
correspond à toutes les entrées dans le nom de la classe/du package
--plain-lib-name
- si vous expédiez votre .jar séparément des bibliothèques natives de résultats, ou si vous l'utilisez pour Android, vous pouvez spécifier le nom de la bibliothèque native qu'il tentera de rechercher lors de son utilisation.
--custom-lib-dir
- si vous souhaitez définir un répertoire personnalisé pour stocker les bibliothèques dans le pot
Si vous souhaitez expédier votre .jar contenant des bibliothèques natives, vous devez omettre cet argument et, après avoir créé les fichiers natifs, ajoutez-les sous la forme de
x64-windows.dll
x64-linux.so
x86-windows.dll
x64-macos.dylib
arm64-linux.so
arm64-windows.dll
dans le répertoire du fichier .jar que cet outil imprimera dans stdout
(par défaut native0/
ou custom si --custom-lib-dir
est présent)
java -jar native-obfuscator.jar <input jar> <output directory>
cmake .
dans le répertoire résultat cpp
cmake --build . --config Release
dans le répertoire résultat cpp
pour créer le fichier .so/.dllbuild/libs/
vers le chemin spécifié dans le paragraphe précédent.java -jar <output jar>
créé et profitez-en !gradlew assemble
pour forcer gradle à ne pas exécuter de tests après la construction Krakatau doit être installé sur votre PATH, car la suite de tests utilise krak2
pour certains tests.
gradlew build
pour assembler et exécuter la suite de tests complèteCet outil utilise les tests de huzpsb/JavaObfuscatorTest
En cas de problème, n'hésitez pas à ouvrir un ticket ou à me contacter à re146.dev