Android
Xposed
Sök…
Skapa en Xposed-modul
Xposed är ett ramverk som låter dig ansluta metodsamtal från andra appar. När du gör en modifiering genom att dekompilera en APK kan du infoga / ändra kommandon direkt var du vill. Du måste dock kompilera / underteckna APK efteråt och du kan bara distribuera hela paketet. Med Xposed kan du injicera din egen kod före eller efter metoder, eller ersätta hela metoder helt. Tyvärr kan du bara installera Xposed på rotade enheter. Du bör använda Xposed när du vill manipulera beteendet hos andra appar eller kärn Android-systemet och inte vill gå igenom besväret med att dekompilera, rekompilera och signera APK: er.
Först skapar du en standardapp utan en aktivitet i Android Studio.
Då måste du inkludera följande kod i din build.gradle :
repositories {
jcenter();
}
Efter det lägger du till följande beroenden:
provided 'de.robv.android.xposed:api:82'
provided 'de.robv.android.xposed:api:82:sources'
Nu måste du placera dessa taggar i applikationskoden som finns i AndroidManifest.xml så Xposed känner igen din modul:
<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" />
OBS! Byt alltid ut 82 med den senaste Xposed-versionen .
Hooking en metod
Skapa en ny klass som implementerar IXposedHookLoadPackage
och implementera metoden handleLoadPackage
:
public class MultiPatcher implements IXposedHookLoadPackage
{
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable
{
}
}
Inom metoden kontrollerar du loadPackageParam.packageName
för paketnamnet på appen du vill ansluta:
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable
{
if (!loadPackageParam.packageName.equals("other.package.name"))
{
return;
}
}
Nu kan du ansluta din metod och antingen manipulera den innan koden körs, eller efter:
@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");
}
});
}