Android
Xposed
Recherche…
Créer un module Xposed
Xposed est un framework qui vous permet d'accrocher des appels de méthode d'autres applications. Lorsque vous effectuez une modification en décompilant un APK, vous pouvez insérer / modifier des commandes directement où vous voulez. Cependant, vous devrez recompiler / signer l'APK par la suite et vous ne pourrez distribuer que le package complet. Avec Xposed, vous pouvez injecter votre propre code avant ou après les méthodes, ou remplacer complètement des méthodes entières. Malheureusement, vous ne pouvez installer Xposed que sur des appareils rootés. Vous devez utiliser Xposed chaque fois que vous souhaitez manipuler le comportement d'autres applications ou du système Android principal et ne pas avoir à vous soucier de la décompilation, de la recompilation et de la signature d'APK.
Tout d'abord, vous créez une application standard sans activité dans Android Studio.
Ensuite, vous devez inclure le code suivant dans votre build.gradle :
repositories {
jcenter();
}
Après cela, vous ajoutez les dépendances suivantes:
provided 'de.robv.android.xposed:api:82'
provided 'de.robv.android.xposed:api:82:sources'
Maintenant, vous devez placer ces balises dans la balise d' application trouvée dans le fichier AndroidManifest.xml afin que Xposed reconnaisse votre module:
<meta-data
android:name="xposedmodule"
android:value="true" />
<meta-data
android:name="xposeddescription"
android:value="YOUR_MODULE_DESCRIPTION" />
<meta-data
android:name="xposedminversion"
android:value="82" />
REMARQUE: remplacez toujours 82 par la dernière version de Xposed .
Accrocher une méthode
Créez une nouvelle classe implémentant IXposedHookLoadPackage
et implémentez la méthode handleLoadPackage
:
public class MultiPatcher implements IXposedHookLoadPackage
{
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable
{
}
}
À l’intérieur de la méthode, cochez loadPackageParam.packageName
pour le nom de package de l’application que vous souhaitez raccorder:
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable
{
if (!loadPackageParam.packageName.equals("other.package.name"))
{
return;
}
}
Maintenant, vous pouvez accrocher votre méthode et la manipuler avant l'exécution du code ou après:
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable
{
if (!loadPackageParam.packageName.equals("other.package.name"))
{
return;
}
XposedHelpers.findAndHookMethod(
"other.package.name",
loadPackageParam.classLoader,
"otherMethodName",
YourFirstParameter.class,
YourSecondParameter.class,
new XC_MethodHook()
{
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable
{
Object[] args = param.args;
args[0] = true;
args[1] = "example string";
args[2] = 1;
Object thisObject = param.thisObject;
// Do something with the instance of the class
}
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable
{
Object result = param.getResult();
param.setResult(result + "example string");
}
});
}