-
-
[原创]某团外卖H5版本爬虫开发和JS逆向过程
-
发表于:
2019-9-18 22:21
3574
-
对于一般的H5爬虫,大致需要的技术可参见下图。
今天主要以某团外卖为例介绍一下相关技术。
请拿好小本本。Let's Go.
首先,我们用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中相关参数就俩:
然后看Body中的参数:
这是我们发现,需要逆向的参数有三个,分别是:UUID、X-FOR-WITH、_token。
先看_token,这个参数一眼望过去就是个base64加密的参数,但是我们尝试base64解密一下,不可见字符。那现在我们来逆一下吧。
首先,看到这个请求的关键字。
然后,设置URL断点。
右边就是调用堆栈,可以从上到下分析一下代码的调用逻辑,我们会找到,在函数default里面,看到了疑似的生成参数的地方。
我们重新在上面打上断点,重新出发请求,程序将停止在我们的断点位置。然后我们跟进上面的_token生成的i函数。
我们看到,reload返回的结果由iI函数生成。
而查看,iI函数可以看到,deflate,这是一个压缩算法!那压缩完应该干什么呢,肯定是base64啊!
所以原始数据肯定是经过压缩再base64加密得到的。
我们再“回到最初的起点~”,我们对那串base64解密以后,看到的不可见字符。
这个78 9C的头太标志了。好了我要把我珍藏多年的秘籍告诉你们一下。
如果之前我先看一下hex我就不用逆向JS了。这用zlib就能解开了啊。我们试一下。最终看到,的确解开了。其中的sign参数也是一样的办法就能解开。所以对于这种情况我们应该长个记性,看一眼HEX。
再看参数x-for-with。
按照刚才一样的办法,我找了半天也没找到这个参数的生成过程,在所有调用过程中,看到的都是不带这个参数的,可是发出去的时候,就加上了。好奇怪啊。
看看上面的hookAjax,恍然大悟啊。怪不得之前没找到,他是修改了原生的收发函数添加的部分参数,我们看到open函数里有添加URL参数的代码,这个w()函数就是参数的名字,我们看一眼。
哎唷,写得这么隐秘,把数字转字符,之前还加个1。事出反常必有妖!
好了那这个w()函数所对应的值就是我们要的了,再看刚才那张图。
这下很明显了,加密算法,key,iv,模式,填充都有了。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课