声明:该文章仅用于学习,不得用于商业用途,如有问题,请联系作者删除!
前言:相信大家在爬boss网页版的时候都有遇到被zp_stoken这个参数恶心到的情况。下面介绍的这种爬取方式,不用解密任何加密字段只需更换代理ip即可轻松爬取你想要的信息。
先跟大家介绍爬虫几种常见的爬取方式:
- 网页端
- APP端
- 分享页面(较少)
- 小程序端
前三种这里不做介绍,大家容易忽略的是第四种,小程序端。目前基本很多大厂和中小型公司在打造app的同时都会有自己的小程序,由于小程序也只是最近几年才发展起来的,所以在各项反爬上较APP或网页会简单。这次的Boss也是如此。
抓包
image.png这里为啥没截结果呢。。。因为IP被封了。。。就不放出来打脸了。
大家可以看到除了一个mpt看上去是个加密参数,其他都是能直接复制粘贴的东西。
mpt参数是啥
首先给出个结论,这参数是个认证参数,在经过几千次测试后,参数不会改变。
- 那么想要知道这参数是啥,就得逆向小程序包了,小程序的包如何去抓,可以看我之前发的 2020年最新反编译任何微信小程序,以及独立分包、插件的处理方式
这里我直接贴上相关源码:
getCodeData: function() {
var e = this;
return new Promise(function(t, a) {
wx.login({
success: function(a) {
var o = a.code;
(0, i.WX_LOGIN)(o).then(function(a) {
var i = a.zpData,
o = (i.wt, i.mpt),
s = i.openId;
c.data.mpt = i.mpt, c.data.openId = i.openId || "", e.checkAuth().then(function() {
(0, r.triggerEvents)("wxReady");
});
var u = wx.getStorageSync("LOGIN_DATA") || {}, d = (0, n.default)({}, u, {
mpt: o,
openId: s
});
d.wt ? (e.afterLogin((0, n.default)({}, d)), e.checkComplete(!0)) : c.logout(),
t(c.data);
});
}
});
});
},
-
c.data.mpt = i.mpt 这里就是给mpt这个参数赋值的地方,我们还可以看到一个wx.login()方法,如果你开发过小程序,对这个方法就再熟悉不过了,小白跳至 wx.login官方文档,猜测该方法不能直接从小程序包里得出,而是微信自身的一个接口,如果想知道该方法做了什么,只有通过逆向微信APP来完成,大佬希望可以私聊我交流下。下面就是调用的后返回的结果:
image.png -
code值得出后,你会发现这个code值并不是mpt的值,所以这里面肯定还存在一些处理的逻辑。我们回到抓包
image.png - 刚进入小程序,会进行该请求然后返回一个含有mpt的数据,这个请求含有几个参数一个code,还有一个appId,appId写死即可,下面就是code,这个code即是我们通过wx.login()方法返回的那个code的值。
若mpt参数失效怎么办
- 在测试过程中,没有遇到mpt最后失效的情况。但如果真的会失效,在没有逆向APP基础的情况下,也是有办法的。
在失效后使用airtest进行模拟操作,再通过mitmdump进行中间人拦截从而获取mpt的值即可。
网友评论