飞常准小程序接口逆向分析:如何破解航班查询的签名机制

飞常准API逆向分析:如何破解航班查询接口的签名机制 本文深度解析飞常准API的安全机制,重点探讨其签名防篡改层的实现原理,包括参数排序和双重MD5哈希技术。通过Python示例代码展示如何合法生成API签名,帮助开发者在合规前提下进行二次开发,同时了解现代Web API安全防护的最新趋势。 阅读详情

飞常准小程序接口安全机制深度解析:从签名算法到模拟请求的实战指南

最近在研究一些主流出行类应用的接口设计,发现它们的签名机制往往比想象中要复杂得多。今天我想以飞常准小程序为例,和大家聊聊如何理解并模拟这类接口的调用过程。这不仅仅是技术上的逆向分析,更是对现代Web应用安全机制的一次深入探索。如果你是一名对接口安全、数据抓取或自动化脚本开发感兴趣的开发者,这篇文章或许能给你带来一些新的思路。

在实际开发中,我们经常会遇到需要与第三方API交互的场景。有些API设计得相对开放,而有些则采用了严格的签名验证机制来防止未授权访问。飞常准的航班查询接口就属于后者——它通过一套基于MD5和参数排序的签名算法来确保请求的合法性。理解这套机制,不仅能帮助我们更好地进行数据采集(当然是在合法合规的前提下),还能让我们在设计自己的API时借鉴其安全思路。

1. 接口签名机制的核心原理

要理解飞常准的签名机制,我们首先需要明白什么是接口签名,以及为什么现代应用都需要它。

接口签名本质上是一种身份验证和数据完整性校验的手段。当客户端向服务器发送请求时,它会根据请求参数、时间戳、密钥等信息生成一个唯一的“签名”。服务器收到请求后,会用同样的算法重新计算签名,如果两个签名一致,就认为请求是合法的、未被篡改的。

为什么需要签名机制?

  • 防止重放攻击:如果没有时间戳等动态参数,攻击者可以简单地重复发送之前的合法请求。
  • 确保数据完整性:签名基于所有请求参数生成,任何参数的修改都会导致签名不匹配。
  • 身份验证:虽然签名本身不直接包含密码,但它证明了请求方拥有生成正确签名的能力(通常意味着知道密钥)。

飞常准采用的是一种典型的“参数排序+双重MD5”的签名方案。这种方案在电商、出行、社交等多个领域的API中都很常见,因为它实现相对简单,同时又能提供基本的安全保障。

1.1 MD5算法在签名中的应用

MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,它能将任意长度的数据“压缩”成一个128位(16字节)的哈希值,通常表示为32个十六进制字符。

在签名场景中,MD5有几个关键特性被利用:

  1. 单向性:从哈希值几乎不可能反推出原始数据。
  2. 雪崩效应:原始数据的微小变化会导致哈希值的巨大差异。
  3. 抗碰撞性:很难找到两个不同的输入产生相同的哈希值。

飞常准的签名算法对MD5的使用有一个值得注意的细节:双重哈希。代码中显示签名是通过md5(md5(t).toUpperCase() + e).toUpperCase()生成的。这意味着:

// 伪代码展示双重MD5过程
function generateSignature(parameters, salt) {
    // 第一步:对参数字符串进行第一次MD5并转为大写
    let firstHash = md5(parameters).toUpperCase();
    
    // 第二步:将第一次的哈希值与盐值拼接,再进行第二次MD5并转为大写
    let finalSignature = md5(firstHash + salt).toUpperCase();
    
    return finalSignature;
}

这种双重哈希的做法增加了暴力破解的难度,即使攻击者知道了算法,也需要更多计算资源来尝试伪造签名。

注意:虽然MD5在密码存储等领域已被认为不安全(存在碰撞攻击风险),但在API签名这种场景中,结合时间戳、密钥等其他因素,它仍然能提供有效的短期安全防护。

1.2 参数排序的重要性

在生成签名之前,飞常准会对所有请求参数进行排序。这个步骤至关重要,因为它确保了无论参数以什么顺序发送,服务器和客户端计算的签名都是一致的。

让我们看一个具体的例子。假设我们有三个参数:

let params = {
    "dep": "PEK",
    "arr": "SHA", 
    "date": "2023-10-01",
    "fnum": "CA1501",
    "timestamp": "1696147200000"
};

