Convertidor Java .class a .cpp para usar con JNI
Actualmente solo es totalmente compatible con Java 8. La compatibilidad con Java 9+ y Android es completamente experimental
Advertencia: se recomienda el uso de listas negras/blancas porque esta herramienta ralentiza significativamente el código (como no ofuscar el .jar completo de Minecraft)
Además, esta herramienta no ofusca particularmente su código; simplemente lo transpila a nativo. Recuerde utilizar protectores como VMProtect, Themida u ofuscator-llvm (en caso de uso clang)
JDK 8
Para Windows:
Recomiendo descargar Oracle JDK 8, aunque necesita tener algunas credenciales de inicio de sesión en Oracle.
Para Linux/MacOS:
Busque en Google "su distribución instale jdk 8" e instale los paquetes necesarios
Chacer
Para Windows:
Descargue la última versión de CMake
Para Linux/MacOS:
Busque en Google "su distribución instala cmake" e instale el paquete requerido (predeterminado: apt/yum/brew install cmake
)
Cadena de herramientas del compilador C++/C
Para Windows:
Descargue la versión gratuita de MSVS de Microsoft y seleccione el compilador de Visual C++ en las opciones de suscripción.
O instale mingw si tiene alguna experiencia con esto.
Para Linux/MacOS:
Google "tu distribución instala 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>
- ingrese el archivo .jar para ofuscar
<outputDirectory>
- directorio de salida donde se creará el archivo C++/nuevo .jar
-l <librariesDirectory>
- directorio donde deberían estar las bibliotecas dependientes, opcional, pero preferible
-p <platform>
: plataforma JVM para ejecutar la biblioteca
Hay tres opciones disponibles:
hotspot
: utilizará los componentes internos de HotSpot JVM y debería funcionar con la mayoría de los ofuscadores (incluso con la verificación de seguimiento de pila también)std_java
: utilizará solo componentes internos menores de JVM que deben estar disponibles en todas las JVMandroid
: utilice este método al crear una biblioteca para Android. No utilizará componentes internos de JVM, ni tampoco DefineClass para métodos ocultos (los ofuscadores que dependen de la pila para el ofuscador de cadenas/nombres no funcionarán debido al hecho de que algunos métodos no estarán ocultos). -a
- habilita el procesamiento de anotaciones
Para usar anotaciones para métodos/clases en listas negras/blancas como native
puede agregar la siguiente biblioteca a su proyecto:
com.github.radioegor146.native-obfuscator:annotations:master-SNAPSHOT
Además, debes agregar JitPack a tus repositorios.
Puede agregar la anotación @Native
para incluir clases/métodos en el proceso de ofuscación nativo y agregar la anotación @NotNative
para ignorar los métodos en las clases marcadas como @Native
La lista blanca/lista negra tiene mayor prioridad que las anotaciones.
-w <whiteList>
: ruta al archivo .txt para la lista blanca de métodos y clases, si es necesario
-b <blackList>
: ruta a un archivo .txt para obtener una lista negra de métodos y clases, si es necesario
Ambos deberían venir en la siguiente forma:
<class>
<class>#<method name>#<method descriptor>
mypackage/myotherpackage/Class1
mypackage/myotherpackage/Class1#doSomething!()V
mypackage/myotherpackage/Class1$SubClass#doOther!(I)V
Utiliza nombres internos de clases y descriptores de métodos para filtrar (puede leer más al respecto buscando en Google "nombres de clases internas de Java" o "descriptores de métodos de Java")
Además, puedes utilizar un comparador comodín como este:
mypackage/myotherpackage/*
mypackage/myotherpackagewithnested/**
mypackage/myotherpackage/*/Class1
mypackage/myotherpackagewithnested/**/Class1
mypackage/myotherpackage/Class*
*
coincide con una sola entrada (dividida por /
) en el nombre de la clase/paquete
**
coincide con todas las entradas en el nombre de la clase/paquete
--plain-lib-name
: si envía su .jar por separado de las bibliotecas nativas resultantes, o lo usa para Android, puede especificar el nombre de la biblioteca nativa que intentará buscar mientras la usa.
--custom-lib-dir
: si desea configurar un directorio personalizado para almacenar bibliotecas dentro del jar
Si desea enviar su .jar con bibliotecas nativas, debe omitir ese argumento y, después de crear archivos nativos, agregarlos en forma de
x64-windows.dll
x64-linux.so
x86-windows.dll
x64-macos.dylib
arm64-linux.so
arm64-windows.dll
al directorio del archivo .jar que esta herramienta imprimirá en stdout
(de forma predeterminada, native0/
o personalizado si --custom-lib-dir
está presente)
java -jar native-obfuscator.jar <input jar> <output directory>
cmake .
en el directorio cpp
de resultadoscmake --build . --config Release
en el directorio cpp
de resultados para crear el archivo .so/.dllbuild/libs/
a la ruta especificada en el párrafo anterior.java -jar <output jar>
creado y ¡disfrútelo!gradlew assemble
para obligar a gradle a no ejecutar pruebas después de la compilación Necesita tener Krakatau instalado en su RUTA, porque el conjunto de pruebas usa krak2
para algunas pruebas.
gradlew build
para ensamblar y ejecutar el conjunto de pruebas completoEsta herramienta utiliza pruebas de huzpsb/JavaObfuscatorTest
En caso de cualquier problema, no dude en abrir un problema o contactarme en re146.dev