Una biblioteca de análisis de DEX para encontrar clases y métodos ofuscados en tiempo de ejecución.
Dexplore es una biblioteca Java diseñada para analizar y encontrar clases y métodos ofuscados. La biblioteca puede ubicar automáticamente las clases y métodos ofuscados basados en consultas específicas, lo que permite a los desarrolladores crear aplicaciones portátiles, como módulos XPosed, para cualquier base de código ofuscada.
Además, Dexplore ofrece una herramienta de línea de comandos que proporciona la capacidad de realizar análisis estáticos y la descartes de aplicaciones. La herramienta también es capaz de extraer archivos y recursos de clase específicos, lo que resulta en un proceso más rápido y menos intensivo en recursos.
Tipos compatibles: APK, DEX, ODEX, OAT, ZIP.
Entradas compatibles: ruta de archivo, búfer de byte (Dex en memoria).
Verifique la última versión de Dexplore desde la página de lanzamiento.
Dependencia de la biblioteca
repositories {
mavenCentral()
}
dependencies {
implementation ' io.github.neonorbit:dexplore:1.4.5 '
}Herramienta de línea de comandos para análisis estático y desacompilación de aplicaciones
java -jar Dexplore.jar --help Una muestra para el módulo xpuesto.
Consulte la página Wiki para obtener una explicación detallada.
public class XposedModule implements IXposedHookLoadPackage {
@ Override
public void handleLoadPackage ( XC_LoadPackage . LoadPackageParam lpparam ) {
if (! lpparam . packageName . equals ( "com.example.app" )) return ;
// Create a class filter to find your target class
ClassFilter classFilter = new ClassFilter . Builder ()
. setReferenceTypes ( ReferenceTypes . STRINGS_ONLY )
. setReferenceFilter ( pool ->
pool . contains ( "a unique string inside the class" )
). build ();
// Create a method filter to find your target method from the class
MethodFilter methodFilter = new MethodFilter . Builder ()
. setReferenceTypes ( ReferenceTypes . STRINGS_ONLY )
. setReferenceFilter ( pool ->
pool . contains ( "a unique string inside the method" )
). setParamSize ( 2 ) // suppose it has 3 parameters
. setModifiers ( Modifier . PUBLIC ) // and it's a public method
. build ();
// Load the base apk into Dexplore
Dexplore dexplore = DexFactory . load ( lpparam . appInfo . sourceDir );
// Perform a dex search
MethodData result = dexplore . findMethod ( classFilter , methodFilter );
// Load the actual method
Method method = result . loadMethod ( lpparam . classLoader );
// Hook with Xposed
XposedBridge . hookMethod ( method , XC_MethodReplacement . returnConstant ( true ));
// ------------------ Extra ------------------
// Please don't forget to save the result in Preferences.
preferences . edit ()
. putString ( "targetMethod" , result . serialize ()) // serialize and save the result
. putLong ( "appVersion" , pkgInfo . getLongVersionCode ()) // version code (NOT version name)
. apply ();
// Use the saved result until the app LongVersionCode changes.
String saved = preferences . getString ( "targetMethod" , null );
MethodData retrieved = MethodData . deserialize ( saved ); // Deserialize
// Please refer to the wiki page for a detailed explanation.
}
} Para obtener ayuda: xda-hilo
Los proyectos de muestra se pueden encontrar en el hilo XDA.
Copyright (C) 2022 NeonOrbit
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.