Xposed Hook 体会
空闲的时候折腾修改悦动步数的时候,用上了Xposed Hook第三方应用方法,记录一下。
Xposed太强大了,可以Hook别人的方法,在人家调用方法前能改掉别人的参数,在别人调用完成时,能修改方法返回值和获取返回值,而且能拿到当前对象,通关反射做更多的事情。
修改调用参数
比如说这个
1 | com.yuedong.common.utils.OpenSign |
类,有个
1 | makeSig(String str,String key,HashMap<String,String>map) |
方法,我来修改掉它的参数并且拿到它的加密Key:
1 | Class<?> openSignEL = XposedHelpers.findClass( |
这样就拿到参数,而且能修改参数后继续执行。
再来Hook别人方法的返回值,并且拿到当前对象去反射调用它的内部方法
比如说这个类1
com.yuedong.sport.controller.account.Account
有方法
1 | public String xyy(); |
继续使用Xposed的hookAllMethods1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23Class<?> Account = XposedHelpers.findClass(
"com.yuedong.sport.controller.account.Account",
loadPackageParam.classLoader);
XposedBridge.hookAllMethods(ydAccount, "xyy",
new XC_MethodHook() {
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
super.afterHookedMethod(param);
//反射调用getUid()
Integer uid = (Integer) param.thisObject.getClass().getDeclaredMethod("uid", new Class[]{}).invoke(param.thisObject);
//获取返回值
String xyy = param.getResult().toString();
//通关广播发送出去
Intent intent = new Intent("com.anjoyo.xyl.run.yd_info");
intent.putExtra("action", 1);
intent.putExtra("uid", uid);
intent.putExtra("xyy", xyy);
if (MainHook.context != null) {
MainHook.context.sendBroadcast(intent);
}
}
}
);
这样就给别人应用挂上钩子了,在别人执行这个方法的时候,你能拿到当前对象,可以做很多很多了。(我也是刚开始玩
再看一个别人使用的方法,在钩子里开了线程循环调用
1 | if (loadPackageParam.packageName.equals(YUEDONG) || loadPackageParam.packageName.equals(CODOON)) { |
使用Xposed模块,记录一下~~