【阿卡迈防护分析】Vueling航空Akamai破盾实战

文章目录

  • 1. 写在前面
  • 2. 风控分析
  • 3. 破盾实战

【🏠作者主页】:吴秋霖
【💼作者介绍】:擅长爬虫与JS加密逆向分析!Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Python与爬虫领域研究与开发工作!
【🌟作者推荐】:对爬虫领域以及JS逆向分析感兴趣的朋友可以关注《爬虫JS逆向实战》《深耕爬虫领域》
未来作者会持续更新所用到、学到、看到的技术知识!包括但不限于:各类验证码突防、爬虫APP与JS逆向分析、RPA自动化、分布式爬虫、Python领域等相关文章

作者声明:文章仅供学习交流与参考!严禁用于任何商业与非法用途!否则由此产生的一切后果均与作者无关!如有侵权,请联系作者本人进行删除!

1. 写在前面

  Akamai可以说是反爬虫对抗领域中目前难度极高的防护产品。这家公司主要就是提供CDN的,其中CK加密技术的应用覆盖了境外很多航空网站,而做廉价票务监控的一些公司不得不考虑如何解决Akamai的防护。目前国内的话有瑞数,它们都是基于CK去做加密处理进行防护,但是跟Akamai跟RS是不一的

RS可以走补环境的方案,Akamai这个方案基本是不可行的!


通过请求网站拿到_abck、bm_sz,同时会得到一个外链JS,POST这个外链JS(携带sensor_data)会得到一个新的_abck,其中需要逆向的参数就是sensor_data

2. 风控分析

基本上更新也是频繁的!几天内小更新、一个月内会有大更新。一些网站还会有指纹校验,对IP地址的质量纯净度要求也是很高


JS加密的重点则是对一些行为事件、每一次的点击提交都会触发它的CK认证,且手机了大量的设备跟行为信息。所以说一般做Akamai服务的都是需要收集大量的真实指纹。所以,想要持续的破盾就需要持续的对抗


另外一个就是高并发跟TLS!并发一上去基本很容易就会挂掉。所以很多第三方的服务有些都是用的真实设备、指纹、环境,包括获取sensor_data的时候都是通过的浏览器去搞

在这里插入图片描述

3. 破盾实战

这里我们用Vueling境外的一个航空网站来进行实验,这个网站的Akamai防护算是比较高级别的,如下所示:

在这里插入图片描述
需要达到的目的就是将Cookie中的_abck参数由-1变为有效的0,而每个网站都不相同,有的防护等级高的网站则需要请求多次在触发某些事件以后才会给出有效的Cookie

在这里插入图片描述

分析的过程中注意比对环境,大数组!保持一致基本是没有问题的!环境监测点比较多,像UA、Window的属性、自动化…

首先我们需要请求拿到第一次的Cookie中的_abck、bm_sz参数,然后调用生成sensor_data参数的算法,如下所示:

session = requests.session()
session.impersonate = "chrome120"
session.verify = False
proxies = {"http": "http://127.0.0.1:7890","https": "http://127.0.0.1:7890",
}
session.proxies = proxies
session.headers = {"Accept": "application/json, text/plain, */*","Accept-Language": "zh-CN,zh;q=0.9","Cache-Control": "no-cache","Connection": "keep-alive","Content-Type": "application/json","Origin": "https://m.vueling.com","Pragma": "no-cache","Referer": "https://m.vueling.com/","Sec-Fetch-Dest": "empty","Sec-Fetch-Mode": "cors","Sec-Fetch-Site": "same-site","User-Agent": ""
}
url = "https://m.vueling.com"
response = session.get(url)
abck = session.cookies.get("_abck")
bm_sz = session.cookies.get("bm_sz")
sensor_data = get_sensor_data(abck, bm_sz)response = session.post('https://tickets.vueling.com/ZeAjNN/o8pqU5/ke/mPLR/J6Xa4pZdI/uuEfbhrNYuJr/QRgwWis/A0x/RahwzGXw',data=json.dumps({'data': sensor_data}),
)logger.info(response.text)def get_sensor_data(abck, bmsz):with open("akm_vueling.js", encoding='utf-8') as f:ctx = execjs.compile(f.read())res = ctx.call("gen_sensor_data", abck, bmsz) return resurl = "https://apimobile.vueling.com/Vueling.Mobile.AvailabilityService.WebAPI/api/V2/AvailabilityController/DoAirPriceSB"payload = json.dumps({"DeviceType": "WEB","UserAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1","Udid": "9aa0-18c9-e0ca-d6b0-2704-75dd","AppVersion": "17.33.0","Domain": "https://m.vueling.com","DiscountType": 0,"Paxs": [{"PaxType": "ADT","Quantity": "1"},{"PaxType": "CHD","Quantity": "0"},{"PaxType": "INF","Quantity": "0"}],"CurrencyCode": "EUR","AirportDateTimeList": [{"ArrivalStation": "ALG","DepartureStation": "LCG","MarketDateDeparture": "2024-08-15"}],"Language": "en-GB"
})
cookies = ""
for k, v in session.cookies.items():cookies += f"{k}={v}; "logger.info(f'cookies: {cookies}')headers = {'User-Agent': "Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1",'Accept': "application/json, text/plain, */*",'Accept-Encoding': "gzip, deflate, br, zstd",'Content-Type': "application/json",'Pragma': "no-cache",'Cache-Control': "no-cache",'Origin': "https://m.vueling.com",'Sec-Fetch-Site': "same-site",'Sec-Fetch-Mode': "cors",'Sec-Fetch-Dest': "empty",'Referer': "https://m.vueling.com/",'Accept-Language': "zh-CN,zh;q=0.9",'Cookie': cookies
}response = requests.post(url, data=payload, headers=headers, proxies=proxies, verify=False)logger.info(f'请求状态: {response.status_code}')logger.info(f'请求结果: {response.text}')

