首页
社区
课程
招聘
[原创]某团外卖H5版本爬虫开发和JS逆向过程
发表于: 2019-9-18 22:21 3574

[原创]某团外卖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直播授课

收藏
免费 10
支持
分享
打赏 + 2.00雪花
打赏次数 1 雪花 + 2.00
 
赞赏  Editor   +2.00 2019/09/20 精品文章~
最新回复 (18)
雪    币: 5484
活跃值: (3297)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
2
66的 前排支持 广告位出租
2019-9-19 09:12
0
雪    币: 222
活跃值: (223)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
666
最后于 2019-9-19 10:27 被老衲很年轻编辑 ,原因:
2019-9-19 10:27
0
雪    币: 3
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
大佬牛逼
2019-9-19 11:41
0
雪    币: 2013
活跃值: (1306)
能力值: ( LV4,RANK:55 )
在线值:
发帖
回帖
粉丝
5
三郎大佬666
2019-9-19 11:42
1
雪    币: 436
活跃值: (721)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
三老牛逼
2019-9-19 11:45
0
雪    币: 42
活跃值: (286)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
牛逼  大佬优秀
2019-9-19 11:46
0
雪    币: 877
活跃值: (137)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
666
2019-9-19 13:35
0
雪    币: 3241
活跃值: (2593)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
大佬niubee
2019-9-19 13:44
0
雪    币: 1578
活跃值: (1291)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
10
我还想要更多。大佬。
2019-9-19 15:14
0
雪    币: 1763
活跃值: (268)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
牛批,这个加密确实很严实,以前没有遇到过请求参数都是通过js生成,比较难找
2019-9-19 16:43
0
雪    币: 1578
活跃值: (1291)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
12
如何定位 poilist 再哪个js文件中? 一个一个搜索关键字?
2019-9-23 09:30
0
雪    币: 1467
活跃值: (1054)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
13
网络枭红 如何定位 poilist 再哪个js文件中? 一个一个搜索关键字?
是这个功能呀!这个是xhr的断点。
2019-9-23 11:14
0
雪    币: 1578
活跃值: (1291)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
14
帅逼李三郎 是这个功能呀!这个是xhr的断点。
跟大哥学习了。原来这个东西是这么用的。
2019-9-23 16:20
0
雪    币: 31
活跃值: (46)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
大佬怎么过的风控?我这边逆向的客户端接口,数据能返回,但是请求多了一些关键数据就没了,比如商户地址,电话这些关键信息~
2019-10-28 17:55
0
雪    币: 159
活跃值: (695)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
过风控,不好过吧。
2019-11-11 17:09
0
雪    币: 1467
活跃值: (1054)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
17
zhangminnn 大佬怎么过的风控?我这边逆向的客户端接口,数据能返回,但是请求多了一些关键数据就没了,比如商户地址,电话这些关键信息~
风控是不好过啊
2019-11-12 00:36
0
雪    币: 1467
活跃值: (1054)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
18
xiaozhu头 过风控,不好过吧。
是呢 不过也不是没有办法。。。
2019-11-12 00:36
0
雪    币: 159
活跃值: (695)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
帅逼李三郎 是呢 不过也不是没有办法。。。[em_41]
确实是。。
2019-11-12 11:14
0
游客
登录 | 注册 方可回帖
返回
//