一次库课网校的逆向实践

打开首页 https://www.kuke99.com/

找到一个加密接口: https://www.kuke99.com/prod-api/kukemarketing/pc/pageMaster/getAssemblyForWx

请求方式为post,请求头内容:

POST /prod-api/kukemarketing/pc/pageMaster/getAssemblyForWx HTTP/1.1
Host: www.kuke99.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:137.0) Gecko/20100101 Firefox/137.0
Accept: application/json
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br, zstd
Referer: https://www.kuke99.com/
content-type: application/json
kk-from: web
kk-platform: 1
kk-request-id: 1744082352627420244d3985a4f21bf18e18108b81106
kk-terminal-type: pc
kk-version: 3.4.0
Content-Length: 152
Origin: https://www.kuke99.com
Connection: keep-alive
Cookie: ssxmod_itna=YqIx2iitWxBDz=DUDGrtzK0=D8BnKe=DknKKuzDfxGNqc5DZDiqAPGhDCSEILhSr4bCnnbPP4OWr7eLKwB0bpIejGbGa==Ocm40aDbqGkQRGxiigDCeDIDWeDiDG4GmeqGtDpxG=DjDytZ9TtDm4GWGqDmDGYBWqDgDYQDGkK0D7QDIqUNADUPxM2lUlt4FnDqGqDMReGXWEaNvna7E00VDB65hdT0DA=09dR5Or=C2PGu9dNDPMboIdi/QQ+AKGw54TQDYqHDUkuCDG3BQ043D75BnK3cxDNAzDAFi0GKbBqI0FqPKYhb/yqYD5i0WKGKS4iD+xm5DGbhOiDD==; ssxmod_itna2=YqIx2iitWxBDz=DUDGrtzK0=D8BnKe=DknKKuD8dp4GXWG2CxFqiQ3x=; Hm_lvt_f86355e338e36ac89f23044f342c637b=1743653847; UM_distinctid=195f9de4098c2c-02f9f2d912e957-f535726-144000-195f9de4099c1c; CNZZDATA1280479695=1674727507-1743653847-%7C1744082352; kkc-learn=%7B%22state%22%3A%7B%7D%7D; Hm_lpvt_f86355e338e36ac89f23044f342c637b=1744082352; HMACCOUNT=FAE95BF56AF1C2F5; fingerprintId=a4ca345c608c67020996d71015dcacac; acw_sc__v2=67f491de424bdf32f82f9da3a37dab26d95d7f42; acw_tc=42decbd5-dd20-4049-8774-15d2b78f285998c9aeb78443b70d99ae3701a4679ea4
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
Priority: u=4
Pragma: no-cache

请求参数内容:

{
"appId":"c9379359685",
"sign":"af56395ae10b96327ebb3774e1e169ad",
"time":1744082352,
"bizContent":{
        "pageMasterId":"968065585896714242",
        "assemblyType":24
    }
}

请求头里cookie和kk-request-id, 请求参数中的sign 应该需要逆向。

先来解决相对复杂点的sign。

全局搜索 sign:,找到sign:c 打断点得到此时的sign为d1761548b0f5a3c3f1761cf83eb2a399,先记录下来用于后面对比。

新建一个js文件,往上看到 c = E3(l).toLowerCase();复制过来。

鼠标移到l上得到他的值,直接定义l=”assemblyType=24&pageMasterId=968065585896714242&appId=c9379359685&appKey=awo6ureum8bn&time=1744079465″

其中time的值是动态的时间戳,这里先用此时的值,以方便后面对比sign生成是否正确。

跳转到E3的代码位置,发现他是function C3(e) {}里的T2.exports;

把function C3 和 var S3 = T2.exports; const E3 = Pi(S3);复制过来;

找到T2的代码复制过来:

找到T2的定义代码,复制过来:

var T2 = {
exports: {
}
},

找到函数Pi()复制过来:

function Pi(e) {
return e &&
e.__esModule &&
Object.prototype.hasOwnProperty.call(e, 'default') ? e.default : e
}

开始测试运行,提示x3未定义。

