尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Mornye-Extension Amazon Music插件逆向解析:跨目录链接解析与CSRF会话刷新原理
【免费下载链接】Mornye-ExtensionExtension Registry for Mornye Browse, submit, and download community-built extensions.项目地址https://gitcode.com/gh_mirrors/sp/Mornye-Extension点击查看免费下载本文逆向解析 Mornye-Extension 仓库中的 Amazon Music 插件v2.3.11重点拆解两个最不易被察觉的核心机制跨目录链接解析如何把 Spotify/Deezer 链接转换为 Amazon ASIN与 CSRF 会话刷新原理插件如何对 Amazon Music Web API 维持一个永不掉线的会话。全文以源码为据所有结论均可在仓库中逐行验证。 先认识插件它在仓库里的位置Mornye-Extension 是一个面向 SpotiFLAC Mobile 的扩展注册表Extension Registry社区提交的扩展以.sflx压缩包形式存放于 extensions/并通过 registry.json 记录版本与 SHA-256 摘要。与只交压缩包的社区扩展不同Amazon 插件属于附带可审查源码的内置 Provider文件/目录作用sources/amazon/index.js插件主体约 4000 行含会话管理、链接解析、下载逻辑sources/amazon/manifest.json权限白名单、下载质量档位FLAC/Opus/Dolby Digital Plus/Atmos等元信息tests/amazon_session.test.cjsCSRF 会话刷新的离线回归测试tests/amazon_resolution.test.cjs跨目录解析与 URL 校验的离线回归测试tests/amazon_region.test.cjs区域目录归一化与 404 ASIN 重映射测试extensions/amzn.sflx由 scripts/build_packages.py 构建出的可安装包获取源码并运行回归测试需要 Node.js 22测试全程离线、不访问真实音乐服务git clone https://gitcode.com/gh_mirrors/sp/Mornye-Extension cd Mornye-Extension node --test tests/*.test.cjs CSRF 会话刷新原理为什么必须用 POST 拿 tokenAmazon Music 的 Web APIskill.music.a2z.com要求每个请求携带一组设备凭据与 CSRF 令牌。插件的会话初始化函数 initSession 向以下地址发起POST请求https://music.amazon.com/config.json?skipTokenfalseclientApplicationskyfire这里有个关键的逆向发现源码注释写得很直白// POST issues CSRF credentials; GET returns configuration without a token.也就是说GET 请求虽然返回 HTTP 200但响应中不再包含 CSRF token只有 POST 才能拿到csrf.token / ts / rnd三件套连同deviceId、sessionId一起存入会话对象 _session。x-amzn-csrf 请求头的构造每次调用 API 前buildHeaders 都会拼装一套约 25 个x-amzn-*请求头其中两个是 JSON 字符串interface: CSRFInterface.v1_0.CSRFHeaderElement, token: ..., timestamp: ..., rndNonce: ...分别对应x-amzn-csrf防跨站伪造与x-amzn-authentication客户端令牌。rndNonce在缺失时会本地随机生成避免请求因格式校验被拒。失败即刷新一次性的 refresh 与重试initSession有一个兜底分支若config.json拉取失败就本地随机生成 deviceId/sessionId源码注释坦承 may get 429。真正让会话自愈的是 refreshSession调用失败如 403/429时把_session.initialized置为false并重新走一遍initSession各 API 封装如 callShowHome在首次失败后会refreshSession() 短退避然后只重试一次。tests/amazon_session.test.cjs 用vm沙箱加载真实源码验证了这条链路搜索请求只 POST 一次 config.json 就复用会话当模拟服务端以 403 拒绝首个搜索时插件会重新 POST 刷新第二次请求携带了token-2断言序列为[token-1, token-2]。 跨目录链接解析原理当 SpotiFLAC 拿到一首歌的 Spotify ID、Deezer ID 或 ISRC 时插件需要在 Amazon 目录里找到同一首歌。入口函数是 resolveAmazonURL它按优先级组织了一条回退链顺序输入手段1Deezer ID或用 ISRC 经 Deezer API 换得抓取 Songlink 页面提取 amazonMusic 链接2Spotify ID必须形如 22 位字母数字否则直接忽略同上3ISRC抓取 Songstats 页面递归扫描 JSON-LD 的sameAs字段4全部落空交给调用方回退到精确的 Amazon 目录搜索从 Songlink 页面里抠出链接callSongLinkPage 抓取https://song.link/{编码后的源URL}后并不是正则匹配 HTML而是 extractSongLinkNextDataJSON 直接定位 Next.js 注入的script id__NEXT_DATA__再解析props.pageProps.pageData.sections[].links[]挑出platform amazonMusic的条目。数据来自结构化 JSON比解析可见文本稳定得多。严格校验拒绝看起来像的链接拿到候选 URL 后必须通过 acceptResolvedAmazonTrackURL → extractResolvedTrackASIN 的双重把关域名必须命中 12 个官方music.amazon.*区域的白名单正则L165测试中music.amazon.com.evil.test这类仿冒域名会被拒只接受明确的 track 路径或携带trackAsin参数的专辑深链/albums/{id}、/artists/{id}一律不接受——因为外部解析器有时返回一个ID 恰好长得像 ASIN的艺人页ASIN 必须匹配^B[0-9A-Z]{9}$ASIN_REGEX。源码注释还记录了一个真实坑Apple Music 等 Provider 可能把外部数字 ID 塞进spotify_id字段若不先用isLikelySpotifyId过滤会拼出无效 Spotify 链接并污染整条 Spotify 链路L3281-L3292。区域目录归一化与 404 时的 ASIN 重映射Amazon Music 在不同国家站点.com、.co.jp、.de……使用互不相同的 ASIN。createAmazonContext 的策略是用户贴来任何区域链接时把请求上下文统一归一到标准目录music.amazon.com但原区域 ID 先保留等 Amazon 返回对应的标准 ID 后再换票。下载时的兜底逻辑在 download 的 requestMedia先按原 ASIN 请求下载若收到目录级 404TRACK_NOT_FOUND等调用 getCanonicalCatalogTrack 做一次标准目录直查只有当返回的元数据携带一个不同的、经过校验的新 ASIN 时才用它重试一次新 ASIN 仍 404、或鉴权失败401/429等情况直接保留原始错误绝不进入重试循环。tests/amazon_region.test.cjs 对上述行为做了矩阵式覆盖12 个区域域名全部归一、trackAsin参数在归一化中不丢失、无新 ID 不重试、新 ID 仍 404 不循环、会话类错误不得触发 ASIN 重映射等十余条断言。✅ 小结CSRF 会话刷新POST 换取 token → JSON 请求头随每请求下发 → 失败后refreshSession()重建会话并只重试一次兜底随机会话保证永不卡死跨目录链接解析Deezer → Spotify → ISRC/Songstats 三级回退结构化提取__NEXT_DATA__配合域名白名单 track 级 ASIN 校验杜绝仿冒链接与字段污染区域目录请求统一走标准目录下载 404 时最多一次直查 换 ID 重试保证失败可解释、不无限循环。整套机制的每个关键分支都有对应的离线回归测试守护见 tests/这也是该仓库源码 测试 构建产物三位一体提交方式见 README.md的价值所在。赞分享【免费下载链接】Mornye-ExtensionExtension Registry for Mornye Browse, submit, and download community-built extensions.项目地址https://gitcode.com/gh_mirrors/sp/Mornye-Extension点击查看免费下载相关推荐TeamPass后台任务管理自动化维护和清理操作手册TeamPass后台任务管理自动化维护和清理操作手册 TeamPass作为一款协作密码管理器其后台任务管理功能是确保系统高效稳定运行的核心组件。本文将详细介后端应用安全yandex-music-downloader源码剖析一逆向Yandex Music get-file-info接口与HMAC签名原理yandex music downloader源码剖析一逆向Yandex Music get file info接口与HMAC签名原理 本文以 PyOneMore插件双向链接确认对话框优化解析OneMore插件双向链接确认对话框优化解析 痛点场景打断工作流的确认提示 在使用OneNote进行知识管理时双向链接Bi directional Lin桌面应用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

