微信自动化方案

Posted by lili on November 12, 2020

本文记录作者在摸索微信自动化的过程,仅供参考,请勿用于非法活动。

目录

目的

我们希望把对话机器人应用到微信上来实现客户服务,但是由于微信并没有公开的API,所以我们需要用一种方法来实现微信的自动化方案。我们的核心目标是实现消息的发送和收取,其它辅助功能比如加好友、发朋友圈等并不是最优先的需求。

方案分类

微信客户端

微信目前有三种客户端:手机app、PC(windows/mac)和网页。手机app的功能最为强大,可以完成全部的操作;PC客户端可以完成大部分操作;而网页端的功能最弱。

由于微信官方并没有功能列表或者传统软件的release notes,这里主要参考时最全微信功能介绍微信界面与设置详情简介和实际作者的客户端。作者的客户端时安卓微信app 7.0.14、Win10下的微信客户端2.9.5.41和Win10下的Chrome 85.0.4183.102下的浏览器客户端。

对于我们的需求来说,我们只需要实现消息的发送和接受,因此下面我们只关注发送消息相关的功能差别。

根据客户端的分类,自动化的方案可以分为如下几种:

  • 网络协议破解
  • 手机(安卓)模拟器
  • 真机控制
  • PC客户端破解
  • PC客户端自动化
  • 网页客户端自动化

下面会概括的讨论一下几类方案。

网络协议破解

既然微信是通过网络与服务器进行通信的,那么进行协议破解从理论上是可行的,但是风险和难度极大。

手机模拟器

因为手机app版本的微信功能最全,主动添加好友等功能只要手机版本才有,所以很多微信(自动)运营的都需要使用这个版本。但是从微信的角度来说他们是不希望微信的用户被广告骚扰的,所以微信会通过检测算法发现并且封号。另外就是常见的中文模拟器都没有Linux版本,而且云服务器很多都是没有vt-x的支持,无法安装模拟器。

真机控制

和模拟器类似,只不过用电脑来编程控制真机,这样微信更难检测是程序控制的。不过缺点当然是成本太高,可以通过各种安卓自动测试工具比如Robotium 、Appium和Uiautomator等来控制。

PC客户端破解

windows程序破解有比较成熟的方案,可以参考以前单机游戏的破解方式。

PC客户端自动化

PC客户端自动化的原理就是通过程序模拟人的操作(鼠标和键盘操作)来控制微信,它的优点是想对于网页版来说PC端的功能还好说比较多的。它的缺点是:不能用Linux服务器;

网页客户端自动化

网页自动化的原理就是通过程序控制浏览器,模拟人的操作。它的优点是可以在Linux服务器上运行,也可以使用Headless浏览器方案,成本更低,一个浏览器进程只能登陆一个账号,但是可以启动多个浏览器进程。缺点当然是网页版的功能太少,而且微信的管控非常严格,新注册的微信号通常无法使用网页版登录。

不同方案的相关资源

下面是作者调研过程中了解到的一些资源,汇总一下。

网络协议分析

注意:请注意法律红线。 微信也被山寨?盗版微信与正版互联互通 团伙被判1年瞬行天下营销手机内置微信非法外挂,三年后作者被判刑

手机/模拟器自动化

这里和移动端的自动化测试有很多交集和类似的技术。移动端自动化测试的基本原理也是模拟人类的操作——点击、滑动和输入等等。使用真机的成本较高,但是不太容易被微信封号。而使用模拟器的成本较低,但是由于它和真机还是有较大区别,很容易被微信封号。另外如果是云的服务器,某些模拟器可能无法运行(它们需要VT-X等支持)。手机自动化测试的框架很多,我们这里主要使用了Appium。它的优点是开源,并且支持Android和IOS的原生(native)应用,同时也支持windows和mac等桌面程序的自动化。

PC客户端破解

基本原理和游戏破解类似。目前似乎可用的是WechatPCAPI。虽然在github上,但破解本身并不开源,而是直接提供的dll。这个dll里面有什么东西就完全不能保证,而且似乎只能破解2.7.1.82这个版本的。请慎重思考后使用!

另外一个是wechaty。和前面类似,虽然也是在github上,而且star很多,但是其开源的只是客户端。它的原理是在服务器端登录微信,我们每次登录都要扫描二维码。想象一下别人在某台windows/pad机器上用你的微信登录,登录时会有一个二维码,然后他把二维码发给我们,我们用手机扫描授权他登录。然后所有的消息都会走他们的服务器,然后再转发给我们的客户端。这种模式反正我是不敢用。

PC客户端自动化

Python+OpenCV控制微信客服端发送信息,只是一个Demo。这是使用计算机视觉的方式(模拟人),本系列文章后面会重点介绍这种方法。

网页自动化

比较出名的是itchat,它的原理是模拟浏览器的来发送HTTP请求,但是它并没有完全模拟浏览器的所有行为,因此很容易被微信检测出来。根据这篇文章,目前这个工具已经不能使用了。

另外更好的方法是使用Selenuim Webdriver来控制浏览器模拟人的行为发送消息。而且主流的浏览器比如Chrome都支持Headless模式,也就是不需要GUI就可以运行浏览器,也可以在Linux Server上运行。但是网页版的客户端很容易被封号,而且新注册的账号不允许使用QQ浏览器之外的浏览器登录(QQ浏览器可以监控是否程序控制)。