跟踪到var x3 = I2.exports 把I2和相关代码复制过来 var x3最好放到C3方法上面声明;

再次运行提示Mm未定义。跟踪找到Mm=yf 将yf相关代码复制过来;

继续运行 提示w3未定义 找到代码补过来再次运行,此时没有报错了;

console.log(sign)打印下sign 得到结果为d1761548b0f5a3c3f1761cf83eb2a399 值和之前断点得到的sign一致;

接下来将变量l值里的时间戳改成动态获取。l中的assemblyType=24&pageMasterId=968065585896714242是json格式的bizContent字段转为url参数形式,扣原站js里的代码涉及函数比较多直接写一个函数实现这个转换:

//将bizContent字段由json格式转为url字符串参数形式
const querystring = require('node:querystring');
const queryStr = querystring.stringify(bizContent);
let l=queryStr+"&appId="+appId+"&appKey="+appKey+"&time="+timestamp
let sign=E3(l).toLowerCase();
console.log(sign)

sign的逆向这就完成了。

完整代码如下:

let timestamp=Math.floor(Date.now() / 1000)
let token="vYQ7DJugkbUZjnw2zi1u3LfUBHJt0QoyO/OJ3uq/Vjk="
let appId="c9379359685"
let appKey="awo6ureum8bn"
let bizContent={"assemblyType": 24, "pageMasterId": "968065585896714242"}
// let sign='d1761548b0f5a3c3f1761cf83eb2a399'

var T2 = {
  exports: {
  }
},I2 = {
  exports: {
  }
};
(
  function () {
    var e = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',
    t = {
      rotl: function (n, o) {
        return n << o | n >>> 32 - o
      },
      rotr: function (n, o) {
        return n << 32 - o | n >>> o
      },
      endian: function (n) {
        if (n.constructor == Number) return t.rotl(n, 8) & 16711935 | t.rotl(n, 24) & 4278255360;
        for (var o = 0; o < n.length; o++) n[o] = t.endian(n[o]);
        return n
      },
      randomBytes: function (n) {
        for (var o = []; n > 0; n--) o.push(Math.floor(Math.random() * 256));
        return o
      },
      bytesToWords: function (n) {
        for (var o = [], s = 0, i = 0; s < n.length; s++, i += 8) o[i >>> 5] |= n[s] << 24 - i % 32;
        return o
      },
      wordsToBytes: function (n) {
        for (var o = [], s = 0; s < n.length * 32; s += 8) o.push(n[s >>> 5] >>> 24 - s % 32 & 255);
        return o
      },
      bytesToHex: function (n) {
        for (var o = [], s = 0; s < n.length; s++) o.push((n[s] >>> 4).toString(16)),
        o.push((n[s] & 15).toString(16));
        return o.join('')
      },
      hexToBytes: function (n) {
        for (var o = [], s = 0; s < n.length; s += 2) o.push(parseInt(n.substr(s, 2), 16));
        return o
      },
      bytesToBase64: function (n) {
        for (var o = [], s = 0; s < n.length; s += 3) for (var i = n[s] << 16 | n[s + 1] << 8 | n[s + 2], a = 0; a < 4; a++) s * 8 + a * 6 <= n.length * 8 ? o.push(e.charAt(i >>> 6 * (3 - a) & 63)) : o.push('=');
        return o.join('')
      },
      base64ToBytes: function (n) {
        n = n.replace(/[^A-Z0-9+\/]/gi, '');
        for (var o = [], s = 0, i = 0; s < n.length; i = ++s % 4) i != 0 &&
        o.push(
          (e.indexOf(n.charAt(s - 1)) & Math.pow(2, - 2 * i + 8) - 1) << i * 2 | e.indexOf(n.charAt(s)) >>> 6 - i * 2
        );
        return o
      }
    };
    I2.exports = t
  }
) ();

