欢迎光临
我们一直在努力

python爬虫破解H5美团外卖和js逆向过程

本帖最后由 骄傲的稻草人 于 2019-11-7 09:59 编辑

今天主要以美团外卖为例介绍一下相关技术。
接口逆向

首先,我们用chrome打开网站:http://h5.waimai.meituan.com。F12打开开发者工具,随便进了一家店铺,这时在Network就能看到相关的请求接口了。
[Asm] 纯文本查看 复制代码

https://i.waimai.meituan.com/openh5/poi/info?_=1572941042365&X-FOR-WITH=%2FTpeFg7r%2F%2BOL%2FMvxldAO1jThB7GE7UV6hc97AC1EkJ4hIUmZlHTO36%2BQauxIwgXJjPlIR43LtErqgUEH%2F08kseW4mLMoCKSckiBZw80N%2BpPlCmFbeZlLag2UAppX4ASLLmJ7wyssHKW%2FhacJn9LuOl1nB5pD%2Bn5e0XQG6nuvqDVPKgWZYpDQ%2B4gBFV1Hjb%2B8Xs0XjEC7BJGf3lpHisTaQQ%3D%3D




可以看到请求的参数就两个:



python爬虫破解H5美团外卖和js逆向过程



然后在看Body中的参数:



python爬虫破解H5美团外卖和js逆向过程



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


参数逆向


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



python爬虫破解H5美团外卖和js逆向过程



然后,设置URL断点。



python爬虫破解H5美团外卖和js逆向过程




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

python爬虫破解H5美团外卖和js逆向过程


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





python爬虫破解H5美团外卖和js逆向过程



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



python爬虫破解H5美团外卖和js逆向过程





以及调用的reload函数。



python爬虫破解H5美团外卖和js逆向过程



我们看到,reload返回的结果由iI函数生成,查看iI函数可以看到,deflate,这是一个压缩算法!那压缩完应该干什么呢,肯定是base64啊!



python爬虫破解H5美团外卖和js逆向过程




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

python爬虫破解H5美团外卖和js逆向过程

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

python爬虫破解H5美团外卖和js逆向过程

python爬虫破解H5美团外卖和js逆向过程

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

python爬虫破解H5美团外卖和js逆向过程

python爬虫破解H5美团外卖和js逆向过程


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



python爬虫破解H5美团外卖和js逆向过程





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



python爬虫破解H5美团外卖和js逆向过程



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



python爬虫破解H5美团外卖和js逆向过程



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



python爬虫破解H5美团外卖和js逆向过程






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

python爬虫破解H5美团外卖和js逆向过程

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

python爬虫破解H5美团外卖和js逆向过程

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


python爬虫破解H5美团外卖和js逆向过程

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





点进去看下加密方式:



python爬虫破解H5美团外卖和js逆向过程




这下很明显了AES加密算法,key,iv,模式,填充都有了,要是还不明白请看下图:

python爬虫破解H5美团外卖和js逆向过程

有了秘钥还不简单,在线搜索“AES解密”试一下:

python爬虫破解H5美团外卖和js逆向过程



我们用python还原一下这个加密算法:

python爬虫破解H5美团外卖和js逆向过程

这回大功告成了,相信你要是自己断点跑一下,一定看的一清二楚,至于UUID的算法还原,
我就没截图了,留给各位尝试一下吧。大致是每一部分都有一个生成算法,几部分拼接而成,找到的可以评论交作业。

python爬虫破解H5美团外卖和js逆向过程

这次的例子中我们没有涉及到复杂的算法,否则我们逆不出来的时候,也需要把js拿出来在其他环境直接调用,
当js包含大量浏览器环境的时候,还需要用webdriver把js加载起来调用。当然你在做的过程中,cookie参数生成遇到问题,
或者让你拿到数据之后,你还会遇到字符加密,销量整十等其他问题,
简单写了个程序,加了代{过}{滤}理ip,跑了两小时,爬取店铺数据近万条,以上如有问题,可以联系我或者评论下方提出问题。

破解成功截图:


python爬虫破解H5美团外卖和js逆向过程




python爬虫破解H5美团外卖和js逆向过程



打了这么多字不容易,老铁们给我顶顶贴,抵制伸手党!!!
欢迎阅读转发。

赞(3)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址