Android
Xposed
Zoeken…
Een Xposed-module maken
Xposed is een framework waarmee u methodeaanroepen van andere apps kunt koppelen. Wanneer u een wijziging uitvoert door een APK te decompileren, kunt u opdrachten rechtstreeks invoegen / wijzigen waar u maar wilt. U moet de APK echter naderhand opnieuw compileren / ondertekenen en u kunt alleen het hele pakket distribueren. Met Xposed kunt u uw eigen code voor of na methoden injecteren of hele methoden volledig vervangen. Helaas kunt u Xposed alleen op geroote apparaten installeren. Gebruik Xposed wanneer u het gedrag van andere apps of het kern-Android-systeem wilt manipuleren en niet het gedoe van decompileren, opnieuw compileren en ondertekenen van APK wilt doorlopen.
Eerst maakt u een standaard-app zonder activiteit in Android Studio.
Vervolgens moet u de volgende code opnemen in uw build.gradle :
repositories {
jcenter();
}
Daarna voegt u de volgende afhankelijkheden toe:
provided 'de.robv.android.xposed:api:82'
provided 'de.robv.android.xposed:api:82:sources'
Nu moet u deze tags in de applicatietag plaatsen die u in AndroidManifest.xml vindt, zodat Xposed uw module herkent:
<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" />
OPMERKING: Vervang altijd 82 door de nieuwste Xposed-versie .
Een methode vasthaken
Maak een nieuwe klasse die IXposedHookLoadPackage
implementeert en implementeer de handleLoadPackage
methode:
public class MultiPatcher implements IXposedHookLoadPackage
{
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable
{
}
}
In de methode vink je loadPackageParam.packageName
voor de pakketnaam van de app die je wilt loadPackageParam.packageName
:
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable
{
if (!loadPackageParam.packageName.equals("other.package.name"))
{
return;
}
}
Nu kunt u uw methode koppelen en deze manipuleren voordat de code wordt uitgevoerd of na:
@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");
}
});
}