资讯动态

Mornye-Extension Amazon Music插件逆向解析:跨目录链接解析与CSRF会话刷新原理

发布时间:2026/10/23 10:31:33 来源:尧图企业网站定制
【免费下载链接】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),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