某查查爬取统一社会信用代码

0x01 First Glance

TimeStamp:2023-3-3

该企业查询网站限制普通会员最多查看40条数据。可以通过筛选条件查询

image-20230303130506731

🎯Target:爬取1w+统一社会信用代码

搜索结果中一页最多20条数据,因此每个搜索条件下最多爬取两页

以关键字“餐饮”为例去搜索,发现其实大部分时候,每天成立的企业还挺多的,因此可以遍历成立日期来尽量爬取多的数据

image-20230303131915171

接口为/api/search/searchMulti ,repeater去除掉掉可以去除的头字段。

需要找到上面红框字段的生成方式,估计是个摘要算法。

0x02 Debug

下了XHR断点,回溯调用栈没啥发现。

由于是往请求头添加字段,试试搜headers关键字。Lucky Guess!!!

image-20230303132409873

调试可知,t是接口路径,e.data是请求体

image-20230303132534858

首先看字段名的生成,跟进a.default

image-20230303132645363

取出参数并转为小写,其中将第二个参数json对象转为json字符串

o.default传入两个参数,第一个是t和n拼接,第二个是a.default(t)得到的

跟进a.default

image-20230303132912083

就是对参数进行一些处理,后面模拟的时候直接用python调js的函数就好了

其中o.default.n调试可知为20

o.default.codes也是固定的

image-20230303133105692

整理一下:

由于我们使用的就只有这一个接口,直接把这个a.default(t)(t为接口名)写死在爬虫程序就可以了,

回退跟进o.default(t+n ,a.default(t))

image-20230303133455027

再跟进去

image-20230303133533124

熟悉的HMAC,就是加盐的哈希。这里盐是a.default(t),要哈希的数据是t+n

但看一下返回的长度128个字符。而比较常见的MD5也才32个字符(SHA1 40个字符)

笔者还以为这个前端又魔改了HMAC算法。根据以往经验,就算魔改了,也只是在HMAC入口处或出口处稍作改动,不会改其内部算法

试探性地搜一下HMAC

image-20230303133732042

HmacSHA512???去在线网站试了试果然是128个字符

python实现如下:

接着HMAC返回值subStr(8, 20),即从第八个字符开始取20个字符,作为字段名

接着看字段值:

image-20230303132534858

跟进s.default()发现返回也是写死的

image-20230303134519884
image-20230303134655421

a.default(n) 和上面的一样,是对接口名称的处理,写死的

o.default 进去的也是HMAC,和上面一样

可以快乐地写脚本了。

0x03 Robot Build

Last updated