之前就是Hook了单独的方法,这一次我们将通过Java反射结合Xposed来进行Hook。
0x00 前言
1.你能学到的什么?
1.1 反射Hook修改EditTive的内容。
1.2 反射Hook Activity 跳转。
2.说明
有兴趣请看HAI_使用手册
0x01 Hook修改EditTive
之前我们是通过Hook Tive.class拿到Hook的权限,但是这样做有一个很大的缺陷,就是这样会修改到所有的EditTive的内容。所以我们这次决定使用java的反射机制来拿到当前的内容进行修改。
首先我们要准备一个很简单的Demo。
这个Demo的逻辑主要是,通过输入一个密码,正确之后就会跳转一个Activity。
1.Hook过滤App
2.Hook onCreate 方法
开发过App的应该知道onCreate是Activity的入口处。我们这次将Hook onCreate方法拿到对象。
设置className,设置好methodName 就Hook成功了。
3.反射拿到属性
Class clazz=param.thisObject.getClass();
通过param.thisObject.getClass()反射拿到对象。
Field f=clazz.getDeclaredField("et");
通过getDeclaredField方法拿到private修饰的属性。
f.setAccessible(true);
强制进行访问。
EditText et= (EditText) f.get(param.thisObject);
我们新建一个EditText对象,然后指向我们反射到的EditText对象。
et.setText("LoveZHUZHU");
设置好et.setText的内容就可以了。
我们来看一下完成的代码。
PS:记得不是包名而是类名。图了有一点错误。
这样子就Hook成功了。
0x02 Hook Activity 跳转
还是那个Demo,这次我们要做的就是不需要直接去输入密码,直接跳转到我们的目标Activity。这个就是我们这次Hook的目的。
Hook拿到Activity对象
Activity a= (Activity) param.thisObject;
通过parm.thisObject得到一个返回对象。
Class clazz=XposedHelpers.findClass("com.example.hanlei.demo4.Main2Activity",loadPackageParam.classLoader);
通过这种方法获得我们需要跳转的对象。
Intent i=new Intent(a,clazz);
使用Intent进行设置。
a.startActivity(i);
最后使用startActivity进行跳转就可以了。
我们来看一下完整的代码