微信公众号采集方案(基于Windows逆向)

引言

目前主流的公众号采集方案只有以下几种方法

  1. 搜狗微信
    无法采集历史了,而且搜索也不按时间排序。获取的数据的价值不高,不过可以通过它来获取公众号的biz。

  2. 微信公众平台
    微信公众平台虽然可采集历史,但限制较大,没抓多少就被封接口了。可配合其他方案一起使用。

  3. 安卓端微信
    xposed hook微信消息并不难,网上能找到相关的代码和教程,基本都是hook微信入库的函数。但是微信会检测xposed直接封,即使你没有使用过微信插件,当然这也会根据号的权重来封。暂未找到好的解决方法。

  4. 一些第三方的平台
    有很多第三方的平台会提供一些微信的数据,比如最热文章等。

  5. 网页端微信
    基本没啥用,能登上去的都是很老的号了。

  6. Windows端微信和Mac

    • 和安卓端微信一样,微信有Windows客户端和mac。功能其实该有的都有了,所以我们也可以通过hook来获取公众号推送数据。
    • 历史和阅读数可以使用模拟点击加拦截来采集。看使用工具和语言的不同,步骤也有所区别。比如有些人用fiddler拦截到参数,在用参数请求接口获取数据,这人工操作过多,不适合大批量。或者是使用mitmproxy加点击,参数失效就模拟点击在打开一次链接,如果拦截到参数则请求接口获取数据,这比fiddler部署到正式环境方便的多,但是也需要过多的人工操作。
    • 浏览器js注入。将模拟点击这一步简单化。大概就是拦截响应并修改它,加入一些js让他等待一小段时间打开下一个链接,这样就可以一直让浏览器打开链接,在Windows、mac和安卓端都可以实现。不过这些虽然技术简单但实现较繁琐,部署比较麻烦。
    • 逆向打开url:你点击链接打开url不过是调用了一段代码段,那找到这段代码写个dll注入到微信并开一个服务就可以在外部操作微信打开url。技术含量过高,搞爬虫的基本不会,需要找Windows或者mac逆向大佬。这样就可以省略模拟点击和js注入这两个步骤。(已经实现了)
    • mitmproxy还要装证书,写脚本,还要保证一直运行。能不能连这个步骤也省略呢?当然可以,完全可以做到不用拦截工具就获取到历史接口所需的参数。

正文

微信的采集难度对刚接触的人来说不算简单,新手基本都是在Windows端模拟点击加拦截,而且模拟点击使用的还都是Python,需要显示器才能正常操作,而且只能操作一个客户端。操作麻烦不说,这样的效率也很低。

我接触微信采集也有小半年了,研究了很久,甚至找了一些Windows逆向的大佬直接买代码,最终实现了一种还可以接受的采集方法。当然也是针对Windows端微信。

  1. 公众号实时的发文采用hook拦截,如果你真有时间的话,完全可以参考网上的免费教程自己研究,这个相关教程很多,搜PC微信拦截消息hook就行(关键词不要加公众号,有时候技术是互通的,只是因为人的需求而被限制了)。只需要找到接收消息的call。有兴趣的可以看看这个大佬关于微信机器人的文章:https://blog.csdn.net/qq_38474570。

  2. 自动关注和取消关注,有两种实现,第一种:基于逆向rpc调用微信内部代码,需要公众号原始ID(一般gh_开头,和wxid是类似的,可以关注和取消关注)。另一种是用biz拼链接打开公众号主页,模拟点击(只能关注,无法取关)。而且biz关注还会占用一次历史接口,本来一天历史接口就有限制,关注又会占用一部分,不太合适。

  3. 获取微信已关注公众号列表,也有两种实现,第一种:基于逆向hook相关call,这种方法局限性大,无法实时获取关注列表,因为只有在登录时才会加载全部的公众号。第二种:读取内存(公众号列表一般是全局数据,所以可以直接从内存中读取),可以实时读取,一般采用这种方法更合适。

  4. 打开链接(文章链接和公众号主页链接)也有多种方法,比如模拟点击,基于逆向等。试了很久,针对不同情况使用不同的方法,文章链接使用逆向方式打开比较方便。模拟点击一般用于公众号主页获取参数。

  5. 模拟点击需要基于控件句柄的方式(Windows窗口都有自己的句柄,不同微信窗口的句柄也不一样),如果只是基于屏幕坐标的话,不是很准确,当然如果配合ocr使用就更好了(就是有点费CPU)。

  6. 输入url这个步骤其实也可以简化,不需要模拟鼠标或者键盘,直接逆向调用发送消息call,给文件传输助手发消息就行。另外,如何找出最后一条发送的链接我尝试过很多种方法,其实都可行。从屏幕搜图、屏幕ocr到现在的通过窗口句柄遍历元素。前两种成功率虽然也很高,基本不会出错,但是资源消耗较大,所以最后还是使用遍历元素的方式 具体资料请参考微软官方文档:https://docs.microsoft.com/en-us/windows/win32/api/oleacc/nn-oleacc-iaccessible

