网易云音乐听歌识曲 API 逆向 (二)

前两天看到网易云音乐发布了一个网页上做音乐识别的 Chrome 插件

netease-chrome-recgonize

于是立即下载了一份来研究

source

Chrome 插件的请求方式和结构和客户端几乎一模一样

request-struct

根据函数栈追踪, 可以分析出比较核心的逻辑都在 sandbox.bundle.js

看起来是用了 WebAssemble 来解析网页录音, 在点击开始录音后会开始录制当前 TAB 的音频

当录音完成后就会将音频传到 WASM 暴露的函数 l().ExtractQueryFP(...)

parse-buffer

WASM 层处理完成后就会将返回的 ArrayBuffer 封装成一个 Base64 串, 最后会将这个 Base64 串提交给 API

request-code


虽然还是不太清楚 WASM 层内部是如何处理传入的音频数据, 但是已经可以将它的代码抽出来作为一个类库了

基于插件代码制作了一份 DEMO, 可以参考 NeteaseCloudMusic-Audio-Recgonize

rec.json 内是封装成 JSON 的录音 ArrayBuffer

运行后会在 Chrome Console 打印出音频指纹的 Base64 串

console

postman-test

Author: Aki Nazuki
Link: http://nazuki.moe/netease-eapi-music-recgonize-reverse-2/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.