var x3 = I2.exports
yf = {
  utf8: {
    stringToBytes: function (e) {
      return yf.bin.stringToBytes(unescape(encodeURIComponent(e)))
    },
    bytesToString: function (e) {
      return decodeURIComponent(escape(yf.bin.bytesToString(e)))
    }
  },
  bin: {
    stringToBytes: function (e) {
      for (var t = [], n = 0; n < e.length; n++) t.push(e.charCodeAt(n) & 255);
      return t
    },
    bytesToString: function (e) {
      for (var t = [], n = 0; n < e.length; n++) t.push(String.fromCharCode(e[n]));
      return t.join('')
    }
  }
},
Mm = yf
var w3 = function (e) {
  return e != null &&
  (P2(e) || C3(e) || !!e._isBuffer)
}
function C3(e) {
  return typeof e.readFloatLE == 'function' &&
  typeof e.slice == 'function' &&
  P2(e.slice(0, 0))
}(
  function () {
    var e = x3,
    t = Mm.utf8,
    n = w3,
    o = Mm.bin,
    s = function (i, a) {
      i.constructor == String ? a &&
      a.encoding === 'binary' ? i = o.stringToBytes(i) : i = t.stringToBytes(i) : n(i) ? i = Array.prototype.slice.call(i, 0) : !Array.isArray(i) &&
      i.constructor !== Uint8Array &&
      (i = i.toString());
      for (
        var r = e.bytesToWords(i),
        l = i.length * 8,
        c = 1732584193,
        u = - 271733879,
        d = - 1732584194,
        f = 271733878,
        p = 0;
        p < r.length;
        p++
      ) r[p] = (r[p] << 8 | r[p] >>> 24) & 16711935 | (r[p] << 24 | r[p] >>> 8) & 4278255360;
      r[l >>> 5] |= 128 << l % 32,
      r[(l + 64 >>> 9 << 4) + 14] = l;
      for (var h = s._ff, v = s._gg, y = s._hh, C = s._ii, p = 0; p < r.length; p += 16) {
        var b = c,
        m = u,
        x = d,
        S = f;
        c = h(c, u, d, f, r[p + 0], 7, - 680876936),
        f = h(f, c, u, d, r[p + 1], 12, - 389564586),
        d = h(d, f, c, u, r[p + 2], 17, 606105819),
        u = h(u, d, f, c, r[p + 3], 22, - 1044525330),
        c = h(c, u, d, f, r[p + 4], 7, - 176418897),
        f = h(f, c, u, d, r[p + 5], 12, 1200080426),
        d = h(d, f, c, u, r[p + 6], 17, - 1473231341),
        u = h(u, d, f, c, r[p + 7], 22, - 45705983),
        c = h(c, u, d, f, r[p + 8], 7, 1770035416),
        f = h(f, c, u, d, r[p + 9], 12, - 1958414417),
        d = h(d, f, c, u, r[p + 10], 17, - 42063),
        u = h(u, d, f, c, r[p + 11], 22, - 1990404162),
        c = h(c, u, d, f, r[p + 12], 7, 1804603682),
        f = h(f, c, u, d, r[p + 13], 12, - 40341101),
        d = h(d, f, c, u, r[p + 14], 17, - 1502002290),
        u = h(u, d, f, c, r[p + 15], 22, 1236535329),
        c = v(c, u, d, f, r[p + 1], 5, - 165796510),
        f = v(f, c, u, d, r[p + 6], 9, - 1069501632),
        d = v(d, f, c, u, r[p + 11], 14, 643717713),
        u = v(u, d, f, c, r[p + 0], 20, - 373897302),
        c = v(c, u, d, f, r[p + 5], 5, - 701558691),
        f = v(f, c, u, d, r[p + 10], 9, 38016083),
        d = v(d, f, c, u, r[p + 15], 14, - 660478335),
        u = v(u, d, f, c, r[p + 4], 20, - 405537848),
        c = v(c, u, d, f, r[p + 9], 5, 568446438),
        f = v(f, c, u, d, r[p + 14], 9, - 1019803690),
        d = v(d, f, c, u, r[p + 3], 14, - 187363961),
        u = v(u, d, f, c, r[p + 8], 20, 1163531501),
        c = v(c, u, d, f, r[p + 13], 5, - 1444681467),
        f = v(f, c, u, d, r[p + 2], 9, - 51403784),
        d = v(d, f, c, u, r[p + 7], 14, 1735328473),
        u = v(u, d, f, c, r[p + 12], 20, - 1926607734),
        c = y(c, u, d, f, r[p + 5], 4, - 378558),
        f = y(f, c, u, d, r[p + 8], 11, - 2022574463),
        d = y(d, f, c, u, r[p + 11], 16, 1839030562),
        u = y(u, d, f, c, r[p + 14], 23, - 35309556),
        c = y(c, u, d, f, r[p + 1], 4, - 1530992060),
        f = y(f, c, u, d, r[p + 4], 11, 1272893353),
        d = y(d, f, c, u, r[p + 7], 16, - 155497632),
        u = y(u, d, f, c, r[p + 10], 23, - 1094730640),
        c = y(c, u, d, f, r[p + 13], 4, 681279174),
        f = y(f, c, u, d, r[p + 0], 11, - 358537222),
        d = y(d, f, c, u, r[p + 3], 16, - 722521979),
        u = y(u, d, f, c, r[p + 6], 23, 76029189),
        c = y(c, u, d, f, r[p + 9], 4, - 640364487),
        f = y(f, c, u, d, r[p + 12], 11, - 421815835),
        d = y(d, f, c, u, r[p + 15], 16, 530742520),
        u = y(u, d, f, c, r[p + 2], 23, - 995338651),
        c = C(c, u, d, f, r[p + 0], 6, - 198630844),
        f = C(f, c, u, d, r[p + 7], 10, 1126891415),
        d = C(d, f, c, u, r[p + 14], 15, - 1416354905),
        u = C(u, d, f, c, r[p + 5], 21, - 57434055),
        c = C(c, u, d, f, r[p + 12], 6, 1700485571),
        f = C(f, c, u, d, r[p + 3], 10, - 1894986606),
        d = C(d, f, c, u, r[p + 10], 15, - 1051523),
        u = C(u, d, f, c, r[p + 1], 21, - 2054922799),
        c = C(c, u, d, f, r[p + 8], 6, 1873313359),
        f = C(f, c, u, d, r[p + 15], 10, - 30611744),
        d = C(d, f, c, u, r[p + 6], 15, - 1560198380),
        u = C(u, d, f, c, r[p + 13], 21, 1309151649),
        c = C(c, u, d, f, r[p + 4], 6, - 145523070),
        f = C(f, c, u, d, r[p + 11], 10, - 1120210379),
        d = C(d, f, c, u, r[p + 2], 15, 718787259),
        u = C(u, d, f, c, r[p + 9], 21, - 343485551),
        c = c + b >>> 0,
        u = u + m >>> 0,
        d = d + x >>> 0,
        f = f + S >>> 0
      }
      return e.endian([c,
      u,
      d,
      f])
    };
    s._ff = function (i, a, r, l, c, u, d) {
      var f = i + (a & r | ~a & l) + (c >>> 0) + d;
      return (f << u | f >>> 32 - u) + a
    },
    s._gg = function (i, a, r, l, c, u, d) {
      var f = i + (a & l | r & ~l) + (c >>> 0) + d;
      return (f << u | f >>> 32 - u) + a
    },
    s._hh = function (i, a, r, l, c, u, d) {
      var f = i + (a ^ r ^ l) + (c >>> 0) + d;
      return (f << u | f >>> 32 - u) + a
    },
    s._ii = function (i, a, r, l, c, u, d) {
      var f = i + (r ^ (a | ~l)) + (c >>> 0) + d;
      return (f << u | f >>> 32 - u) + a
    },
    s._blocksize = 16,
    s._digestsize = 16,
    T2.exports = function (i, a) {
      if (i == null) throw new Error('Illegal argument ' + i);
      var r = e.wordsToBytes(s(i, a));
      return a &&
      a.asBytes ? r : a &&
      a.asString ? o.bytesToString(r) : e.bytesToHex(r)
    }
  }
) ();