所有功能

  • 可实时监控公众号的推送,即公众号新发布的文章。误差在5-10分钟(3.0以上版本更改了推送规则,当收到消息或者微信窗口受到焦点才会主动推送,不然需要隔一段时间向服务器请求一次,所以误差会在5-10分钟,对延迟要求较高的可以使用2.8版本的)

  • 可以不关注采集公众号的所有历史文章

  • 可以采集文章的内容、评论和阅读数等

  • 可以获取到微信关注的公众号列表(只有公众号名称、公众号ID(gh_开头的唯一id)、公众号(类似于微信号)等,不包含biz字段)

  • 可自动化关注和取消关注公众号

  • 多开免扫码登录。主要是突破微信只能记住一个账号的登录信息,可以点击登录不需要扫码(并没有用于生产中,实际使用是直接将登录二维码传给控制端)

  • 可以激活登录二维码,并获取登录二维码传给控制端(主要是不用远程每台服务器去登录,通过逆向hook实现)

  • 多开控制不会冲突(比如模拟点击),不考虑封号的话无限多开也没问题

  • 心跳检测:微信发送消息的接口也逆向了,用于心跳检测。即用你的微信发送指定消息到服务器微信,服务器通过逆向的接口回复你,用于判断微信和采集程序是否正常运行 已废弃,后面都是采用http接口操作

  • 登录状态检测:有时候微信会莫名的退出登录,所以加了这个

  • 版本的话,支持2.8.0.121和3.1.0.41,目前在更新3.2.1.154

  • 新增万能key(X-WECHAT-KEY)的获取,也就是一个key可以获取任何公众号的历史和阅读数,但有时间限制,失效可以重新获取。
    以下版本基于3.6.0.18

  • 新增搜一搜的获取

  • 新增a8key的获取,也就是万能key,但比X-WECHAT-KEY功能更全

  • 新增视频号的获取

  • 新增小程序code的获取

  • 新增读取微信本地数据库里的公众号消息(只要微信开着,有给你推送数据就会存到数据库,获取历史的不会存到库里)

其他

技术太复杂学不会怎么办?我已经将所有功能封装成exe,只需要操作界面就可以采集微信文章(需要懂得基础的东西,比如json和网页解析),解析需要你自己写,因为我不知道你需要哪些字段。如果软件不满足你的要求,你也可以找我单独定制一款。另外,如果需要自己二次封装扩展功能的话,可以提供代码和指导,如果只是想要数据的话也可以合作。

演示

监控推送(图中监控账号就是我的,欢迎添加交流)

程序中监控是指要监控哪个微信好友的消息,当收到该好友指定格式消息时,开启采集程序采集相应内容。设置是设置邮箱发送的一些信息,当微信意外退出登录时会发邮件通知。
微信公众号采集方案(基于Windows逆向)_第1张图片

Windows版本

家用电脑:Windows7、window10
服务器:WinServer2012、winserver2016

其他未测试的并不是不能用,目前发现不能用的版本是Windows8,有些必须的软件装不上,无法成功注入dll

接口文档

这是目前的软件已经实现的功能,软件通过http接口控制

3.1.0.41的接口:https://www.showdoc.com.cn/1353409027945629

3.6.0.18的接口:https://www.showdoc.cc/1965672579479613

测试接口

公开几个接口同于测试,只是测试使用,请勿大量请求。有任何bug或问题都可以反馈

https://www.showdoc.com.cn/1614167891513597

post请求体添加了一个效验参数key,key的获取有两种。简单来说,如果你的微-信-号存在于我的好友-列表,那么你就可以使用自己的微-信-号作为key(需要一些时间更新列表,一般十分钟左右),另一种方法看文档中的备注和提示

因为是公网请求,再加上还要验证redis,可能响应时间比较长,具体看实际请求。如果换成局域网内部署并且去掉验证的话会快很多。

温馨提示

需要的请联系上面图片中的微信。如果你不是工作需要,只是想白嫖的话,请勿打扰。

你可能感兴趣的:(Python,公众号采集,搜一搜,a8key,小程序code,视频号)