package com.example.hookapplemusic; import android.app.Application; import android.content.Context; import android.util.Log; import android.util.Pair; import java.util.List; import de.robv.android.xposed.IXposedHookLoadPackage; import de.robv.android.xposed.XC_MethodHook; import de.robv.android.xposed.XposedBridge; import de.robv.android.xposed.callbacks.XC_LoadPackage; import static de.robv.android.xposed.XposedHelpers.findAndHookMethod; import static de.robv.android.xposed.XposedHelpers.findClass; public class HookAppleInit implements IXposedHookLoadPackage { private static final String PACKAGENAME = "com.apple.android.music"; private static final String TAG = "AppleHook"; @Override public void handleLoadPackage(final XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable { XposedBridge.log("来了啊"); Log.e("handleLoadPackage", loadPackageParam.packageName); if (PACKAGENAME.equals(loadPackageParam.packageName)) { XposedBridge.log("正是进入包中"); //这里是为了解决app多dex进行hook的问题,Xposed默认是hook主dex findAndHookMethod(Application.class, "attach", Context.class, new XC_MethodHook() { @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { XposedBridge.log("进入hook 方法"); super.afterHookedMethod(param); final ClassLoader classLoader = ((Context) (param.args[0])).getClassLoader(); Class<?> clazz = classLoader.loadClass("com.apple.android.mediaservices.javanative.common.AndroidMediaServices$HeaderUtil"); Class<?> clsHeaders = findClass("com.apple.android.mediaservices.javanative.http.HTTPMessage$Headers", classLoader); XposedBridge.log("哈哈" + clazz); XposedBridge.log("是真的吗"); if (clazz != null) { findAndHookMethod(clazz, "headersToPairs", clsHeaders, new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { super.beforeHookedMethod(param); Log.d(TAG, "beforeHookedMethod: 111"); } @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { super.afterHookedMethod(param); List<?> list = (List<?>) param.getResult(); Log.d(TAG, "afterHookedMethod: 222"); for (Object object : list) { Pair pair = (Pair) object; XposedBridge.log("盖世英雄到来" + pair.first + " " + pair.second); } } }); } else { XposedBridge.log("没找到改类"); } XposedBridge.log("假的吧"); } }); } } }
[课程]Linux pwn 探索篇!