function Pi(e) {
  return e &&
  e.__esModule &&
  Object.prototype.hasOwnProperty.call(e, 'default') ? e.default : e
}
var S3 = T2.exports;
const E3 = Pi(S3);

//将bizContent字段由json格式转为url字符串参数形式
const querystring = require('node:querystring');
const queryStr = querystring.stringify(bizContent);
// l="assemblyType=24&pageMasterId=968065585896714242&appId="+appId+"&appKey="+appKey+"&time="+timestamp
let l=queryStr+"&appId="+appId+"&appKey="+appKey+"&time="+timestamp
let sign=E3(l).toLowerCase();
console.log(sign)

接下来处理请求头里的kk-request-id。全局搜索kk-request-id。实际就只有一处:

  h = {
    'content-type': 'application/json',
    accept: 'application/json',
    'kk-version': t,
    'kk-request-id': ''.concat(new Date().getTime()).concat(E2()),
    'kk-platform': s
  };

同时可以看出请求头所需的参数是content-type,accept等5个参数;

kk-versoin得到3.4.0;kk-platform得到1。这两个应该就是固定的值;

全局搜索3.4.0可以找到更多的配置项:

config: {
        public: {
          TOKEN_KEY: 'TOKEN',
          BUILD_ENV: 'PROD',
          lastBuildTime: 1744041773120,
          baseUrlClient: '/prod-api',
          version: '3.4.0',
          USER_KEY: 'user',
          CALLBACK_URL: 'https://icloud.kukewang.com/auth/callback/',
          PAY_LOCALHOST: 'https://pay-pc.kukecloud.cn',
          persistedState: {
            storage: 'cookies',
            debug: Y,
            cookieOptions: {
            }
          }
        },
        app: {
          baseURL: is,
          buildAssetsDir: '/_nuxt/',
          cdnURL: 'https://oss.kuke99.com/kukecloud/static/pc/'
        }
      }

