2. Web 网站破解前置知识
2.1 请求分析、修改
Web 端的资源获取逻辑多数都基于 JavaScript,在打开网页时下载到客户端执行,源码是直接开放的。
打开浏览器的调试工具,就可以看到请求和响应信息(如 Header、URL、请求参数和响应值),并执行重放操作。
如果想替换响应资源,可以使用 Fiddler Classic 和 Charles 等网络分析工具。
通过网络分析工具解析 HTTPS 资源,需要在本机安装可信根证书。分析工具以中间人的方式来查看信息。
2.2 常用的加密算法和库
遇到加密参数时,优先考虑以下方式:
- blueimp-md5:在浏览器端进行 md5 加密
- Crypto.js:纯JavaScript的加密算法类库,可以方便的在前端进行加解密操作
- base64(不算加密算法,但是很常见)
3. 实例说明
使用 Firefox 进行简单的资源搜索、消息分析。
3.1 音频解析
比如说 https://www.ximalaya.com/sound/36869433
这段音频,分析网址发现 sound 后面的一串代码似乎是动态变化的,可能是音频资源的 id
访问上述地址,然后点击下面的播放按钮。
当音频播放时,在浏览器调试工具中搜索 36869433,看到如下结果:
每个链接都看一下,可以发现在响应数据中 trackInfo.playUrlList 一节能看到下载链接
https://mobile.ximalaya.com/mobile-playpage/track/v3/baseInfo/1664096284626?device=web&trackId=36869433&trackQualityLevel=1
列表中发现了四个地址,其中 url 是加密的。
这时要记得一件事:所有的逻辑解密代码都在 JavaScript 中
查看浏览器的调试器功能,在其中查找网页的 JavaScript 代码地址。找到 s1.xmcdn.com 这一项
看到有五个文件。直接开始搜索下载地址,根据下载地址定位到调用方法 Mt,直接打断点调试
刷新页面后重新触发方法。点击跳出按钮到达函数外层
一个明显的 ajax 请求。看回调部分
可推测是 Lt 方法解析链接。在控制台中查看 Lt 方法:
其中的 Dt 和 Rt 是什么呢?
看起来是个成品的加密库。拿关键词直接百度,看到一大堆的 Crypto.js
直接替换试试
完全一致,解析结束。
3.2 解析专辑中链接下载地址
专辑本质上是一组声音列表,只需要获取 trackId,批量调用上一步提到的方法即可。
和上一步的方法一致,找到列表链接:
https://www.ximalaya.com/revision/album/v1/getTracksList?albumId=4615999&pageNum=1
得到如下列表:
3.3 xm-sign 生成
在调用接口时,header 中有一个 xm-sign。这个是如何生成的呢?
回到文件中,搜索 xm-sign,定位到 getSign 方法
然后打断点,先执行 toString 方法
发现静态值 XM_SERVER_CLOCK,猜测是服务器时间的含义。先放在一边,进入函数中调试。
红线上的这些值,可以直接在控制台中执行看结果。比如说 c('0x13'),可以得到下图的结果
最终的代码如下一节 getSign 所示
4. 核心代码:
https://github.com/12redcircle/xmly-radio-extractor/discussions/2