Android——微信自动回复实现

Posted 化作孤岛的瓜

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android——微信自动回复实现相关的知识,希望对你有一定的参考价值。

首先本文的测试微信版本是7.0.3 ,亲测可以使用。

 

需要实现-抓取微信自动回复消息的功能点。

一.首先打开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方法内部:

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

最后按步骤调用 

 

测试结果,大功告成:

 

 

 

 

以上是关于Android——微信自动回复实现的主要内容,如果未能解决你的问题,请参考以下文章

Python 小程序-微信AI自动回复

PC微信机器人成品(使用的腾讯AI)

夺命雷公狗---微信开发06----接收并被动回复语音消息

Django实现微信公众号简单自动回复(复读机)

记一次接收微信公众平台推送消息的实例

4.微信公众号开发:自动回复用户消息