逆向百例——某备案号官网反爬
某备案号官网数据采集
- 声明
- 一、加速乐反爬
- 二、请求头Token参数
- 三、验证码反爬
- 1、滑块识别整体流程
目标网站:aHR0cHM6Ly9iZWlhbi5taWl0Lmdvdi5jbi8jL0ludGVncmF0ZWQvaW5kZXg=
实战我们结合claude code提高我们的破解和爬虫脚本生成效率,文章我们主讲大致的流程和粗略的实战过程。
破解流程大致如下:
1、解决Cookies反爬(加速乐反爬),加速乐相关的讲解可以看我之前写过的文章。
2、请求头相关参数反爬,解决 Token 参数即可。
3、载荷参数加密反爬:
- 获取 Token 接口的载荷 authKey 加密,一个标准的md5加密,就可以获取请求头Token了
- 请求图片的载荷反爬,这个相对简单,直接用通用的uuid生成就可以(用 uuid4,省心、随机、安全)
- 这个载荷加密可以忽略 —— 主要是之前验证码反爬还是文字点选的时候,他的轨迹生成需要用一个标准的AES加密生成。现在是更新成新的验证码反爬了,所以可以忽略
4、验证码反爬:滑块验证码这里也是比较麻烦的一个难点,文章会简单讲解如何过这个比较特殊的滑块验证码反爬。
上面这四个解决完后你就可以采到网站对应的接口数据了。
声明
本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!
以下内容仅供学习交流使用
一、加速乐反爬
在第二次请求的时候,我们直接把它返回的整段代码拿下来,放到文件中,然后用claude code 分析并用 python 纯算还原
便捷是便捷,就是有点烧tokens !!
分析这段混淆代码,纯算得出的python代码如下,可以得出对应的加密情况,其实跟一下流程,然后手写你也可以写出来的(后悔分析这个了):
importhashlib HASHERS={'md5':hashlib.md5,'sha1':hashlib.sha1,'sha256':hashlib.sha256,}defsolve(params):bts=params['bts']chars=params['chars']ct=params['ct']hasher=HASHERS[params.get('ha','sha256')]prefix,suffix=bts[0],bts[1]n=len(chars)foriinrange(n):forjinrange(n):candidate=prefix+chars[i]+chars[j]+suffixifhasher(candidate.encode('utf-8')).hexdigest()==ct:returncandidatereturnNonedefbuild_cookie(params,clearance):cookie=f"{params['tn']}={clearance};max-age={params['vt']};path=/"ifparams.get('is'):cookie+=';secure;SameSite=None'returncookieif__name__=='__main__':params={'bts':['1776759952.391|0|AAM','QPhyJ1Gv8oYvo%2F0ORrZaDs%3D'],'chars':'BHnQegpfVjzdggDbVroIFb','ct':'4e93f61dd7195d914a11704858054f507b767a8d66341492926b46d81b4497a9','ha':'sha256','is':True,'tn':'__jsl_clearance_s','vt':'3600','wt':'1500',}clearance=solve(params)ifclearanceisNone:raiseRuntimeError('no clearance match')print('clearance:',clearance)print('cookie :',build_cookie(params,clearance))原理就是在 chars 里取两个字符 c1、c2,拼成 bts[0]+c1+c2+bts[1],命中 sha256(x) == ct 即为 clearance,也就是加速乐第二次请求生成的 Cookies 参数__jsl_clearance_s。
上面我们的加速乐反爬就结束了。
二、请求头Token参数
这里要先解决authKey请求载荷的加密,直接全局搜索一下打个断点就行了
然后接口返回的数据就有一个是 token,存入请求头,这里也解决了
三、验证码反爬
该网站之前主要是 文字点选 的验证码反爬,最近更新验证码反爬变成了滑块,刚开始我还以为怎么变简单了呢?
结果这个滑块验证码并不简单,花的处理时间比上面其他的反爬操作还要久。
用ddddocr去识别获取的缺口位置得不到一个准确的位置,识别不了,那就解决不了。
所以,我们更改成把图片的Base64通过 np,cv2 解码成 BGR,基于局部方差的滑块缺口检测识别出背景图的缺口位置
核心思路:滑块缺口区是一块被压暗/平滑处理的均匀色块,在整张图里方差最小。脚本通过滑窗方差找这个极小值位置。
1、滑块识别整体流程
Base64图片 → 解码为图像 → 灰度化 → 计算局部方差 → 找方差最小区域 → 返回缺口坐标识别结果如下:
对应的滑块验证码脚本可以私信我获取(非免费提供),也可直接在我的资源上下载。
最终脚本实现:
