微信公众号采集方案(基于Windows逆向)
引言目前微信公众号采集基本只有几种特定的方法了搜狗微信无法采集历史了,而且搜索也不按时间排序。获取的数据的价值不高,不过可以通过他来获取公众号的biz。微信公众平台微信公众平台虽然可采集历史,但限制很大,没抓多少就被封接口了。安卓端微信网上很多关于xposed hook微信公众号实时推送文章的一些采集方案,这个能用。但是只能使用旧版微信,新版微信对xposed有检测。而且旧版微信会限制刚注册的微信
引言
目前主流的公众号采集方案只有以下几种方法
-
搜狗微信
无法采集历史了,而且搜索也不按时间排序。获取的数据的价值不高,不过可以通过它来获取公众号的biz。 -
微信公众平台
微信公众平台虽然可采集历史,但限制较大,没抓多少就被封接口了。可配合其他方案一起使用。 -
安卓端微信
xposed hook微信消息并不难,网上能找到相关的代码和教程,基本都是hook微信入库的函数。但是微信会检测xposed直接封,即使你没有使用过微信插件,当然这也会根据号的权重来封。暂未找到好的解决方法。 -
一些第三方的平台
有很多第三方的平台会提供一些微信的数据,比如最热文章等。 -
网页端微信
基本没啥用,能登上去的都是很老的号了。 -
Windows端微信和Mac
- 和安卓端微信一样,微信有Windows客户端和mac。功能其实该有的都有了,所以我们也可以通过hook来获取公众号推送数据。
- 历史和阅读数可以使用模拟点击加拦截来采集。看使用工具和语言的不同,步骤也有所区别。比如有些人用fiddler拦截到参数,在用参数请求接口获取数据,这人工操作过多,不适合大批量。或者是使用mitmproxy加点击,参数失效就模拟点击在打开一次链接,如果拦截到参数则请求接口获取数据,这比fiddler部署到正式环境方便的多,但是也需要过多的人工操作。
- 浏览器js注入。将模拟点击这一步简单化。大概就是拦截响应并修改它,加入一些js让他等待一小段时间打开下一个链接,这样就可以一直让浏览器打开链接,在Windows、mac和安卓端都可以实现。不过这些虽然技术简单但实现较繁琐,部署比较麻烦。
- 逆向打开url:你点击链接打开url不过是调用了一段代码段,那找到这段代码写个dll注入到微信并开一个服务就可以在外部操作微信打开url。技术含量过高,搞爬虫的基本不会,需要找Windows或者mac逆向大佬。这样就可以省略模拟点击和js注入这两个步骤。(已经实现了)
- mitmproxy还要装证书,写脚本,还要保证一直运行。能不能连这个步骤也省略呢?当然可以,完全可以做到不用拦截工具就获取到历史接口所需的参数。
正文
微信的采集难度对刚接触的人来说不算简单,新手基本都是在Windows端模拟点击加拦截,而且模拟点击使用的还都是Python,需要显示器才能正常操作,而且只能操作一个客户端。操作麻烦不说,这样的效率也很低。
我接触微信采集也有小半年了,研究了很久,甚至找了一些Windows逆向的大佬直接买代码,最终实现了一种还可以接受的采集方法。当然也是针对Windows端微信。
-
公众号实时的发文采用hook拦截,如果你真有时间的话,完全可以参考网上的免费教程自己研究,这个相关教程很多,搜
PC微信拦截消息hook
就行(关键词不要加公众号,有时候技术是互通的,只是因为人的需求而被限制了)。只需要找到接收消息的call。有兴趣的可以看看这个大佬关于微信机器人的文章:https://blog.csdn.net/qq_38474570。 -
自动关注和取消关注,有两种实现,第一种:基于逆向rpc调用微信内部代码,需要公众号原始ID(一般gh_开头,和wxid是类似的,可以关注和取消关注)。另一种是用biz拼链接打开公众号主页,模拟点击(只能关注,无法取关)。而且biz关注还会占用一次历史接口,本来一天历史接口就有限制,关注又会占用一部分,不太合适。
-
获取微信已关注公众号列表,也有两种实现,第一种:基于逆向hook相关call,这种方法局限性大,无法实时获取关注列表,因为只有在登录时才会加载全部的公众号。第二种:读取内存(公众号列表一般是全局数据,所以可以直接从内存中读取),可以实时读取,一般采用这种方法更合适。
-
打开链接(文章链接和公众号主页链接)也有多种方法,比如模拟点击,基于逆向等。试了很久,针对不同情况使用不同的方法,文章链接使用逆向方式打开比较方便。模拟点击一般用于公众号主页获取参数。
-
模拟点击需要基于控件句柄的方式(Windows窗口都有自己的句柄,不同微信窗口的句柄也不一样),如果只是基于屏幕坐标的话,不是很准确,当然如果配合ocr使用就更好了(就是有点费CPU)。
-
输入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版本
家用电脑: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,可能响应时间比较长,具体看实际请求。如果换成局域网内部署并且去掉验证的话会快很多。
温馨提示
需要的请联系上面图片中的微信。如果你不是工作需要,只是想白嫖的话,请勿打扰。
更多推荐
所有评论(0)