- 使用Xposed设置第三方应用的输入框的值;
- 使用Xposed点击第三方应用的按钮;
- 使用Xposed操作密码键盘输入密码;
一、使用Xposed为设置第三方应用的输入框的值
思路:找到EditText对象,再为EditText设置值即可;
第三方应用控件查找EditText源码:
public class WithdrawActivity_ extends BaseActivity {
@ViewById(resName="withdrawalsMoney") protected APInputBox c;
@ViewById(resName="confirm_btn") protected Button d;
public final void onViewChanged(HasViews arg2) {
……
this.c = arg2.findViewById(R$id.withdrawalsMoney); //输入框对象查找
this.a = arg2.findViewById(R$id.titleBar);
this.h = arg2.findViewById(R$id.withdrawAmountTitleView);
this.b = arg2.findViewById(R$id.withdrawAll);
this.a();
}
}
可以通过控件查找时拦截获取EditText对象,但是输入框对象是属于APInputBox类型的,比没有setText()方法,不能给输入框设置值
最后发现通过this.c.getEtContent()可以获取EditText对象。最后在调用setText方法即可设置值了。
EditText editText = (EditText) XposedHelpers.callMethod(XposedHelpers.findField(activity.getClass(), "c").get(activity), "getEtContent", new Object[0]);
editText.setFocusable(true);
editText.setFocusableInTouchMode(true);
editText.setText((“abcd”));
二、使用Xposed点击第三方应用的按钮
思路:找到Button对象,再调用performClick方法模拟点击;
performClick()方法 是使用代码主动去调用控件的点击事件(模拟人手去触摸控件)
Button comfirBtn = (Button) XposedHelpers.findField(activity.getClass(), "d").get(activity);
comfirBtn.setEnabled(true);
comfirBtn.performClick();
activity为Xposed拦截的当前页面的实例对象,可通过param.thisObject获取。
变量d为activity页面的button对象,通过反射方法可以获取button的值,但是前提c已经被赋值,否则获取到的对象为null。
MethodHookParam.thisObject:这个类的一个实例;
MainActivity activity = (MainActivity) param.thisObject;
可以通过 param.thisObject 获取当前的Activity,从而获取 当前的所有变量
三、使用Xposed操作密码键盘输入密码
思路:拦截获取到密码接收的TextView,密码TextView可以根据当前获取到的TextView的对象节点是否包含需要的Id来定位到密码TextView,最终调用setText方法设置密码
XposedHelpers.findAndHookMethod("android.widget.TextView", classLoader, "onAttachedToWindow", new XC_MethodHook()
{
protected void afterHookedMethod(MethodHookParam arg8)
{
final TextView textView = (TextView) arg8.thisObject;//获取View对象
String v1 = textView.toString();
LogUtil.logic_i(String.valueOf(v1) + ",text:" + textView.getText() + ", context:" + textView.getContext().toString());
if (v1.contains("com.alipay.android.phone.safepaybase:id/mini_spwd_input"))
{
textView