微信机器人的实现有三种:web,app和exe。其中web很多账号受限登录不了,而hook app的话需要使用xposed则会封号,所以现在大部分机器人都是基于PC微信。
先实现一下最基本的机器人的功能:接收消息和发送消息。找相关call请看:/qq_38474570/article/details/93339861。
接收消息
最新版(2.8.0.121)hook地址偏移:0x354B32
基本所有类型的消息都会通过这个,比如红包、转账和语音文件等,包括公众号的推送也可以收到,因为红包无法在PC微信上查看,只能收到一个红包的文字消息(比如谁谁谁发了红包,请到手机上查看),如果是图片的话可以知道是什么图片,其他比如表情和公众号等都是一些xml的信息也可以解读出来,就是语音的话我还没找到对应的call或者相对应的文件。
要实现拦截信息只需要hook这个地址就能截取到所需要的信息。
效果图:
发送消息
最新版(2.8.0.121)hook地址偏移:0xE3162
发送文本消息的代码就是上面几行。
机器人
上面的两个成品只是验证一下方法可行,并不是机器人,它实际上还是人在操作界面来实现发消息。不过既然能使用外部代码来实现,那么对接某些人工智障(比如腾讯AI开放平台的聊天机器人)也是没问题的。当然,为了其他语言也可以使用,可以开放一个通用的协议来实现,比如tcpsocket,http。RPC是用的最多的,但是我还没有弄懂它是个啥意思。
实现一些群发和转发也是相当简单,对于收发消息的功能这两个call已经足够用了。