如果不排序,直接拼接成字符串,可能会得到不同的结果:

// 可能的拼接方式1
"dep=PEK&arr=SHA&date=2023-10-01&fnum=CA1501&timestamp=1696147200000"

// 可能的拼接方式2  
"timestamp=1696147200000&fnum=CA1501&date=2023-10-01&arr=SHA&dep=PEK"

这两种拼接方式会产生完全不同的MD5哈希值。通过强制排序,我们确保参数总是以一致的顺序出现:

// 排序后的键:arr, date, dep, fnum, timestamp
"arr=SHA&date=2023-10-01&dep=PEK&fnum=CA1501&timestamp=1696147200000"

飞常准使用的排序函数是JavaScript标准的Array.sort()方法,它会按照字母顺序对参数名进行排序。这种设计虽然简单,但非常有效。

2. 逆向分析实战:从代码到算法

现在让我们进入实战环节,看看如何从飞常准小程序的JavaScript代码中提取出完整的签名算法。

2.1 关键函数解析

从提供的代码片段中,我们可以识别出几个核心函数:

serialize函数:负责将对象转换为查询字符串

function serialize(o, encode = true, separator = "&") {
    let pairs = [];
    
    for (let key in o) {
        let value = o[key] === undefined ? "" : o[key];
        // 根据encode参数决定是否进行URL编码
        let encodedValue = encode ? encodeURIComponent(value) : value;
        pairs.push(key + "=" + encodedValue);
    }
    
    // 关键步骤:对参数对进行排序
    pairs.sort();
    
    // 用指定的分隔符连接所有参数对
    return pairs.join(separator);
}

这个函数有几个值得注意的设计选择:

  1. 可选的URL编码:通过第二个参数控制是否对值进行编码,这增加了灵活性。
  2. 自定义分隔符:虽然默认使用&,但可以指定其他分隔符。
  3. 空值处理:将undefined值转换为空字符串,避免出现"key=undefined"的情况。

callSignature_md5函数:生成签名的核心函数

