2024.10.30.喜马拉雅xm-sign破解方法

2024年10月底

喜马拉雅升级了请求签名算法

xm-sign

该方法由数字联盟公司提供技术持

算法由dws.1.6.8.js执行

生成固定的browserid与变化的sessionid拼接而成

本人已实现对算法的解密,附上源码

<!DOCTYPE html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <meta name="Generator" content="EditPlus®">
  <meta name="Author" content="">
  <meta name="Keywords" content="">
  <meta name="Description" content="">
  <title>xm_sign</title>

  <script src="https://s1.xmcdn.com/yx/static-source/last/dist/js/dws1.6.8.js"></script>
  <script>
    var U = {};

    U.dwsSetConfig = function() {
      window.du_web_sdk && window.du_web_sdk.setConfig({
        deb: "true"
      })
    }
    U.dwsGetBrowserId = function(browserID,cid,KFp) {
        return browserID ? Promise.resolve(browserID) : new Promise((function(e, t) {
            window.du_web_sdk.getBrowserID(cid, KFp, "", (function(t) {
                t && (browserID = t),
                e(t || "")
            }
            ))
        }
        ));
    }
    U.dwsGetSessionID = function(cid,KFp) {
      return new Promise((function(e, t) {
          window.du_web_sdk.getSessionID(cid, KFp, "", (function(t) {
              e(t || "")
          }
          ))
      }
      ));
    }


    setTimeout(() => {
      var cid = "t6pfoml9679z52kqw93uqu75eflqdg1bykhl";
      var KFp = "h5_goyxvzyohd";
      var browserID = "";
      var browserIDPromise = U.dwsGetBrowserId(browserID,cid,KFp);
      var sessionIDPromise = U.dwsGetSessionID(cid,KFp);
      Promise.all([browserIDPromise, sessionIDPromise])
        .then((function([browserID,sessionID]) {
          var xm_sign = "".concat(browserID, "&&").concat(sessionID);
          var html = "";
          html = html + "<input id='xm_sign' type='hidden' value='"+xm_sign+"'/>";
          document.body.innerHTML = html;
        }
      )).catch((function(e) {}
      ))
    }, 1000);

  </script>
 </head>
 <body>
  <input id="xm_sign" value="">
 </body>
</html>

懒得研究的,可以使用下面的工具,喜马拉雅、懒人听书、蜻蜓FM下载工具,支持VIP登录,自己能听就能下

听书软件下载地址:https://startsvc.cn

### 喜马拉雅 xm-sign 签名生成算法解析 #### 请求拦截器中的签名处理 在请求发送前,通过 `a.interceptors.request.use` 方法对特定 URL 的请求头进行修改,在 `/revision` 路径下的 API 请求会附加名为 `"xm-sign"` 的自定义 HTTP 头字段[^2]。 ```javascript var d = new i.default; a.interceptors.request.use(function(e) { return e.url.indexOf("/revision") > -1 && (e.headers = Object.assign(Object.assign({}, e.headers), { "xm-sign": d.getSign() })), e }); ``` #### 时间戳的作用及其获取方式 为了确保每次请求的有效性和唯一性,喜马拉雅使用了双重时间戳机制。其中一个是来自服务器端的时间戳 (`t`) ,另一个则是客户端本地计算得出的时间戳 (`e`) 。这两个时间戳共同参与最终签名字符串的构建过程[^3]。 - **服务端时间戳**:可通过访问 `https://www.ximalaya.com/revision/time` 接口获得。 - **客户端时间戳**:通常指当前系统的毫秒级 Unix 时间戳。 #### 随机因子的应用 除了固定参数外,还引入了一个范围内的随机整数值作为扰动因素加入到签名逻辑之中,具体表现为两个小括号内包含的一个介于 0 到 99 之间的随机数。 #### 完整签名流程概述 综合上述要素,完整的 `xm-sign` 计算大致遵循如下模式: 1. 获取并记录服务端返回的标准时间戳; 2. 构造基础签名串,格式类似于 `{timestamp}:{random_number}`; 3. 对此字符串应用哈希运算或其他加密变换得到最终形式的签名值; 4. 将生成好的签名设置为请求头部的一部分随同数据一同提交给目标API。 需要注意的是,实际项目中可能还会涉及到更多细节上的调整以及安全措施来防止恶意利用或仿冒合法用户的正常操作行为。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值