kk-request-id需要E2()的值。找到该方法复制过来生成requestid:

var vf = [];
for (let e = 0; e <= 15; e++) vf[e] = e.toString(16);
function E2() {
  let e = '';
  for (let t = 1; t <= 36; t++) t === 9 ||
  t === 14 ||
  t === 19 ||
  t === 24 ? e += '-' : t === 15 ? e += 4 : t === 20 ? e += vf[Math.random() * 4 | 8] : e += vf[Math.random() * 16 | 0];
  return e.replace(/-/g, '')
}
let request_id=''.concat(new Date().getTime()).concat(E2())
console.log(request_id)

对目标接口打上xhr断点,网址包含pc/pageMaster/getAssemblyForWx时触发。

刷新触发断点,停在了1367行:

鼠标移到o上直接能看到他的请求信息,发现请求头还缺少”kk-from”: “web”和”kk-terminal-type”: “pc”;

同时发现他请求头里cookie是不需要的。那么就不用逆向coockie了。

现在开始完整请求测试:

n8n工作流中新建一个code节点,生成kk-request-id,sign和时间戳

//生成 kk-request-id
var vf = [];
for (let e = 0; e <= 15; e++) vf[e] = e.toString(16);
function E2() {
  let e = '';
  for (let t = 1; t <= 36; t++) t === 9 ||
  t === 14 ||
  t === 19 ||
  t === 24 ? e += '-' : t === 15 ? e += 4 : t === 20 ? e += vf[Math.random() * 4 | 8] : e += vf[Math.random() * 16 | 0];
  return e.replace(/-/g, '')
}
let request_id=''.concat(new Date().getTime()).concat(E2())
console.log(request_id)

//生成sign
let timestamp=Math.floor(Date.now() / 1000)
let token="vYQ7DJugkbUZjnw2zi1u3LfUBHJt0QoyO/OJ3uq/Vjk="
let appId="c9379359685"
let appKey="awo6ureum8bn"
let bizContent={"assemblyType": 24, "pageMasterId": "968065585896714242"}
// let sign='d1761548b0f5a3c3f1761cf83eb2a399'

