前言
接上回写美团外卖H5爬虫的讲,上次写了三个参数中x-for-with和_token的生成。本以为UUID,就可以循着这个思路找到了,后来还是有小朋友问我怎么找UUID,这篇做个答疑吧。
本文主要介绍美团外卖H5页面UUID的生成算法逆向。没看过上篇文章的,点这里。(墙裂建议看完上一篇再看这一篇)
某团外卖H5版本爬虫开发和JS逆向过程
参数逆向UUID
先看看UUID长什么摸样。
一般找这种用户身份标识的ID,我们是应该先看前置的报文,是不是服务器返回的UUID,如果是(很多时候都是),就去模拟报文去服务器取一个合法的UUID,如果不是那就很可能是本地生成的。
我们今天这个是再我观察了来往报文发现不是网络通信传回来的,那我就开始再本地找找。
简单粗暴法
先最简单粗暴的办法,就是全局搜一下“-”的使用,看一下他如何拼接字符串。
什么?全局搜?全局搜是怎么搜?
这里需要一个小技巧。
先把该页面保存到本地,ctrl+s,保存到本地即可。
再选择所有的js文件,用notepad++打开
输入关键词全部文件搜索
过程截图如下:
可以看到,我用的关键词是"-",是带双引号的哦(想想原因?)。
搜索结果显示,两个文件中有涉及到这个关键字,我们大致浏览一下代码,发现应该是analytics.js这个文件,或者找到任何你觉得可疑的位置,回到页面的js打上断点,重新刷新页面。
断点找到这里就单步调试还原生成算法就好了,当然也可以把这个js抠出来python调用js执行也ok。
分析一下js源码大致是一些UA参数、分辨率参数等等,自己伪造传入的时候要跟自己包体带的信息一致,最好写手机参数信息哦。下面是我的算法还原函数,供参考。
上面的暴力方法是通过正向编程的经验推断过来的,但也不是次次都好使,下面简单说通常的办法。
顺藤摸瓜法
前期说明一下,我们仔细观察报文可以发现的是,uuid、_lxsdk_cuid、openh5_uuid、_lxsdk都是一致的,仔细看看cookie就知道了。那么我们找到任何一个的生成就可以了。
还是和上次一样的思路,我们先用xhr断点断下网络请求(不会的去看上一篇啊),查看堆栈。
会找到uuid是cookie里面取到的,那么我们就再找一下cookie的设置uuid的部分就好了。
这个和上一篇是一个思路,我就不一个个截图了。
tips
这部分要善用两个东西:
chrome的无痕窗口
页面缓存的删除
好了。自己试试吧~