今天聊下微信小程序的抓取,其实小程序的抓取不难,主要解决抓包和如何调试小程序这两个问题。如果你运用chrome调试已经比较熟练了的话,就手到擒来。
不用破解的办法如何抓到小程序的包?破解是个费劲的事,一不小心微信账号还可能被封。
小程序抓不到包通常就是你手机的安卓系统版本太高和微信APP的版本太高了。版本越高,通常它的安全性就越好。换用安卓系统是4.4的手机和微信APP版本在6.7左右的版本。使用Fiddler或Charles抓包妥妥的。
如果你实在没有低安卓系统版本手机和低版本微信,继续看下面的文字,待会再介绍一种抓包方法。
只要抓包搞定了,很多小程序也就能抓取了,剩下就是解决IP问题。还有一部分小程序在前端有反爬措施,对请求参数加密或混淆了。所以就还得解决小程序调试问题。
首先得对小程序有一点理解,小程序简单来说也是一个网站,只是它只能在微信里打开,不能在浏览器里打开。
我们都知道一个网站的前端页面是由html、css、javascript组成,小程序的前端页面也是由类似这样的来组成的。小程序里的数据交互也是由javascript来负责的。所以爬虫调试小程序也主要是调试javascript。
那怎么调试小程序的javascript呢?
当我们在微信里点击小程序时,微信会把这个小程序的前端代码下载到你的手机上。我们只要拿到这个小程序前端代码,就能在微信提供的小程序开发者工具上进行调试。
/data/data/com.tencent.mm/MicroMsg/微信号id文件夹/appbrand/pkg/
该路径下以.wxapkg结尾的文件就是小程序前端代码被编译之后的形式。
你会看到很多个.wxapkg文件,因为你打开过很多小程序,最好是你把这个文件下的文件全都删除,重新打开目的小程序。然后里面的.wxapkg文件就都是该小程序的了,或者可以根据使用的时间来判断那个是你刚才从服务器下载过来的。
你需要把.wxapkg的文件都拷贝到你的电脑上来,可以下载RE管理器。(拷贝该目录需要你拥有root权限,所以你得先把手机root了,或者在安卓模拟器里面使用微信,进行如上操作,模拟器默认是root了的)。
这里重要声明一下:虽然微信小程序的包后缀是.wxapkg,但有一些包的依赖后缀也是.wxapkg,真正的小程序包大小1、2M左右,而依赖包大小2、3M甚至更多。所以一股脑的反编译.wxapkg 类型的文件可能会报错: Error: This Package is unrecognizable, please decrypted every type of file by hand.,遇见这个问题的小伙伴请自知,你可能没找对包哦!
.wxapkg
是一个二进制文件,有其自己的一套结构。
微信小程序源码阅读笔记lrdcq大神的这篇博文有对.wxapkg的详细介绍,当然你也不可以不看
一般小程序的文件不会太大,长按,然后点右上角选项将其压缩为zip包
,然后再将压缩好的包通过QQ发送到我的电脑
注:如果不进行压缩的话,QQ会提示文件不可用
所以QQ的这个功能可以让我们很方便的拿到源文件,而不必到电脑目录去找模拟器的文件目录。
我们的目的是拿到小程序的前端代码在小程序开发者工具里面调试,wxapkg是编译之后的小程序,所以还得反编译,让wxapkg解包出源代码。
要感谢开源的世界,已经有爱好者开发出了.wxapkg的解包程序,我们就直接拿过来用。
解包程序的github地址是(看地址2):
地址1:https://github.com/qwerty472123/wxappUnpacker
地址2:https://github.com/xuedingmiaojun/wxappUnpacker
解包程序是由node.js开发的,所以你得先安装node.js,然后再安装node.js的一些依赖包,作者已经在文字里说得很清楚了。我就不再赘述,网上也有很多该程序的用法文章。
最后你只需要运行命令:
node wuWxapkg.js xxxxxx.wxapkg
注意:这个路径最好不要有中文,大家都知道,中文路径,经常引起一些奇奇怪怪的bug,如果路径有中文,自行解决。
这种方法,并不能反编译出所有的小程序源码,请自知!
node是运行node.js的命令,即可把小程序前端源代码还原了。类似下图这样的。
注册一个小程序开发者账号
注册地址:https://mp.weixin.qq.com/cgi-bin/registermidpage?action=index&lang=zh_CN&token=
下载小程序开发者工具:
https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html
打开小程序开发者工具,选择导入已有项目,就是选择上面解包出来的那个文件夹。
点击确定。就出现以下界面。
这就可以对该小程序做调试了,界面是不是很熟悉,是不是跟chrome浏览器的调试很相似。你可以点选sources面板,然后对js打断点,也可以在console里直接运行一段js代码。想要知道请求的URL是如何加密的,跟chrome一样,打断点调试即可。
另外我文章上半部分说了一个抓包问题,还没有解答,如果是高版本安卓系统,高微信版本如何抓包小程序。一种小技巧就是借助小程序开发者工具来抓包,细看上图红框,有个Network面板,跟chrome的功能是一样的,这个小程序的网络请求在Network面板里能看到。
另外因为这个小程序是别人开发的,你要把这个小程序运行起来,要让它不去验证域名和ssl证书那些,如下。
综上解决了抓包和调试小程序问题,就能抓取绝大部分小程序了。还有一些小程序必须要微信登陆才能访问,要大规模抓取,你还是得解决大量账号的问题。
1、可以试试,点击开发者工具详情去掉 es6转es5的勾,勾上不校验安全域名 2、 勾选了还是无法运行?那么请在详情里把基础版本库调低至1.5左右,再试试 3、出现找不到某些文件的情况怎么办?我只能告诉:删!删!删! app.json里面,提示找不到那个文件,就将pages下注册的该页面语句暂时删除掉。删到可以运行为止 4、还是无法运行?那就自己想办法吧!
参考: https://blog.csdn.net/sergiojune/article/details/100788458 https://blog.csdn.net/qq_41139830/article/details/80531802 http://www.360doc11.net/wxarticlenew/833430381.html https://blog.csdn.net/weixin_42460570/article/details/89518059 https://www.jianshu.com/p/dfea1a84bb3b