var T2 = {
  exports: {
  }
},I2 = {
  exports: {
  }
};
(
  function () {
    var e = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',
    t = {
      rotl: function (n, o) {
        return n << o | n >>> 32 - o
      },
      rotr: function (n, o) {
        return n << 32 - o | n >>> o
      },
      endian: function (n) {
        if (n.constructor == Number) return t.rotl(n, 8) & 16711935 | t.rotl(n, 24) & 4278255360;
        for (var o = 0; o < n.length; o++) n[o] = t.endian(n[o]);
        return n
      },
      randomBytes: function (n) {
        for (var o = []; n > 0; n--) o.push(Math.floor(Math.random() * 256));
        return o
      },
      bytesToWords: function (n) {
        for (var o = [], s = 0, i = 0; s < n.length; s++, i += 8) o[i >>> 5] |= n[s] << 24 - i % 32;
        return o
      },
      wordsToBytes: function (n) {
        for (var o = [], s = 0; s < n.length * 32; s += 8) o.push(n[s >>> 5] >>> 24 - s % 32 & 255);
        return o
      },
      bytesToHex: function (n) {
        for (var o = [], s = 0; s < n.length; s++) o.push((n[s] >>> 4).toString(16)),
        o.push((n[s] & 15).toString(16));
        return o.join('')
      },
      hexToBytes: function (n) {
        for (var o = [], s = 0; s < n.length; s += 2) o.push(parseInt(n.substr(s, 2), 16));
        return o
      },
      bytesToBase64: function (n) {
        for (var o = [], s = 0; s < n.length; s += 3) for (var i = n[s] << 16 | n[s + 1] << 8 | n[s + 2], a = 0; a < 4; a++) s * 8 + a * 6 <= n.length * 8 ? o.push(e.charAt(i >>> 6 * (3 - a) & 63)) : o.push('=');
        return o.join('')
      },
      base64ToBytes: function (n) {
        n = n.replace(/[^A-Z0-9+\/]/gi, '');
        for (var o = [], s = 0, i = 0; s < n.length; i = ++s % 4) i != 0 &&
        o.push(
          (e.indexOf(n.charAt(s - 1)) & Math.pow(2, - 2 * i + 8) - 1) << i * 2 | e.indexOf(n.charAt(s)) >>> 6 - i * 2
        );
        return o
      }
    };
    I2.exports = t
  }
) ();

