某航空网站promise异步定位js逆向解析

news2025/2/4 22:44:37

本次目标地址如下,使用base64解码获得
aHR0cHM6Ly9pbnQtZXQueGlhbWVuYWlyLmNvbS9mbGlnaHRzL3Jlc3VsdHM=

打开网址,抓包分析后,发现响应结果在该请求中:
在这里插入图片描述
我们跟栈进去查找,从右边的堆栈调用过程中发现,这是典型的axios请求
在这里插入图片描述
针对这种请求,一般加密都是在请求拦截器中,通常定位到加密的有两种方式,找到响应拦截器,因为响应拦截器一般和请求拦截器在一块地方,第二种就是找到请求拦截器,这里就简单讲第一种方式
在这里插入图片描述
如上图,找到处理响应结果的地方,通过跳出当前函数这一功能,点击两次后,就找响应拦截器的位置了
并且上方这块就是请求拦截器了,也能找到加密的位置,加密的参数来自于A函数
在这里插入图片描述
跳转到A函数之后, 发现就是用一些随机字符串和时间戳,以及一些固定加密参数去使用标准加密算法进行加密,因为加密代码没有任何混淆,所以,破解也很容易
在这里插入图片描述
这里可以直接把A函数扣下来,把一些环境补齐,如下

const crypto = require('crypto-js')

window = global;


navigator = {
	appCodeName: 'Mozilla',
}