wx-cli REST API 完整参考:用 8 个端点搭建你的本地微信数据服务

wx-cli REST API 完整参考:用 8 个端点搭建你的本地微信数据服务

【免费下载链接】wx-cli WeChat macOS database decryption and query tool 项目地址: https://gitcode.com/gh_mirrors/wxcl/wx-cli 点击查看 免费下载 wx-cli 是一个运行在 macOS 上的微信数据库解密与查询工具,它的 wx-cli server run 命令可以把本机…

📅 2026/10/23 10:33:08
d3dcompiler_36.dll文件在Windows系统中出现错误解决办法

d3dcompiler_36.dll文件在Windows系统中出现错误解决办法

在使用电脑系统时经常会出现丢失找不到某些文件的情况,由于很多常用软件都是采用 Microsoft Visual Studio 编写的,所以这类软件的运行需要依赖微软Visual C运行库,比如像 QQ、迅雷、Adobe 软件等等,如果没有安装VC运行库或者安装…

📅 2026/10/23 10:28:07
d3dcompiler_35.dll文件在Windows系统中出现错误解决办法

d3dcompiler_35.dll文件在Windows系统中出现错误解决办法

在使用电脑系统时经常会出现丢失找不到某些文件的情况,由于很多常用软件都是采用 Microsoft Visual Studio 编写的,所以这类软件的运行需要依赖微软Visual C运行库,比如像 QQ、迅雷、Adobe 软件等等,如果没有安装VC运行库或者安装…