var x3 = I2.exports
yf = {
  utf8: {
    stringToBytes: function (e) {
      return yf.bin.stringToBytes(unescape(encodeURIComponent(e)))
    },
    bytesToString: function (e) {
      return decodeURIComponent(escape(yf.bin.bytesToString(e)))
    }
  },
  bin: {
    stringToBytes: function (e) {
      for (var t = [], n = 0; n < e.length; n++) t.push(e.charCodeAt(n) & 255);
      return t
    },
    bytesToString: function (e) {
      for (var t = [], n = 0; n < e.length; n++) t.push(String.fromCharCode(e[n]));
      return t.join('')
    }
  }
},
Mm = yf
var w3 = function (e) {
  return e != null &&
  (P2(e) || C3(e) || !!e._isBuffer)
}
function C3(e) {
  return typeof e.readFloatLE == 'function' &&
  typeof e.slice == 'function' &&
  P2(e.slice(0, 0))
}(
  function () {
    var e = x3,
    t = Mm.utf8,
    n = w3,
    o = Mm.bin,
    s = function (i, a) {
      i.constructor == String ? a &&
      a.encoding === 'binary' ? i = o.stringToBytes(i) : i = t.stringToBytes(i) : n(i) ? i = Array.prototype.slice.call(i, 0) : !Array.isArray(i) &&
      i.constructor !== Uint8Array &&
      (i = i.toString());
      for (
        var r = e.bytesToWords(i),
        l = i.length * 8,
        c = 1732584193,
        u = - 271733879,
        d = - 1732584194,
        f = 271733878,
        p = 0;
        p < r.length;
        p++
      ) r[p] = (r[p] << 8 | r[p] >>> 24) & 16711935 | (r[p] << 24 | r[p] >>> 8) & 4278255360;
      r[l >>> 5] |= 128 << l % 32,
      r[(l + 64 >>> 9 << 4) + 14] = l;
      for (var h = s._ff, v = s._gg, y = s._hh, C = s._ii, p = 0; p < r.length; p += 16) {
        var b = c,
        m = u,
        x = d,
        S = f;
        c = h(c, u, d, f, r[p + 0], 7, - 680876936),
        f = h(f, c, u, d, r[p + 1], 12, - 389564586),
        d = h(d, f, c, u, r[p + 2], 17, 606105819),
        u = h(u, d, f, c, r[p + 3], 22, - 1044525330),
        c = h(c, u, d, f, r[p + 4], 7, - 176418897),
        f = h(f, c, u, d, r[p + 5], 12, 1200080426),
        d = h(d, f, c, u, r[p + 6], 17, - 1473231341),
        u = h(u, d, f, c, r[p + 7], 22, - 45705983),
        c = h(c, u, d, f, r[p + 8], 7, 1770035416),
        f = h(f, c, u, d, r[p + 9], 12, - 1958414417),
        d = h(d, f, c, u, r[p + 10], 17, - 42063),
        u = h(u, d, f, c, r[p + 11], 22, - 1990404162),
        c = h(c, u, d, f, r[p + 12], 7, 1804603682),
        f = h(f, c, u, d, r[p + 13], 12, - 40341101),
        d = h(d, f, c, u, r[p + 14], 17, - 1502002290),
        u = h(u, d, f, c, r[p + 15], 22, 1236535329),
        c = v(c, u, d, f, r[p + 1], 5, - 165796510),
        f = v(f, c, u, d, r[p + 6], 9, - 1069501632),
        d = v(d, f, c, u, r[p + 11], 14, 643717713),
        u = v(u, d, f, c, r[p + 0], 20, - 373897302),
        c = v(c, u, d, f, r[p + 5], 5, - 701558691),
        f = v(f, c, u, d, r[p + 10], 9, 38016083),
        d = v(d, f, c, u, r[p + 15], 14, - 660478335),
        u = v(u, d, f, c, r[p + 4], 20, - 405537848),
        c = v(c, u, d, f, r[p + 9], 5, 568446438),
        f = v(f, c, u, d, r[p + 14], 9, - 1019803690),
        d = v(d, f, c, u, r[p + 3], 14, - 187363961),
        u = v(u, d, f, c, r[p + 8], 20, 1163531501),
        c = v(c, u, d, f, r[p + 13], 5, - 1444681467),
        f = v(f, c, u, d, r[p + 2], 9, - 51403784),
        d = v(d, f, c, u, r[p + 7], 14, 1735328473),
        u = v(u, d, f, c, r[p + 12], 20, - 1926607734),
        c = y(c, u, d, f, r[p + 5], 4, - 378558),
        f = y(f, c, u, d, r[p + 8], 11, - 2022574463),
        d = y(d, f, c, u, r[p + 11], 16, 1839030562),
        u = y(u, d, f, c, r[p + 14], 23, - 35309556),
        c = y(c, u, d, f, r[p + 1], 4, - 1530992060),
        f = y(f, c, u, d, r[p + 4], 11, 1272893353),
        d = y(d, f, c, u, r[p + 7], 16, - 155497632),
        u = y(u, d, f, c, r[p + 10], 23, - 1094730640),
        c = y(c, u, d, f, r[p + 13], 4, 681279174),
        f = y(f, c, u, d, r[p + 0], 11, - 358537222),
        d = y(d, f, c, u, r[p + 3], 16, - 722521979),
        u = y(u, d, f, c, r[p + 6], 23, 76029189),
        c = y(c, u, d, f, r[p + 9], 4, - 640364487),
        f = y(f, c, u, d, r[p + 12], 11, - 421815835),
        d = y(d, f, c, u, r[p + 15], 16, 530742520),
        u = y(u, d, f, c, r[p + 2], 23, - 995338651),
        c = C(c, u, d, f, r[p + 0], 6, - 198630844),
        f = C(f, c, u, d, r[p + 7], 10, 1126891415),
        d = C(d, f, c, u, r[p + 14], 15, - 1416354905),
        u = C(u, d, f, c, r[p + 5], 21, - 57434055),
        c = C(c, u, d, f, r[p + 12], 6, 1700485571),
        f = C(f, c, u, d, r[p + 3], 10, - 1894986606),
        d = C(d, f, c, u, r[p + 10], 15, - 1051523),
        u = C(u, d, f, c, r[p + 1], 21, - 2054922799),
        c = C(c, u, d, f, r[p + 8], 6, 1873313359),
        f = C(f, c, u, d, r[p + 15], 10, - 30611744),
        d = C(d, f, c, u, r[p + 6], 15, - 1560198380),
        u = C(u, d, f, c, r[p + 13], 21, 1309151649),
        c = C(c, u, d, f, r[p + 4], 6, - 145523070),
        f = C(f, c, u, d, r[p + 11], 10, - 1120210379),
        d = C(d, f, c, u, r[p + 2], 15, 718787259),
        u = C(u, d, f, c, r[p + 9], 21, - 343485551),
        c = c + b >>> 0,
        u = u + m >>> 0,
        d = d + x >>> 0,
        f = f + S >>> 0
      }
      return e.endian([c,
      u,
      d,
      f])
    };
    s._ff = function (i, a, r, l, c, u, d) {
      var f = i + (a & r | ~a & l) + (c >>> 0) + d;
      return (f << u | f >>> 32 - u) + a
    },
    s._gg = function (i, a, r, l, c, u, d) {
      var f = i + (a & l | r & ~l) + (c >>> 0) + d;
      return (f << u | f >>> 32 - u) + a
    },
    s._hh = function (i, a, r, l, c, u, d) {
      var f = i + (a ^ r ^ l) + (c >>> 0) + d;
      return (f << u | f >>> 32 - u) + a
    },
    s._ii = function (i, a, r, l, c, u, d) {
      var f = i + (r ^ (a | ~l)) + (c >>> 0) + d;
      return (f << u | f >>> 32 - u) + a
    },
    s._blocksize = 16,
    s._digestsize = 16,
    T2.exports = function (i, a) {
      if (i == null) throw new Error('Illegal argument ' + i);
      var r = e.wordsToBytes(s(i, a));
      return a &&
      a.asBytes ? r : a &&
      a.asString ? o.bytesToString(r) : e.bytesToHex(r)
    }
  }
) ();