接下来,我们来测试一下破盾效果,首先拿到JS算法生成的sensor_data参数,如下所示:

在这里插入图片描述

携带sensor_data参数请求后得到最新Cookie,然后请求查询接口,如下所示:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/402368.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机毕业设计 美妆神域网站 美妆商城系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…

springboot生成、响应图片验证码

我们平时经常会碰见图片验证码,那么在springboot中我们该怎么实现呢 我们可以使用一款开源的验证码生成工具EasyCaptcha,其支持多种类型的验证码,例如gif、中文、算术等,并且简单易用,具体内容可参考其官方文档。 效果…

【三维重建】SpotlessSplats:去除瞬态干扰物的三维高斯喷溅(3DGS)

代码:https://spotlesssplats.github.io 论文:https://arxiv.org/pdf/2406.20055 来源:DeepMind,多伦多大学,斯坦福大学,西蒙弗雷泽大学 提示:关注B站【方矩实验室】,查看视频讲解…

11.怎么做好一个动态标签页

效果 步骤 1.在Elementui找一个标签页组件 复制粘贴到代码 2.将他写活 将很多页面需要用的方法和变量写入store editableTabsValue: 2,editableTabs: [{title: 首页,name: index,},],addTab(state, tab) {if (state.editableTabs.findIndex(item > item.title tab.titl…

LVGL系列2--linux + lvglv8 + vscode 移植

LVGL系列 一、LVGL移植 LVGL系列1–AT32移植LVGL_V8具体步骤 LVGL系列2–linux lvglv8 vscode 移植 二、输入设备 LVGL系列3–纯物理(外部)按键,数字键盘控制控件 文章目录 LVGL系列一、LVGL移植二、输入设备 一、新建文件夹并克隆源码官方仓库 7.11.0官方仓库…

【AI/算法类】OPPO 2025届秋招笔试题(B卷)

目录 1. 第一题2. 第二题3. 第三题 ⏰ 时间:2024/08/10 🔄 输入输出:ACM格式 ⏳ 时长:2h 本试卷还有选择题部分,但这部分比较简单就不再展示。 1. 第一题 小O有一个正整数 x x x,他想知道,第…

抽卡机小程序,开启全新拆卡乐趣

近段时间,盲盒卡牌市场异常火爆,最近爆火的“小马宝莉”系列卡牌就深受消费者的喜爱,受到了广泛关注,同时也推动了卡牌市场的快速发展!盲盒卡牌拥有隐藏款卡牌和限量款卡牌,具有非常大的收藏价值&#xff0…

使用Java调用Apache commons-text求解字符串相似性实战

目录 前言 一、字符串距离的几种计算方法 1、Levenshtein 距离 2、Overlap Coefficient计算 3、Q-gram Matching 4、余弦相似性计算 二、基于余弦相似性的基地名称对比 1、加载百科中的基地信息列表 2、设置忽略词列表 3、将数据库地名和Excel进行对比 三、总结 前言…

从力扣中等+困难题+表白HTML测试 -- 文心快码(Baidu Comate)

0 写在前面 官网地址:Baidu Comate Step1 打开文心快码(Baidu Comate)官网,点击「免费使用」/「下载安装」 Step2 可以根据官网步骤快速唤起VS Code; 也可以直接在VS Code、Visual Studio扩展管理搜索“文心快码”/…

如何用OceanBase实现HBase架构升级

随着数据量的爆炸性增长,特别是半结构化和非结构化数据的涌现,传统关系型数据库如 MySQL 遭遇了前所未有的挑战。这一背景下,为非结构化数据管理而生的 NoSQL 数据库,以及旨在解决海量数据存储难题的分布式技术应运而生&#xff0…

导出word格式的Javadoc(可用于快速生成项目详细设计文档)

导出word格式的Javadoc ​ 最近要编写项目详细设计文档,作为程序员当然想看看有没有能够自动生成的办法,生成详细设计文档,然后再在生成的基础上略做修改就好了(偷懒大法~),还真有,特此分享&am…

理解Pytorch中的collate_fn函数

PyTorch中的DataLoader是最常用的类之一,这个类有很多参数(14 个),但大多数情况下,你可能只会使用其中的三个:dataset、shuffle 和 batch_size。其中collate_fn是比较少用的函数,这对初学者来说…

Linux线程间通信学习记录(线程同步)

0.线程间通信的方法 (1).全局变量(要结合同步机制) (2).信号量 (3).P操作 (4).V操作 一.线程同步 同步:指的是多个任务按照约定的先后次序相互…

Visual C++ 2010 学习版

这个版本很好用。 在这里放一个链接,做个备份。 这个版本是承前启后的版本,非常的重要。 一、使用VC2010 这个版本创建的解决方案可以在VS2010~VS2022版本中打开,反之也行。 二、使用VC2010 可以编绎VC6.0 ~VC2008的项目。可以使用现成的…

灵办AI助手Chrome插件全面评测:PC Web端的智能办公利器

探索灵办AI助手在Mac OS上的高效表现,支持多款主流浏览器,助你轻松应对办公挑战 文章目录 探索灵办AI助手在Mac OS上的高效表现,支持多款主流浏览器,助你轻松应对办公挑战摘要引言开发环境介绍核心功能评测1. 网页翻译与双语对照 …

Rancher 使用 Minio 备份 Longhorn 数据卷

0. 概述 Longhorn 支持备份到 NFS 或者 S3, 而 MinIO 就是符合 S3 的对象存储服务。通过 docker 部署 minio 服务,然后在 Longhorn UI 中配置备份服务即可。 1. MinIO 部署 1.1 创建备份目录 mkdir -p /home/longhorn-backup/minio/data mkdir -p /home/longhor…

RCE的另外一些绕过练习

目录 被过滤了flag怎么办 方法 结果 过滤了flag、php、system 方法一 结果 ​编辑 方法二 过滤了很多但是主要的就是过滤了空格 和 注意一下这个就行 方法一 方法二 相对于上面一道题来说多过滤了一个括号 方法一 被过滤了flag怎么办 <?php error_reportin…

Python3网络爬虫开发实战(10)模拟登录(需补充账号池的构建)

文章目录 一、基于 Cookie 的模拟登录二、基于 JWT 模拟登入三、账号池四、基于 Cookie 模拟登录爬取实战五、基于JWT 的模拟登录爬取实战六、构建账号池 很多情况下&#xff0c;网站的一些数据需要登录才能查看&#xff0c;如果需要爬取这部分的数据&#xff0c;就需要实现模拟…

K8S - ConfigMap的简介和使用

什么是configMap Kubernetes中的ConfigMap 是用于存储非敏感数据的API对象&#xff0c;用于将配置数据与应用程序的镜像分离。ConfigMap可以包含键值对、文件或者环境变量等配置信息&#xff0c;应用程序可以通过挂载ConfigMap来访问其中的数据&#xff0c;从而实现应用配置的…

ubuntu20 lightdm无法自动登录进入桌面

现象&#xff1a;在rk3568的板子上自己做了一个Ubuntu 20.04的桌面系统。配置lightdm自动登录桌面&#xff0c;配置方法如下&#xff1a; $ vim /etc/lightdm/lightdm.conf [Seat:*] user-sessionxubuntu autologin-userusername #修改成自动登录的用户名 greeter-show-m…