function callSignature_md5(paramString, salt = "") {
    // 第一次MD5计算,结果转为大写
    let firstHash = md5(paramString).toUpperCase();
    
    
逆向解析飞常准小程序航班查询API:从加密签名到数据采集实战 本文详细解析了飞常准小程序航班查询API的逆向工程实战,重点破解了其核心的加密签名机制。通过抓包分析、JavaScript代码逆向,揭示了基于参数排序和双重MD5算法的签名生成流程,并提供了完整的Python代码实现,帮助开发者理解API安全防护原理与数据采集的合规方法。 阅读详情

相关推荐

飞常准API实战:5分钟用Python搭建个人航班查询工具(避坑指南)

本文详细介绍了如何利用Python构建个人航班数据监控系统,通过分析飞常准等数据源的API请求逻辑与参数签名机制,实现自动化航班状态查询与监控。文章提供了完整的代码实现,包括逆向工程思路、稳健的请求参数体系、错误处理机制以及自动化监控系统的架构设计,帮助开发者快速搭建实用的航班查询工具。

year5的博客 642

qt-everywhere-src-5.14.2.zip

qt-everywhere-src-5.14.2.zip

MATLABSimulink模拟及会议论文,关于具备自动温度控制和能耗分析的智能太阳能热水系统。.zip

1.版本:matlab2014a/2019b/2024b 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

机械三维3D设计图-食品皮带机输送除尘消毒设备.zip

机械三维3D设计图-食品皮带机输送除尘消毒设备.zip

机械三维3D设计图-膜厚测定自动搬送设备.zip

机械三维3D设计图-膜厚测定自动搬送设备.zip

一加ace2传感器分区修复文件persist 一加ace2修复指纹 好机备份persist

资源说明: 一加ace2传感器分区修复文件persist 传感器失效表现在指纹 指南针 相机 陀螺仪等bug或者完全使用不了等等 一般是更新或者刷机后导致的 资源即可解决这种问题 方法为解锁后fast刷入persist分区 或者twrp里写入镜像方式恢复。等等其他方式恢复。需要自行恢复。 需要的友友下载使用 此分区是好机提取备份的 与线刷包里面的分区是两码事 参考教程 https://blog.csdn.net/u011283906/article/details/125516321?spm=1001.2014.3001.5501

机械三维3D设计图-小型轮式扒渣机模型.zip

机械三维3D设计图-小型轮式扒渣机模型.zip

机械三维3D设计图-储能模组机器人模组夹爪.zip

机械三维3D设计图-储能模组机器人模组夹爪.zip

【数据库优化】SQLite数据库优化技巧2

内容概要:本文重点介绍了SQLite数据库在实际应用中的优化技巧,强调性能提升需从运行时配置、查询写法、索引设计、写入模式和并发控制等多个方面协同优化。核心内容聚焦于批量写入和并发管理:通过使用显式事务将大量INSERT操作包裹,可显著减少磁盘同步开销,提升写入吞吐量数十倍,推荐每批处理100~1000条记录;在并发方面,SQLite基于“单写多读”模型,WAL模式支持读写并行但写入仍为串行,因此应避免锁竞争而非追求高并发写入。具体建议包括每个线程使用独立连接、缩短写事务长度、设置busy_timeout以优雅应对锁冲突,以及合理控制连接池规模,尤其在写密集场景下保持少量连接更为高效。; 适合人群:具备一定数据库使用经验,从事移动开发、嵌入式系统或后端开发1-3年的研发人员;特别是使用SQLite进行本地存储或轻量级服务的开发者; 使用场景及目标:①提升SQLite大批量数据插入效率;②优化多线程环境下的读写性能与锁处理;③设计高可靠、高性能的本地数据库访问策略; 阅读建议:本文实践性强,建议结合代码实操验证事务批量提交与WAL模式下的性能差异,并通过模拟并发读写场景测试连接管理和超时设置的效果,深入理解SQLite的并发机制与性能边界。

高校技术转移办公室人员如何提升技术成果对接的精准度?.docx

高校技术转移办公室人员如何提升技术成果对接的精准度?

基于SpringBoot的智能家居控制管理系统(代码+数据库+LW)

摘 要 基于Spring Boot的智能家居控制管理系统,以轻量级的架构、多角色之间的协同和高适配性为设计理念,针对现有智能家居系统存在的生态封闭、使用角色的权限划分模糊、实时数据同步不足等痛点,使用Spring Boot框架,整合Vue与MySQL技术栈,设计并实现了一套支持多种角色协同使用的智能家居控制系统。系统明确划分用户、工作人员和管理员三种角色,涵盖环境监测、设备运维、报警处理、系统配置及社区互动等全场景功能。在架构层面,采用分层设计以降低模块耦合,引入MD5加密技术保证系统数据的安全,并接入第三方AI客服增强人机交互体验。通过系统化的功能测试、性能测试与并发场景验证,系统运行稳定,响应时延低,多用户访问下表现优异。该系统不仅形成了一套标准化、智能化的智能家居管理闭环,还为类似项目的开发提供了实用技术参考与实践经验,具备较强的应用推广价值,为智能家居的普及提供了切实可行的解决方案。 关键词:Spring Boot;Vue;智能家居系统;多角色管理;

qt-everywhere-opensource-src-4.8.7.tar.gz

qt-everywhere-opensource-src-4.8.7.tar.gz

完美复现基于自适应虚拟谐波阬的光储VSG并网电流谐波抑制模型(Simulink仿真实现)

内容概要:本文围绕基于自适应虚拟谐波阬的光储VSG并网电流谐波抑制模型展开研究,提出了一种结合虚拟同步发电机(VSG)控制与自适应虚拟谐波阬技术的谐波治理方案,旨在有效应对光伏发电与储能系统并网过程中产生的特定次谐波问题。通过在Simulink中构建完整的系统仿真模型,详细实现了VSG的惯量阻尼控制、功率环调控以及自适应谐波阬的频率识别与阻抗重塑机制,能够动态跟踪并抑制并网电流中的谐波成分,从而提升电能质量和系统并网稳定性。文章深入剖析了控制器结构设计、关键参数整定方法及谐波抑制效果的仿真验证过程,充分验证了该方法在复杂工况下的有效性、鲁棒性与工程应用潜力。; 适合人群:具备电力电子、新能源并网、电力系统分析等相关专业知识背景的科研人员与工程技术人员,尤其适用于熟悉Simulink仿真环境、掌握基本控制理论与信号处理技术的研究生、高校教师及企业研发人员。; 使用场景及目标:①应用于光伏-储能联合系统的并网逆变器控制设计;②用于提升VSG并网系统的电能质量与抗扰动能力;③为高比例新能源接入场景下的谐波分析与主动抑制策略提供仿真验证平台与技术支撑;④辅助开展新型电力系统中电能质量治理相关的教学与科研工作。; 阅读建议:建议读者结合提供的Simulink模型文件进行同步仿真操作,重点理解VSG控制架构与自适应虚拟谐波阬模块的耦合关系,关注谐波检测、频率自适应调整与复矢量控制的实现细节,并可通过改变负载条件或电网阻抗参数进行多工况测试,以深入掌握系统的动态响应特性与控制性能边界。

负荷预测基于LSTM-Attention、蜣螂优化DBO-LSTM-Attention的负荷预测研究(Python代码实现)

内容概要:本文围绕基于LSTM-Attention与蜣螂优化算法(DBO)改进的LSTM-Attention模型在电力负荷预测中的应用展开研究,采用Python代码实现。研究结合长短期记忆网络(LSTM)对时间序列长期依赖关系的建模能力与注意力机制(Attention)对关键时间步特征的加权聚焦能力,构建基础预测模型,并引入新型群智能优化算法——蜣螂优化算法(DBO),用于自动寻优模型超参数,有效提升模型收敛速度与预测精度。文中详述了模型架构设计、优化流程集成及实验验证过程,通过对比实验证明该混合模型在负荷预测任务中相较传统方法具有更强的非线性拟合能力和更高的预测准确性。; 适合人群:具备一定Python编程基础和机器学习背景,从事电力系统分析、能源管理或相关领域研究的科研人员及工程技术人员。; 使用场景及目标:①应用于短期或中期电力负荷预测任务,提高电网调度的科学性与经济性;②为深度学习与智能优化算法在能源领域的融合应用提供实践案例,促进模型性能优化与实际部署。; 阅读建议:建议读者结合提供的Python代码,深入理解LSTM-Attention模型的构建细节与DBO优化流程,建议在实际数据集上复现实验,进一步掌握参数调优技巧与模型评估方法。

科技中介服务机构如何利用智能体技术提升服务效率与用户黏性?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

keithley current control开源原理图

keithley current control开源原理图

【Linux系统管理】基于RHEL的端口访问控制与日志定时备份:8088端口限源及crontab每日自动备份方案

内容概要:本文是一份针对红帽Linux系统的实操作业报告,主要完成两项任务:一是配置web主机的防火墙规则,通过firewall-cmd工具将8088端口仅限ansible主机(IP为192.168.88.130)访问,采用rich rule实现精细控制,并强调删除原有宽松规则的重要性;二是设置ansible主机的定时任务,利用crontab每天凌晨4:00自动备份/var/log/messages日志文件至指定目录,文件名包含完整时间戳。文中详细记录了操作步骤、常见错误(如%未转义、date命令格式错误)及验证方法,帮助读者掌握防火墙策略调整和自动化运维技能。; 适合人群:刚接触RHEL系统、具备基本Linux命令使用能力的新手运维人员或开发人员,尤其适合正在学习系统安全与自动化管理的学习者。; 使用场景及目标:①学习如何使用firewall-cmd配置精细化的防火墙访问规则,理解rich rules的作用与语法;②掌握crontab定时任务的编写技巧,特别是处理特殊字符和命令替换的实际细节;③实现服务器端口安全加固与关键日志文件的周期性备份,提升系统安全性与可维护性。; 阅读建议:此资源以实际操作为主线,建议读者在虚拟环境中同步练习,重点关注命令书写规范(如转义符使用)、目录预创建和任务验证环节,并结合nmap、curl等工具进行效果测试,确保真正掌握相关技能。

Clion编译stm32cube初始化工程时non constant or forward reference address expression for section .ARM.extab报错

相信应该有同学在看了稚晖君关于clion开发stm32的文章之后也想在自己PC上实现“优雅の嵌入式开发”遇到和我类似的问题。他的文章是22年写的,我个人猜测应当是版本更新导致的不适配。意思就是说 READONLY 只能在gcc11以后的版本中使用,gcc10及以前的版本将无法正确识别,也就有如下错误。或者就可以将gcc升级至最新的版本。记得在clion工具链中修改c,cpp编译器的位置。可以将文本括号中的 READONLY 全部删除。当时由于没有注意到这行注释导致在这里卡了好久。

2301_77256849的博客 2494

[技术解析] SGDC驱动的轻量级IoT入侵检测:特征选择与模型优化的实战指南

本文深入解析了如何利用SGDC驱动的轻量级入侵检测系统保护IoT设备安全。通过实战指南,详细阐述了SGDC模型在资源受限环境下的优势,并结合特征选择技术优化模型性能,实现高效、低耗的异常流量检测,为物联网安全部署提供了一套可行的解决方案。

weixin_29192211的博客 344

基于RK3588与Gstreamer的端侧实时视频流AI推理系统构建

本文详细介绍了基于RK3588芯片与Gstreamer框架构建端侧实时视频流AI推理系统的完整方案。通过硬件选型、环境配置、OpenCV编译优化、视频流处理实战及模型部署等关键环节的深入解析,展示了如何利用RK3588的6TOPS NPU算力与Gstreamer的低延迟特性,实现工业质检、智能交通等场景下的高效边缘计算。特别针对RTSP推拉流优化、RKNN模型转换等核心技术难点提供了实用解决方案。

weixin_30516243的博客 377

Arm A-profile架构RAS系统设计:可靠性、可用性与可服务性解析

在计算机体系结构中,可靠性(Reliability)、可用性(Availability)和可服务性(Serviceability)是构建高可信系统的核心要素。RAS系统通过硬件错误检测、隔离和恢复机制,确保系统持续稳定运行。其技术原理包括ECC内存纠错、冗余执行单元和错误传播阻断等关键技术,可显著降低数据中心等关键业务场景的故障率。现代芯片设计中,Arm A-profile架构提供标准化的RAS框架,涵盖从内存子系统到计算单元的全方位错误管理。通过分层防御策略和统一错误记录格式,实现硬件错误可追溯、可修复。

weixin_30920853的博客 350

SAP Fiori Launchpad Tile,UI5 应用,和 PFCG Role 的对应关系

问题:已经看到了SAP Fiori Launchpad上的某个tile,如何反推后台需要配置哪个PFCG Role才能看到该tile? 这个问题是今天一个朋友在微信上问我的。因为我最近忙着学习一个新的SAP产品,所以这个问题也没有时间展开来写,本文就只做概要介绍。 下图是一个Gateway系统上打开的SAP CRM Fiori Launchpad: 如何弄清楚后台用户配置了哪个PFCG Role之后,才能看到Sales Representative(CRM)这个Group下的tile? 既然当前我使用的用

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1518

从权限对象到业务角色:把 SAP Authorization Object 讲清楚,并用 ABAP 写对一次 AUTHORITY-CHECK

摘要:SAP权限管理的核心在于Authorization Object(授权对象),它通过组合最多10个授权字段来精确控制用户访问权限。关键要点包括:1) 授权对象与ACTVT字段(如01创建/02修改/03显示)的配合使用;2) ABAP中AUTHORITY-CHECK语句的四种常见返回码(0通过/4字段不匹配/12无权限/40无效用户);3) 系统自动执行的S_TCODE事务码检查;4) 自定义授权对象时应遵循"最少且足够"原则,优先复用标准对象。在RAP和OData场景中,权限检查

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 241

