小言_互联网的博客

Android——微信自动回复实现

307人阅读  评论(0)

比如抓取微信自动回复消息的功能点。

一.首先打开DDMS,使用按钮。

在微信中回复一个消息

点击Stop Method Profiling。

二.查看生成的报表,观察到如下两个方法

其中1应该是发送消息的接口方法。2应该是UI层显示的方法。

 

三.首先分析第一个方法:

1.,可以看到,参数值是String,返回值是Boolean(Z表示boolean),这里测试hook一下该函数。

2.测试结果:

可以看到成功hook到了,说明发送消息是调用的该方法。

3.然后如果需要调用该方法,首先需要获得该方法的实例,并去调用,然后还需要获取到具体消息指向的发送者。

那么这里需要对源码进行分析。

找到Pg方法

调用了apl方法,这里传入了str,继续往下分析可以看到调用了这个方法:

 

可以看到这个ex方法应该是具体的发送消息的方法:

其中调用了

setContent方法即为具体的设置方法,

可以看到该类cx就是消息的包装类:

 

这里通过id参数入手,field_talkerId,hook使用到该id的方法,打印堆栈信息:

com.tencent.mm.g.c.cx.hm

Class clz = XposedHelpers.findClass("com.tencent.mm.g.c.cx", lpparam.classLoader);

XposedHelpers.findAndHookMethod(clz, "hm", int.class, new XC_MethodHook() {

@Override

protected void beforeHookedMethod(MethodHookParam param) throws Throwable {

super.beforeHookedMethod(param);

LogUtil.d("打印调用堆栈开始...");

LogUtil.logStackTraces();

LogUtil.d("打印调用堆栈结束...");

}

});

测试输出结果:

进入该方法:

这里hook测试了一下,我发现原来field_talker才是真正的微信id, field_talkerId并没有用到。

 

所以整个hook的关键点方法都已经找到了:

1. com.tencent.mm.ui.chatting.p.Pg(String str) 方法,参数就是消息内容,可以发送消息,但是无法设置接受者id

 

2. com.tencent.mm.modelmulti.h(String str, String str2, int i, int i2, Object obj) 构造方法,第一个参数是接收者的微信id,第二个参数是内容。

 

自动回复的思路:

首先获得发送者的id,并保存下来,然后调用hook上面第一个方法发送消息,hook第二个方法修改微信id,实现收到消息立刻自动回复。

 

 

四:难点:调用发送接口进行发送:

1.回到之前分析的具体发送的方法,结合消息体用到的地方,可以观察到:

这里最终是调用了这个a方法,拼接参数进行发送的。a方法内部:

可以看到两个参数,第一个就是消息体封装类。

最后按步骤调用 

 

测试结果,大功告成:

 

 

 

 


转载:https://blog.csdn.net/qq_22770457/article/details/101072143
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场