function Pi(e) {
  return e &&
  e.__esModule &&
  Object.prototype.hasOwnProperty.call(e, 'default') ? e.default : e
}
var S3 = T2.exports;
const E3 = Pi(S3);

//将bizContent字段由json格式转为url字符串参数形式
const querystring = require('node:querystring');
const queryStr = querystring.stringify(bizContent);
// l="assemblyType=24&pageMasterId=968065585896714242&appId="+appId+"&appKey="+appKey+"&time="+timestamp
let l=queryStr+"&appId="+appId+"&appKey="+appKey+"&time="+timestamp
let sign=E3(l).toLowerCase();
console.log(sign)

return {t:timestamp, sign:sign, request_id:request_id};

再新建一个http request节点,请求方式为post;

url为https://www.kuke99.com/prod-api/kukemarketing/pc/pageMaster/getAssemblyForWx

请求headers内容:

{
	"content-type": "application/json",
	"accept": "application/json",
	"kk-platform": "1",
    "kk-from": "web",
	"kk-version": "3.4.0",
	"kk-request-id": "{{ $json.request_id }}",
    "kk-terminal-type": "pc",
	"Cookie": "{{ $json.cookie }}"
}

请求body内容:

{"appId":"c9379359685","sign":"{{ $json.sign }}","time":{{ $json.t }},"bizContent":{"pageMasterId":"968065585896714242","assemblyType":24}}

点击测试工作流,成功得到数据。

Leave a Comment