b = {
	timeDiff: -693,
	reptile: '{"configProperties":[{"key":"external.booking.refund.calc.cancel.failed.support","value":"true"},{"key":"external.booking.refund.supported.banks","value":"01-102584000002-102-\\\\u4e2d\\\\u56fd\\\\u5de5\\\\u5546\\\\u94f6\\\\u884c,02-103584099993-103-\\\\u4e2d\\\\u56fd\\\\u519c\\\\u4e1a\\\\u94f6\\\\u884c,03-104584000003-104-\\\\u4e2d\\\\u56fd\\\\u94f6\\\\u884c,04-105584000005-105-\\\\u4e2d\\\\u56fd\\\\u5efa\\\\u8bbe\\\\u94f6\\\\u884c,05-301584000016-301-\\\\u4ea4\\\\u901a\\\\u94f6\\\\u884c,06-302584043105-302-\\\\u4e2d\\\\u4fe1\\\\u94f6\\\\u884c,07-303584000004-303-\\\\u5149\\\\u5927\\\\u94f6\\\\u884c,08-304584040898-304-\\\\u534e\\\\u590f\\\\u94f6\\\\u884c,09-305584000002-305-\\\\u6c11\\\\u751f\\\\u94f6\\\\u884c,010-306584001261-306-\\\\u5e7f\\\\u53d1\\\\u94f6\\\\u884c,011-307584007998-307-\\\\u5e73\\\\u5b89\\\\u94f6\\\\u884c,012-308584001016-308-\\\\u62db\\\\u5546\\\\u94f6\\\\u884c,013-309584000000-309-\\\\u5174\\\\u4e1a\\\\u94f6\\\\u884c,014-310584000006-310-\\\\u4e0a\\\\u6d77\\\\u6d66\\\\u4e1c\\\\u53d1\\\\u5c55\\\\u94f6\\\\u884c,015-403584099005-403-\\\\u90ae\\\\u653f\\\\u50a8\\\\u84c4\\\\u94f6\\\\u884c,016-313100000013-313100000013-\\\\u5317\\\\u4eac\\\\u94f6\\\\u884c,017-325290000012-325290000012-\\\\u4e0a\\\\u6d77\\\\u94f6\\\\u884c,018-313110000017-313110000017-\\\\u5929\\\\u6d25\\\\u94f6\\\\u884c"},{"key":"password.encode.channel","value":"IBE,CTRIP"},{"key":"external.booking.refund.child.support","value":"false"},{"key":"mfa.sms.disable.verification","value":"false"},{"key":"antispider.sharedPublicCipherKey","value":"ojts"},{"key":"external.booking.bank.account.binding.enabled","value":"true"},{"key":"antispider.enable","value":"false"},{"key":"display.checkin.phase","value":"all"},{"key":"prepareCancelTimeLimit","value":"25"},{"key":"externalFlightBooking.ticketsRetrieval.enabled","value":"true"},{"key":"loginRememberMe.enabled","value":"true"},{"key":"antispider.cipherAndPattern","value":"{\\"0\\":{\\"cipher\\":\\"CipherKey1\\",\\"pattern\\":\\"^[0-9]{32}$\\"},\\"1\\":{\\"cipher\\":\\"CipherKey2\\",\\"pattern\\":\\"^[a-z]{32}$\\"},\\"2\\":{\\"cipher\\":\\"CipherKey3\\",\\"pattern\\":\\"^[A-Z]{32}$\\"},\\"3\\":{\\"cipher\\":\\"CipherKey4\\",\\"pattern\\":\\"^[0-9]{32}$\\"},\\"4\\":{\\"cipher\\":\\"CipherKey5\\",\\"pattern\\":\\"^[a-z]{32}$\\"},\\"5\\":{\\"cipher\\":\\"CipherKey6\\",\\"pattern\\":\\"^[A-Z]{32}$\\"}}"},{"key":"threshold.historyOrderDays","value":"395"},{"key":"antispider.endpointlist","value":"{\\"endpoints\\":[{ \\"methods\\": [\\"POST\\"], \\"url\\": \\"/bookings/*/flight/ancillaries/resultSets\\" },{ \\"methods\\": [\\"GET\\"], \\"url\\": \\"/bookings/*/flight/ancillaries/resultSets/*\\" },{ \\"methods\\": [\\"POST\\"], \\"url\\": \\"/bookings/*/flight/baggage/resultSets\\" },\\n { \\"methods\\": [\\"GET\\"], \\"url\\": \\"/bookings/*/flight/baggage/resultSets/*\\" },{ \\"methods\\": [\\"POST\\"], \\"url\\": \\"/bookings/*/products/*/crossSell\\" },\\n { \\"methods\\": [\\"GET\\"], \\"url\\": \\"/bookings/*/products/*/flight/crossSell/availability\\" },{ \\"methods\\": [\\"POST\\"], \\"url\\": \\"/bookings/*/products/*/switchSell/package\\" },{ \\"methods\\": [\\"POST\\"], \\"url\\": \\"/flight/calendar\\" },\\n { \\"methods\\": [\\"POST\\"], \\"url\\": \\"/flight/resultSets\\" },{ \\"methods\\": [\\"GET\\"], \\"url\\": \\"/flight/resultSets/*\\" },{ \\"methods\\": [\\"GET\\"], \\"url\\": \\"/flightCache/calendarSearch\\" },{ \\"methods\\": [\\"GET\\"], \\"url\\": \\"/flightCache/lowPriceSearch\\" },\\n { \\"methods\\": [\\"GET\\"], \\"url\\": \\"/flightCache/lowPriceSearch/hotRoute\\" },{ \\"methods\\": [\\"GET\\"], \\"url\\": \\"/bookings/*/flight/seatMaps\\" },{ \\"methods\\": [\\"POST\\"], \\"url\\": \\"/order/extract/orderResult\\" },\\n { \\"methods\\": [\\"POST\\"], \\"url\\": \\"/flightFareShopping/all/resultSets\\" },{ \\"methods\\": [\\"GET\\"], \\"url\\": \\"/flightFareShopping/all/resultSets/*\\" }]}"},{"key":"change.voluntary.limit.days","value":"365"},{"key":"ancillary.address.invalid.pattern","value":"[!!*_%&$-]"},{"key":"ancillary.others.invalid.pattern","value":"[!@!*_%&$-]"},{"key":"bundle.comboProduct.enabled","value":"true"},{"key":"bundle.insuranceContinueToBuy.enabled","value":"true"},{"key":"invite.upgrade.prepare.authorization.bankId","value":"YEEPAYAUTH"},{"key":"invite.upgrade.enabled","value":"true"},{"key":"error.refund.enabled","value":"true"},{"key":"limit.locale","value":"US"},{"key":"change.involuntary.limit.days","value":"5"},{"key":"errorRefundTimeLimit","value":"20"},{"key":"mfa.captcha.disable.verification","value":"false"},{"key":"external.booking.refund.open.support","value":"false"},{"key":"serverTimestamp","value":"1706757153827"}]}',
	get: function (res){
		//console.log(res, this[res]);
		return this[res];
	}

}

