# 1.XHR 请求
在理解逆向时,首先要明白数据是如何产生的,现在大部分数据都采用异步加载的方式,也有少量数据直接写在网页上,直接在网页上的静态数据在此不做阐述。
以目前的情况来看,我们想要获得的数据主要都是异步产生的,异步与同步的差别主要在于,同步需要执行完所有的过程数据才显示,异步就是可以中途显示数据,要使中途显示数据有很多种方法,例如和函数绑定,这样就可以实现翻页,页面的数据改变。
在类似翻页过程中,我们实际上是用鼠标点击了页面页码、下一页等操作,该位置通常绑定了 click 事件,这样我们在点击时,就会运行 click 函数, 然后向服务器传递了请求,服务器给我们返回了对应的数据。
startID=>start: 点击事件(携带参数) | |
operation1=>operation: 回调函数 | |
operation2=>operation: 调用ajax | |
operation3=>operation: 返回数据 | |
endID=>end: 浏览器渲染数据 | |
startID->operation1->operation2->operation3->endID |
从实际来看,我们从点击翻页到页面数据渲染只发生了取值,发送,返回,渲染四大步骤。
# 2. 反爬
而所谓的反爬,就是在上述 XHR 请求的各个流程中添加措施,从而达到反爬虫的作用。
而反爬可以具体分为如下几种:
- 参数加密
# 1. 参数加密
我们知道,在与服务器交互的过程中,交互的过程实际上就是参数传递的过程,比如,我们可以把一开始携带的页码,在上传到服务器前,对其进行加密,同时在服务端根据其上传的参数进行校验,这样就达到了参数加密的效果。
# 2. 字体加密
CSS 加密:所谓 css 加密就是给与一个字体字典,然后在浏览器渲染数据之前,用给定的字典对于返回的数据包解码,这样即可以保证用户看得到实际的数据,爬虫获取的数据是为解码的。而 CSS 加密按照其类别又可以分为静态 CSS 加密、动态 CSS 加密。
静态 CSS 加密:对于静态 CSS 加密,往往可以忽略加载的字体文件,因为它里面的内容是一一对应的,我们可以手动构建字典,然后达到还原的目的。
动态 CSS 加密:对于动态 CSS 加密,我们发现每次加载的字体文件都不一样,但是返回的参数却是一样的,那么我们就需要进入到字体文件里面进行分析。
font 文件解析:
- <GlyphOrder> 待解析的序号和 unicode 编码
- <TTGLyph> unicode 编码解析后的图片
- <cmap> unicode 编码和 ASCII 码的映射表
总结:对于字体加密类型,首先就是需要将其字体文件下下来,然后根据其中的内容,以及网页返回的内容判断其属于静态还是动态,针对静态的,若混销量不大,可考虑手动建立字典的方式还原,若为动态的,就需要对其字体文件进行分析,然后构建自动化还原表,以达到还原的目的。
雪碧图加密:
雪碧图加密是以图的形式对文件进行上传,然后再根据顺序调用的原理,将其渲染到页面上,以达到降低开销的目的。
# HOOK
document.cookie_bk = document.cookie; | |
Object.defineProperty(document,'cookie',{ | |
get:function(){ | |
debugger; | |
return document.cookie_bk | |
} | |
}) |