js 获得明天0点时间戳_某团外卖H5版本爬虫开发和JS逆向过程

本文通过实例讲解了如何使用Chrome开发者工具进行H5爬虫的接口逆向,包括如何找到并分析请求接口、解密_base64_编码、识别_zlib_压缩算法以及解决_x-for-with_参数的加密问题。通过断点调试,揭示了加密参数的生成逻辑,展示了从HEX分析到解密整个过程,为H5爬虫提供了实用的技术指南。
摘要由CSDN通过智能技术生成

6d3a75454df007bbf358ebb7bc9bdcb6.png

前言

对于一般的H5爬虫,大致需要的技术可参见下图。

今天主要以某团外卖为例介绍一下相关技术。

9dcc0362bbf81d6a291b44b9f78fb071.png

请拿好小本本。Let's Go.

c0fb4fcd16d9cba32f9d66e5a3348a7a.gif

接口逆向

首先,我们用chrome打开网站:http://h5.waimai.meituan.com/。F12打开开发者工具,这时在Network就能看到相关的请求接口了。

https://i.waimai.meituan.com/openh5/homepage/poilist?_=1567748863826&X-FOR-WITH=wJG5u4L0%2FwXsZQl6yywmpR7mTa2SIEWNC95eXDKYC%2Fx%2FEU9l9qNSYIQ0AEODBUiocu2a6WaTbRQm5%2BdY4nPRrDNd%2Bvl4dOfqO9JeJH73afJecdD8S3Cgg9r7CrQIKyE2AUe4PkcJsHOTzVT7ujSDeA%3D%3D

其中URL中相关参数就俩:

4d31616f5f88cf932cead67d9f227418.png

然后看Body中的参数:

287cfab4195e9c3cbda6f7598f13aaaf.png

这是我们发现,需要逆向的参数有三个,分别是:UUID、X-FOR-WITH、_token。


参数逆向

先看_token,这个参数一眼望过去就是个base64加密的参数,但是我们尝试base64解密一下,不可见字符。那现在我们来逆一下吧。首先,看到这个请求的关键字。

515e1270a4e47fc8e2bfb3d8efd2f6e8.png

然后,设置URL断点。

93de59042de2de9bc1b554dd5d565cba.png

设置完成以后,勾选。刷新或重新触发请求数据,可以看到,会在发送数据的时候中断。

53922b2fcfc2abbb619d6a567b2e942b.png

右边就是调用堆栈,可以从上到下分析一下代码的调用逻辑,我们会找到,在函数default里面,看到了疑似的生成参数的地方。

bdf600dd13eb833fd74623b62abf3b31.png

我们重新在上面打上断点,重新出发请求,程序将停止在我们的断点位置。然后我们跟进上面的_token生成的i函数。

6e3e93127056a887515086e49c2c0f94.png

以及调用的reload函数。

53cb115ba6f76debdd4221dc6c4c6212.png

我们看到,reload返回的结果由iI函数生成。

b004373e6d8a3a11043f0bf5dc82d0fb.png

而查看,iI函数可以看到,deflate,这是一个压缩算法!那压缩完应该干什么呢,肯定是base64啊!

e62676ed2ba289dbeae6cf37ddfd3b68.gif

所以原始数据肯定是经过压缩再base64加密得到的。我们再“回到最初的起点~”,我们对那串base64解密以后,看到的不可见字符。

b3d5f0056ae4178a747c3bd3d50905a0.png

这个时候我们不应该放弃的,如果对这个不可见字符,看一下HEX就会发现。

7a740008eb05f9e081365d1c70cda2a1.png

这个78 9C的头太标志了。好了我要把我珍藏多年的秘籍告诉你们一下。

629c4c15f7d1d3d27ed28013442761df.png

192975db219a13744976db07ff1a515f.png

如果之前我先看一下hex我就不用逆向JS了。这用zlib就能解开了啊。我们试一下。

5b9d91c2acfbaf5b094f0b8e2372cb0e.png

a32306de8f930e751d7dfcda2ba2acd7.png

最终看到,的确解开了。其中的sign参数也是一样的办法就能解开。所以对于这种情况我们应该长个记性,看一眼HEX。

c59c188e84639fe9e6047a0f867ffb88.png

再看参数x-for-with。按照刚才一样的办法,我找了半天也没找到这个参数的生成过程,在所有调用过程中,看到的都是不带这个参数的,可是发出去的时候,就加上了。好奇怪啊。

25b58781a032766cdc53bb74ee7b64db.png

这个图是程序根据我们URL断点断下来的位置。蓦然回首,那人却在灯火阑珊处。我们注意到他发送之前调用到的这个i,里面有个send函数,点进去看一下。

de8c7b5e7e5cbc43a8ccce0cc0357a9c.png

看看上面的hookAjax,恍然大悟啊。怪不得之前没找到,他是修改了原生的收发函数添加的部分参数,我们看到open函数里有添加URL参数的代码,这个w()函数就是参数的名字,我们看一眼。

618549f6f98fb88900d2853870fd54fd.png

哎唷,写得这么隐秘,把数字转字符,之前还加个1。事出反常必有妖

3e0ac9edb9d5dd9c854d8c23ab04ab3a.png

我们用python还原一下这个函数(当然也可以把这个代码copy到console执行一下,还更快,我就是show一下我不光会逆向,我的代码也写得6)

9cb43474b0401c51d693e5d060a94db3.png

bingo!好了那这个w()函数所对应的值就是我们要的了,再看刚才那张图。

de8c7b5e7e5cbc43a8ccce0cc0357a9c.png

这个h()函数就是我们要找的。

eadf08158ad46f8ccf17a3afb8a88963.png

这下很明显了,加密算法,key,iv,模式,填充都有了。

eadf08158ad46f8ccf17a3afb8a88963.png

7e10fbd70ce9583e09926a920e19969b.png

具体待加密的内容我没有详细讲,相信你要是自己断点跑一下,一定看的一清二楚。

62e63b77fd9e38d472288297cdd4c323.png

至于UUID的算法还原,我就没截图了,留给各位尝试一下吧。大致是每一部分都有一个生成算法,几部分拼接而成,找到的可以评论交作业。

梳理一下

我们这次主要介绍了F12的网络报文分析和断点调试功能,一般H5的爬虫逆向,主要也是以下几个步骤。

2eb1ee8c151ecdeff845e11ca0bcce9a.png

这次的例子中我们没有涉及到复杂的算法,否则我们逆不出来的时候,也需要把js拿出来在其他环境直接调用,当js包含大量浏览器环境的时候,还需要用webdriver把js加载起来调用。当然你在做的过程中,cookie参数生成遇到问题,或者让你拿到数据之后,你还会遇到字符加密等其他问题,也可以与我交流。

d9ae123af78f277e631f8ce2202a9293.gif

以上。欢迎阅读转发~

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值