v = {
	a: crypto
}
//console.log(v.a);

function A() {
            var e = {}
              , t = +b.get("timeDiff") || 0
              , a = (new Date).getTime() + t
              , n = "".concat(window.navigator.appCodeName, "_").concat(function() {
                for (var e = [], t = 0; t < 32; t++)
                    e[t] = "0123456789abcdef".substr(Math.floor(16 * Math.random()), 1);
                return e.join("")
            }());
            e["Device-Id"] = n;
            var r = function(e) {
                for (var t = JSON.parse(b.get("reptile")), a = arguments.length, n = new Array(a > 1 ? a - 1 : 0), r = 1; r < a; r++)
                    n[r - 1] = arguments[r];
                var i = n[0]
                  , l = n[1]
                  , o = JSON.parse(t.configProperties.filter((function(e) {
                    return "antispider.cipherAndPattern" === e.key
                }
                ))[0].value)[e].cipher
                  , s = t.configProperties.filter((function(e) {
                    return "antispider.sharedPublicCipherKey" === e.key
                }
                ))[0].value
                  , u = {}
                  , c = ["12345678901234567890123456789012", "qwefqwefqwefqwefqwefqwefqwefqwef", "QWDSQWDSQWDSQWDSQWDSQWDSQWDSQWDS", "12345678901234567890123456789012", "qwefqwefqwefqwefqwefqwefqwefqwef", "QWDSQWDSQWDSQWDSQWDSQWDSQWDSQWDS"]
                  , d = "".concat(i, "_").concat(c[e])
                  , p = v.a.MD5("".concat(s).concat(o)).toString().substring(8, 24)
                  , m = v.a.enc.Utf8.parse(v.a.MD5("".concat(s).concat(o)).toString().substring(8, 24));
                u["Crypto-Chars"] = e <= 2 ? v.a.AES.encrypt("".concat(d, "_").concat(l), m, {
                    mode: v.a.mode.ECB,
                    padding: v.a.pad.Pkcs7
                }).toString() : v.a.MD5("".concat(d, "_").concat(l, "_").concat(p)).toString();
                var f = v.a.enc.Utf8.parse(v.a.MD5(s).toString().substring(8, 24));
                return u["Crypto-Random"] = v.a.AES.encrypt("".concat(d), f, {
                    mode: v.a.mode.ECB,
                    padding: v.a.pad.Pkcs7
                }).ciphertext.toString(v.a.enc.Base64),
                u
            }(Math.abs(a % 6), a, n);
			//console.log(r);
            return e["Crypto-Chars"] = r["Crypto-Chars"],
            e["Crypto-Random"] = r["Crypto-Random"],
            e
        };
		
		
console.log(A());

也能成功运行A函数
在这里插入图片描述
加密其实也很简单,加密完成后,直接组装成python请求代码,成功拿到响应结果
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

App ICP备案获取iOS和Android的公钥和证书指纹

依照《工业和信息化部关于开展移动互联网应用程序备案工作的通知》&#xff0c;向iOS和安卓平台提交App时需要先提交ICP备案信息。 iOS平台&#xff1a; 1、下载appuploader工具&#xff1a;Appuploader home -- A tool improve ios develop efficiency such as submit ipa to…

