反爬虫之签名(6)
本讲介绍的是一种比较麻烦的反爬虫策略:请求签名。
请求签名
请求签名指在请求url中增加一个sign字段,通常取值为自定义字段的md5校验码。
前面介绍的反爬虫策略基本上都有规律可寻,但签名很让人头疼,因为必须硬手段破解,也就是硬着头皮去调试代码,找出sign生成算法,然后再模拟该算法生成合法请求进行数据爬取。
针对这种加密,网页版还好说,毕竟js代码可以查阅与调试,只是非常麻烦。但在app中就非常麻烦了,涉及到反编译工程。
举例-app请求sign
打开手机app,使用Fiddler作为代理进行数据包抓取,如下图所示:
看到这里你应该明白,app请求也不是无法捕获,关键还是看其是否使用了http协议。上图是一个app的http请求,图中body部分是post请求体,颜色加深部分就是sign字段,也是今天的主题。
如果你看到请求querystring或post body中存在sign字段,那么心里就应该疙瘩一下,因为抓取难度会上升很多。
下图展示的是sign字段的一个常规生成算法:
基本规则都是组装字符串,然后md5加密。
常规方法
到目前为止,sign加密应该算是最麻烦的反爬虫手段,尤其是app请求的sign加密,列出一些我对网页版和app版的sign破解看法。
网页版
sign算法一般隐藏在js代码中,所以需要调试js代码。不用说,js代码肯定是格式化的,所以你能看到的基本就是a,b,c,d这类变量。
破解方法一般分为两步:
-
找到发出请求的地方。
-
使用浏览器调试该部分的相关变量。
最后能不能找出来就看个人动手能力了。
app版
难度高低不一,对于安全措施较高的app,会进行app代码本身进行安全性校验,所以很难反编译后再修改代码进行调试。不过依旧可以反编译得到源码,进行源码阅读,但由于难以调试,所以难度非常大。
关于app的反编译,可以在网上搜到具体方法,此处就不赘述了。