【人工智能-数据集】RML2018 时域信号的时序信号和星座图的图片信号生成方式(可用于多模态特征融合)

RML2018(RadioML 2018)数据集是一个广泛用于无线通信信号识别的开源数据集。它包含了多种调制方式(如OOK、QPSK、16QAM等)在不同信噪比下的信号样本。这些数据以 HDF5 格式存储,适用于大规模的数据处理和分析。数据集特点:多调制方式:涵盖24种不同的调制方式。多信噪比:包括从-20 dB到30 dB的26种信噪比。大规模样本:每种调制方式和信噪比下包含4096个样本。数据切分:将原始的 HDF5 数据集按照调制方式和信噪比切分成单个文件,便于后续处理。样本选择。

若北辰 965

群辉NAS映射为本地盘符

鼠标右击网络→映射网络驱动器→以上适合通过局域网操作,采用ZeroTier组网后,也可以按照以上步骤实现,这时使用 “虚拟局域网”的IP地址。

dgnankai的专栏 5758

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

上一篇: ROS机器人仿真入门:5分钟搞定Gazebo+gmapping的SLAM建图(附避坑指南)
下一篇: Windows网络配置全攻略:从IP设置到netsh端口转发(附常见问题排查)
初恋是一滩水Null
博客等级 码龄3年 46粉丝 1724原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值