Docker 集群配置

1、配置 MySQL MySQL 简单安装 docker安装完MySQL并run出容器后&#xff0c;建议请先修改完字符集编码后再新建mysql库-表-插数据 docker run -d -p 2222:3306 --privilegedtrue -e MYSQL_ROOT_PASSWORD123456 \ -v /opt/mysql/log:/var/log/mysql \ -v /opt/mysql/data:/va…

通过18次止损,我终于领悟到交易的真谛

截断亏损让利润奔跑&#xff0c;这是操作的基础&#xff0c;也是操作的大体思路。了解并接受这个市场认识&#xff0c;基本上就把握住了市场的门道。至于市场走势&#xff0c;是无法准确预测的。 在交易的第一年&#xff0c;我处于一种懵懂的状态&#xff0c;对市场知之甚少。第…

2024美赛数学建模A题思路分析 - 资源可用性和性别比例

# 1 赛题 问题A&#xff1a;资源可用性和性别比例 虽然一些动物物种存在于通常的雄性或雌性性别之外&#xff0c;但大多数物种实质上是雄性或雌性。虽然许多物种在出生时的性别比例为1&#xff1a;1&#xff0c;但其他物种的性别比例并不均匀。这被称为适应性性别比例的变化。…

【以太网】VSC8512XJG-03、VSC8512XJG-02、VSC8514XMK-14、VSC8514XMK-11千兆以太网(GE)PHY

