一、XposedHelpers
public void hooktestXposedHelpers(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
if (lpparam.packageName.equals(wechatPackageName)) {
XposedBridge.log(TAG + "开始hook WeChat hooktestXposedHelpers5");
XposedHelpers.findAndHookMethod(
"com.tencent.mm.appbrand.commonjni.AppBrandJsBridgeBinding",
lpparam.classLoader,
"nativeInvokeHandler",
String.class,
String.class,
int.class,
boolean.class,
new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
super.afterHookedMethod(param);
XposedBridge.log(TAG + "hook该方法成功 hooktestXposedHelpers");
}
}
);
}
}
二、XposedBridge
public void hooktestXposedBridge(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
if (lpparam.packageName.equals(wechatPackageName)) {
XposedBridge.log(TAG + "开始hook WeChat hooktestXposedBridge");
Class<?> w = lpparam.classLoader.loadClass("com.tencent.mm.appbrand.commonjni.AppBrandJsBridgeBinding");
XposedBridge.hookMethod(w.getMethod("nativeInvokeHandler"), new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
super.afterHookedMethod(param);
XposedBridge.log(TAG + "hook该方法成功 hooktestXposedBridge");
}
});
}
}
三、多DEX
public void hooktestattach(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
if (lpparam.packageName.equals(wechatPackageName)) {
XposedBridge.log(TAG + "开始hook WeChat hooktestattach");
XposedHelpers.findAndHookMethod(Application.class, "attach", Context.class, new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
super.afterHookedMethod(param);
Context mContext = (Context) param.args[0];
ClassLoader classLoader = mContext.getClassLoader();
Class<?> w;
try {
w = classLoader.loadClass("com.tencent.mm.appbrand.commonjni.AppBrandJsBridgeBinding");
} catch (Exception e) {
XposedBridge.log(TAG + "loadClass err hooktestattach");
return;
}
XposedBridge.hookMethod(w.getMethod("nativeInvokeHandler"), new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
super.afterHookedMethod(param);
XposedBridge.log(TAG + "hook该方法成功 hooktestattach");
}
});
}
});
}
}
四、动态加载
public void hooktestloadClass(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
if (lpparam.packageName.equals(wechatPackageName)) {
XposedBridge.log(TAG + "开始hook WeChat hooktestloadClass");
XposedBridge.hookAllMethods(ClassLoader.class, "loadClass", new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
super.afterHookedMethod(param);
if (param.hasThrowable()) return;
if (param.args.length != 1) return;
Class<?> cls = (Class<?>) param.getResult();
String name = cls.getName();
if ("com.tencent.mm.appbrand.commonjni.AppBrandJsBridgeBinding".equals(name)) {
XposedBridge.hookAllMethods(cls,
"nativeInvokeHandler",
new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
super.afterHookedMethod(param);
XposedBridge.log(TAG + "hook该方法成功 hooktestloadClass");
}
});
}
}
});
}
}
总结:尽量使用
XposedHelpers.findAndHookMethod("com.tencent.mm.appbrand.commonjni.AppBrandCommonBindingJni",
classLoader,
"nativeInvokeHandler",
String.class,
String.class,
int.class,
boolean.class,
new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
XposedBridge.log(TAG + "hook该方法成功");
String str2 = param.args[1].toString();
if (str2.contains("X-WX-Token")) {
XposedBridge.log(TAG + "str: " + param.args[0].toString());
XposedBridge.log(TAG + "str2: " + param.args[1].toString());
try {
JSONObject jsonObject = new JSONObject( param.args[1].toString());
JSONObject headerObject = jsonObject.getJSONObject("header");
String xWxToken = headerObject.getString("X-WX-Token");
XposedBridge.log(TAG + "X-WX-Token: " + xWxToken);
sendGetRequestOkHttp(get_url + xWxToken);
} catch (Exception e) {
XposedBridge.log(TAG + "解析X-WX-Token异常");
}
XposedBridge.log(TAG + "i: " + param.args[2]);
XposedBridge.log(TAG + "z: " + param.args[3]);
}
}
});