📅 2026/10/23 10:28:07
MORE NEWS

更多资讯

📰

Standalone集群实战:PySpark作业提交与spark-submit调度

这篇日志写在2022年2月初,离我把Python和数据分析基础过完大概一个月。当时想往大数据方向走,身边所有人的建议几乎一致:先学PySpark。于是春节假期后的第一件事,就是把Spark环境和Standalone集群跑起来。真正动手之后才发现&…

📰

知识图谱+大模型:企业级智能问答系统原理与落地实战

讲实话,最早接到这个"知识图谱大模型智能问答系统"的需求时,我是有点抵触的。当时我刚被纯大模型问答方案的幻觉问题折磨过一轮:模型煞有介事地给出一个看起来毫无破绽、实际完全编造的答案,用户再追问一句"你的数…

📰

51单片机驱动WS2812灯带:时序控制与代码实现

简介:这份资源面向使用51单片机开发智能灯效的电子爱好者与嵌入式初学者,围绕WS2812单线级联LED的驱动展开,解决时序精度要求高、协议不易上手的问题。压缩包共17个文件,约348KB,包含C语言源码、头文件、Keil工程与编译…

📰

多重分形谱与盒子维数:MATLAB实现不均匀性量化分析

简介:这份资源聚焦Matlab环境下的多重分形谱算法与盒子维数计算,面向分形几何、图像处理、信号分析及金融建模等方向的学习者与研究者,帮助其用数值手段定量刻画复杂系统的自相似性与尺度不变性。压缩包共2个文件,均为.m脚本&…

📰

工业机器人手眼标定与模板匹配实战指南

1. 项目概述:为什么手眼标定和模板匹配是机器人视觉落地的“生死线”“机器人视觉系统中的手眼标定与模板匹配实战”——这个标题里藏着两条真实产线上的硬骨头:一条是让机械臂“看准了再动手”的空间对齐问题,另一条是让机器“认得清、抓得稳…

📰

Spring Boot 连接 MongoDB 报错 Exception authenticating MongoCredential 排查指南

1. 这个报错到底在说什么Exception authenticating MongoCredential这个报错,几乎每个用 Spring Boot 连 MongoDB 的人都会撞上一次。它的字面意思是“认证 MongoCredential 时发生异常”,但真正让人头疼的是——它只告诉你认证失败了,却不告…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