一、VSC8512 12 Port GbE Cu PHY with 4 Dual Media ports[12端口GBE Cu PHY&#xff0c;带4个双介质端口] 概述 VSC8512采用单一封装的12端口千兆以太网&#xff08;GE&#xff09;铜线PHY解决方案。VSC8512采用了Microchip最新的65纳米Simpliphy™技术&#xff0c;是业界最具…

猫什么时候发腮?猫咪发腮指南!这些生骨肉冻干发腮效果好

猫什么时候发腮是许多猫主人非常关心的问题。在猫咪的成长过程中&#xff0c;发腮是一项重要的体征&#xff0c;也是猫咪成熟的标志。主人需要在适龄的年龄段加强营养补给&#xff0c;可以让让猫咪拥有可爱的肉嘟嘟脸型&#xff0c;不要错失最佳发腮期。那么&#xff0c;什么时…

第八篇:node模版引擎Handlebars及他的高级用法(动态参数)

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! ​ 目录 &#x1f4d8; 引言&#xff1a; &#x1f…

OpenCV学习记录——边缘检测

文章目录 前言一、边缘检测原理二、Canny边缘检测算法三、具体应用代码 前言 在做某些图像处理时&#xff0c;通常需要将识别到的物体边界提取出来&#xff0c;从而帮助我们实现目标检测&#xff0c;这就需要用到边缘检测&#xff0c;例如人脸识别和运动目标的检测都需要先进行…

Flutter 应用服务:主题、暗黑、国际化、本地化 - app_service库

Flutter应用服务 主题、暗黑、国际化、本地化 app_service库 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/article/det…

Nginx 多项目部署,vue刷新404 解决方案

网上找的资料大多都解决不了&#xff0c;废话不多说直接告诉你解决方法。 环境是 TP6 VUE前端官网 VUE 后台管理 部署 两个项目 刷新 404 解决方案 Nginx 配置 直接贴图 如果解决了&#xff0c;给我顶起来&#xff0c;让更多人 快速的解决。

Arduino 推出基于乐鑫 ESP32-S3 的 STEM 教育机器人

Arduino Alvik 是 Arduino Education 推出的一款新型机器人&#xff0c;可作为一种跨学科工具&#xff0c;为当前教育和未来机器人世界筑起连接的桥梁。Hackster 的 Gareth Halfacree 表示&#xff1a;“Alvik 的设计灵感来自 Arduino 简化复杂技术的理念&#xff0c;同时它也 …

上海市事业编报名照不能成功上传的原因

2024年上海市事业编报名照需要根据以下要求生成&#xff1a; 1、近期6个月&#xff0c;免冠证件照。 2、照片背景白底或者蓝底或者红底背景。 3、照片文件jpg格式&#xff0c;大小在100KB以下 4、照片像素大小&#xff0c;宽度75至150像素内&#xff0c;高度为105至210像素内 5…

gRPC - Google远程过程调用(Google Remote Procedure Call,gRPC)

什么是gRPC&#xff1f; Google远程过程调用&#xff08;Google Remote Procedure Call&#xff0c;gRPC&#xff09;是基于HTTP 2.0传输层协议承载的高性能开源RPC软件框架&#xff0c;为管理和配置网络设备提供了一种API接口设计的方法。gRPC提供了多种编程语言&#xff0c;如…

Linux之系统安全与应用续章

目录 一. PAM认证 1.2 初识PAM 1.2.1 PAM及其作用 1.2.2 PAM认证原理 1.2.3 PAM认证的构成 1.2.4 PAM 认证类型 1.2.5 PAM 控制类型 二. limit 三. GRUB加密 /etc/grub.d目录 四. 暴力破解密码 五. 网络扫描--NMAP 六. 总结 一. PAM认证 1.2 初识PAM PAM是Linux系…

软件工程知识梳理4-详细设计

详细设计阶段的根本目标是确定应该怎样具体地实现所要求的系统&#xff0c;也就是说.经过这个阶段的设计工作.应该得出对目标系统的精确描述.从而在编码阶段可以把这个描述直接翻译成用某种程序设计语言书写的程序。 详细设计的的目标不仅仅是逻辑上正确地实现每个模块地功能&a…

查询、导入导出、统计性能优化的一些总结

目录 1、背景 2、优化实现 2.1查询数据表速度慢 2.2调别人接口速度慢 2.3导入速度慢、 2.4导出速度慢的做出介绍 2.5统计功能速度慢 3、总结 1、背景 系统上线后&#xff0c;被用户反应系统很多功能响应时长很慢。用户页面影响速度有要求&#xff0c;下面针对查询数据表…

红队打靶练习:INFOSEC PREP: OSCP

目录 信息收集 1、arp 2、nmap WEB 信息收集 wpscan dirsearch ssh登录 提权 信息收集 1、arp ┌──(root㉿ru)-[~/kali] └─# arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:0c:29:69:c7:bf, IPv4: 192.168.110.128 Starting arp-scan 1.10.0 with 256 ho…

“与客户,共昂首”——Anzo Capital昂首资本尽释行业进取之姿

“以匠心&#xff0c;铸不凡” 活动的现场&#xff0c;Anzo Capital 作为演讲嘉宾分享“以匠心&#xff0c;铸不凡”的产品理念。Anzo Capital积淀九载&#xff0c;匠心打造出“STP”和“ECN”两大核心账户&#xff0c;以光之速度将交易中的订单直达市场和流动性提供商&#…

江科大stm32学习笔记10——对射式红外传感器

一、接线 上电之后可以看到对射式红外传感器亮两个灯&#xff0c;如果此时用挡光片挡住两个黑色方块中间的部分&#xff0c;则只亮一个灯。 二、代码 将4-1的工程文件夹复制粘贴一份&#xff0c;重命名为“5-1 对射式红外传感器计次”&#xff0c;打开keil&#xff0c;右键添…

基于muduo网络库开发服务器程序和CMake构建项目 笔记

跟着施磊老师做C项目&#xff0c;施磊老师_腾讯课堂 (qq.com) 一、基于muduo网络库开发服务器程序 组合TcpServer对象创建EventLoop事件循环对象的指针明确TcpServer构造函数需要什么参数,输出ChatServer的构造函数在当前服务器类的构造函数当中,注册处理连接的回调函数和处理…