算法助手Pro - 安卓逆向工程师必备的全能Hook工具（兼容Android14）
算法助手是一个基于Xposed的调试工具、是为了帮助开发人员、移动安全人员、程序测试人员对App进行更快捷的安全测试、性能测试、异常分析。{card-describe title="主要功能"}提供信息摘要算法（如Md5、Sha）的功能（MessageDigest类）支持秘钥算法（如AES、DES、RSA）操作（Cipher类）可执行含有秘钥的哈希算法（如Hmac）操作（Mac类）提供对话框的定位功能（Dialog类）捕获并记录日志（LOG类）拦截程序退出（System以及其他类）提供justTrustMe升级版，可高效自动定位混淆后的okhttp记录文件访问信息（File类）支持自定义Hook，可自行定义hook类，设置返回值，拦截执行{/card-describe}{cloud title="算法助手Pro" type="quark" url="https://pan.quark.cn/s/c94b526ffc1a" password="dMkq"/}
【全平台】IDA Pro 9.3beta 泄露版+注册机 一个强大的反汇编程序、反编译器和多功能调试器
IDA Pro 版本：9.3.251224{card-describe title="简介"}交互式反汇编器专业版 (Interactive Disassembler Professional) 强大的反汇编工具，广泛用于逆向工程和安全分析{/card-describe}如果出现应用程序无法正常启动c0000142，试下安装最新的VC++可再发行运行时vc_redist.x64.exe{cloud title="IDA Pro" type="quark" url="https://pan.quark.cn/s/0c2ca4494d89" password="Zysy"/}
本工具是基于 GeWeChat 框架拓展的功能 通过监听 微信收款助手公众号 进行支付回调（目前仅测试了个码）使用教程：要求： 国内服务器 或 国内挂机宝 可连外网，挂机宝要求可以进行NAT转发 个人配置推荐2H2G起，项目官方是推荐的4H8G 可稳定运行Docker即可1.安装docker 服务器可直接在宝塔上安装 挂机宝使用win系统（同时也用来挂机） 安装docker桌面版2.拉取镜像（Linux版 win自测）docker pull registry.cn-hangzhou.aliyuncs.com/gewe/gewe:latestdocker tag registry.cn-hangzhou.aliyuncs.com/gewe/gewe gewe3.运行镜像（Linux版 win自测）mkdir -p /root/tempdocker run -itd -v /root/temp:/root/temp -p 2531:2531 -p 2532:2532 --privileged=true --name=gewe gewe /usr/sbin/init4.开放端口 2531，2532 （挂机宝这里进行NAT端口转发） 5.打开程序压缩包里的登录exe进行登录，首次登录后保存好获取到的 token 和 appid6.yml配置文件说明port: 8000 监听端口后续设置回调地址就是http://或https:// + 你的ip和这个端口 + /callback挂机宝自行转发自这个端口GeWeChat: api: 'http://xxxx:2531' GeWeChat的部署ip，有反代就改成域名 appid: 'xxxx' 登录后获取 token: 'xxxx' 登录后获取CodePay: api: 'https://ypay.yswl88.com' 码支付地址 userId: '这里填商户id' Keys: '这里填软件通讯密钥' channel_id: '这里填监控的微信通道id'7.启动mian.exe后去配置回调域名http://或https:// + 你的ip和端口 + /callback 有反代的直接填域名ipad协议登录第一天后会掉线一次 再次登录需要appid和token 记得保存好GeWeChat官方项目地址：官方地址聊天Q群：点我进入{cloud title="下载地址" type="lanzou" url="https://diyunnb.lanzoum.com/ij7AO2u89cpc" password=""/}
第一步：购买域名、服务器 将域名解析至服务器IP第二步：通过 SSH 连接服务器安装宝塔面板 这里宝塔官方提供了在线安装 -> https://www.bt.cn/new/download.html第三步：安装环境要求： PHP >= 8.0 MYSQL5.6(推荐) Nginx(最新)第四步：创建站点，数据库，上传网站源码至网站目录并解压缩第五步：至网站列表->点击网站->设置伪静态{callout color="#11d1df"}location / {if (!-e $request_filename){ rewrite ^(.*)$ /index.php?s=$1 last; break; }}{/callout}第六步：访问域名即可跳转安装页面{anote icon="fa-download" href="https://faka.wiki/download.php" target="_self" type="secondary" content="下载源码"/}
找到需要Sign请求的xhr请求在控制台搜索Sign，点击第一个，跳转到js文件, 分析一下从断点看出执行o(t.data)，而o = n(350).default是webpack的调用形式4.我们在控制台执行n,看看是什么5.双击代码控制台输出的代码跳过去，可以看到是执行的d6.将这里的全部js复制下来，在本地创建一个js文件粘贴进去7.在外边随便定义一个变量，比如 var sdk8.在d方法下边进行导出 {collapse}{collapse-item label="整理后JS:" open} var sdk; Window = global; !function(e) { function t(t) { for (var a, n, d = t[0], c = t[1], i = t[2], l = 0, b = []; l < d.length; l++) n = d[l], Object.prototype.hasOwnProperty.call(o, n) && o[n] && b.push(o[n][0]), o[n] = 0; for (a in c) Object.prototype.hasOwnProperty.call(c, a) && (e[a] = c[a]); for (u && u(t); b.length; ) b.shift()(); return f.push.apply(f, i || []), r() } function r() { for (var e, t = 0; t < f.length; t++) { for (var r = f[t], a = !0, n = 1; n < r.length; n++) { var c = r[n]; 0 !== o[c] && (a = !1) } a && (f.splice(t--, 1), e = d(d.s = r[0])) } return e } var a = {} , n = { 21: 0 } , o = { 21: 0 } , f = []; function d(t) { if (a[t]) return a[t].exports; var r = a[t] = { i: t, l: !1, exports: {} }; return e[t].call(r.exports, r, r.exports, d), r.l = !0, r.exports } sdk = d; d.e = function(e) { var t = []; n[e] ? t.push(n[e]) : 0 !== n[e] && { 1: 1, 3: 1, 4: 1, 5: 1, 6: 1, 7: 1, 8: 1, 9: 1, 10: 1, 11: 1, 12: 1, 13: 1, 14: 1, 15: 1, 16: 1, 17: 1, 18: 1, 19: 1, 20: 1, 22: 1, 23: 1, 24: 1, 25: 1, 26: 1 }[e] && t.push(n[e] = new Promise((function(t, r) { for (var a = "css/" + ({ 1: "common", 3: "album", 4: "albumDetail", 5: "album_mall", 6: "category", 7: "cmtpage", 8: "download_detail", 9: "index", 10: "msg_center", 11: "mv", 12: "mvList", 13: "mv_toplist", 14: "notfound", 15: "player", 16: "player_radio", 17: "playlist", 18: "playlist_edit", 19: "profile", 20: "radio", 22: "search", 23: "singer", 24: "singer_list", 25: "songDetail", 26: "toplist" }[e] || e) + "." + { 1: "092d215c4a601df90f9f", 3: "5cf0d69eaf29bcab23d2", 4: "798353db5b0eb05d5358", 5: "df4c243f917604263e58", 6: "20d532d798099a44bc88", 7: "e3bedf2b5810f8db0684", 8: "559f0a2e11f1f5800b13", 9: "2573d208d34ff3d682f0", 10: "020422608fe8bfb1719a", 11: "8bdb1df6c5436b790baa", 12: "47ce9300786df1b70584", 13: "4aee33230ba2d6b81dce", 14: "e6f63b0cf57dd029fbd6", 15: "1d2dbefbea113438324a", 16: "d893492de07ce97d8048", 17: "9484fde660fe93d9f9f0", 18: "67fb85e7f96455763c83", 19: "5e8c651e74b13244f7cf", 20: "3befd83c10b19893ec66", 22: "b2d11f89ea6a512a2302", 23: "c7a38353c5f4ebb47491", 24: "df0961952a2d3f022894", 25: "4c080567e394fd45608b", 26: "8edb142553f97482e00f" }[e] + ".chunk.css?max_age=2592000", o = d.p + a, f = document.getElementsByTagName("link"), c = 0; c < f.length; c++) { var i = (u = f[c]).getAttribute("data-href") || u.getAttribute("href"); if ("stylesheet" === u.rel && (i === a || i === o)) return t() } var l = document.getElementsByTagName("style"); for (c = 0; c < l.length; c++) { var u; if ((i = (u = l[c]).getAttribute("data-href")) === a || i === o) return t() } var b = document.createElement("link"); b.rel = "stylesheet", b.type = "text/css", b.onload = t, b.onerror = function(t) { var a = t && t.target && t.target.src || o , f = new Error("Loading CSS chunk " + e + " failed.\n(" + a + ")"); f.code = "CSS_CHUNK_LOAD_FAILED", f.request = a, delete n[e], b.parentNode.removeChild(b), r(f) } , b.href = o, 0 !== b.href.indexOf(window.location.origin + "/") && (b.crossOrigin = "anonymous"), document.getElementsByTagName("head")[0].appendChild(b) } )).then((function() { n[e] = 0 } ))); var r = o[e]; if (0 !== r) if (r) t.push(r[2]); else { var a = new Promise((function(t, a) { r = o[e] = [t, a] } )); t.push(r[2] = a); var f, c = document.createElement("script"); c.charset = "utf-8", c.timeout = 120, d.nc && c.setAttribute("nonce", d.nc), c.src = function(e) { return d.p + "js/" + ({ 1: "common", 3: "album", 4: "albumDetail", 5: "album_mall", 6: "category", 7: "cmtpage", 8: "download_detail", 9: "index", 10: "msg_center", 11: "mv", 12: "mvList", 13: "mv_toplist", 14: "notfound", 15: "player", 16: "player_radio", 17: "playlist", 18: "playlist_edit", 19: "profile", 20: "radio", 22: "search", 23: "singer", 24: "singer_list", 25: "songDetail", 26: "toplist" }[e] || e) + ".chunk." + { 1: "071ff4c93a36213b8e52", 3: "62fa0b6e13bdae5565df", 4: "ac1634a6cb1398f5f52f", 5: "c165da78f8e281d22b0f", 6: "8fbd80e377e3e8e81d2a", 7: "d1c1a21bc6d2234edcfd", 8: "094e227aa4af23758b7f", 9: "25deb3bc649fea321e4e", 10: "53237e74c6bc8294affc", 11: "1741b53500e75aa199dd", 12: "ece15e2e69d60159285f", 13: "8bbf72e90588993598fc", 14: "6eb4f1aeb6ba0b64b608", 15: "f4cd83bb066b3fae0a82", 16: "c48f9e6437253f47aedd", 17: "b02b0c36e514eacc9804", 18: "279d53770728d6d8071f", 19: "e1cbac4bc67bc66f7505", 20: "07641382e662e56a4bd9", 22: "2037125a09567d65d8ac", 23: "9e448e13e293aa03a267", 24: "fd0f2c1dd1b1dc00ce3e", 25: "d340acd4929cab481128", 26: "b759d290f5c1376e403c" }[e] + ".js?max_age=2592000" }(e), 0 !== c.src.indexOf(window.location.origin + "/") && (c.crossOrigin = "anonymous"); var i = new Error; f = function(t) { c.onerror = c.onload = null, clearTimeout(l); var r = o[e]; if (0 !== r) { if (r) { var a = t && ("load" === t.type ? "missing" : t.type) , n = t && t.target && t.target.src; i.message = "Loading chunk " + e + " failed.\n(" + a + ": " + n + ")", i.name = "ChunkLoadError", i.type = a, i.request = n, r[1](i) } o[e] = void 0 } } ; var l = setTimeout((function() { f({ type: "timeout", target: c }) } ), 12e4); c.onerror = c.onload = f, document.head.appendChild(c) } return Promise.all(t) } , d.m = e, d.c = a, d.d = function(e, t, r) { d.o(e, t) || Object.defineProperty(e, t, { enumerable: !0, get: r }) } , d.r = function(e) { "undefined" !== typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, { value: "Module" }), Object.defineProperty(e, "__esModule", { value: !0 }) } , d.t = function(e, t) { if (1 & t && (e = d(e)), 8 & t) return e; if (4 & t && "object" === typeof e && e && e.__esModule) return e; var r = Object.create(null); if (d.r(r), Object.defineProperty(r, "default", { enumerable: !0, value: e }), 2 & t && "string" != typeof e) for (var a in e) d.d(r, a, function(t) { return e[t] } .bind(null, a)); return r } , d.n = function(e) { var t = e && e.__esModule ? function() { return e.default } : function() { return e } ; return d.d(t, "a", t), t } , d.o = function(e, t) { return Object.prototype.hasOwnProperty.call(e, t) } , d.p = "/ryqq/", d.oe = function(e) { throw e } ; var c = [] , i = c.push.bind(c); c.push = t, c = c.slice(); for (var l = 0; l < c.length; l++) t(c[l]); var u = i; r() }({ 350:function(e, t, n) { "use strict"; n.r(t), function(e) { var n = "undefined" !== typeof e ? e : "undefined" !== typeof window ? window : "undefined" !== typeof self ? self : void 0 , r = function(e) { return e && "undefined" != typeof Symbol && e.constructor === Symbol ? "symbol" : typeof e }; (function() { var e = function(e, t, n) { for (var r = [], i = 0; i++ < t; ) r.push(e += n); return r } , t = function(e) { for (var t, n, r = String(e).replace(/[=]+$/, ""), i = r.length, a = 0, u = 0, s = []; u < i; u++) ~(n = o[r.charCodeAt(u)]) && (t = a % 4 ? 64 * t + n : n, a++ % 4) && s.push(255 & t >> (-2 * a & 6)); return s } , n = function(e) { return e >> 1 ^ -(1 & e) } , i = [] , o = e(0, 43, 0).concat([62, 0, 62, 0, 63]).concat(e(51, 10, 1)).concat(e(0, 8, 0)).concat(e(0, 25, 1)).concat([0, 0, 0, 0, 63, 0]).concat(e(25, 26, 1)) , a = function(e) { for (var r = [], i = new Int8Array(t(e)), o = i.length, a = 0; o > a; ) { var u = i[a++] , s = 127 & u; u >= 0 ? r.push(n(s)) : (s |= (127 & (u = i[a++])) << 7, u >= 0 || (s |= (127 & (u = i[a++])) << 14, u >= 0 || (s |= (127 & (u = i[a++])) << 21, u >= 0 || (s |= (u = i[a++]) << 28))), r.push(n(s))) } return r }; return function(e, t) { var n = a(e) , o = function(e, t, a, s, c) { return function l() { for (var f, p, d = [a, s, t, this, arguments, l, n, 0], h = void 0, g = e, v = []; ; ) try { for (; ; ) switch (n[++g]) { case 0: d[n[++g]] = new d[n[++g]](d[n[++g]]); break; case 1: return d[n[++g]]; case 2: for (f = [], p = n[++g]; p > 0; p--) f.push(d[n[++g]]); d[n[++g]] = u(g + n[++g], f, a, s, c); try { Object.defineProperty(d[n[g - 1]], "length", { value: n[++g], configurable: !0, writable: !1, enumerable: !1 }) } catch (m) {} break; case 3: d[n[++g]] = d[n[++g]] < d[n[++g]]; break; case 4: d[n[++g]] += String.fromCharCode(n[++g]), d[n[++g]] += String.fromCharCode(n[++g]), d[n[++g]] = d[n[++g]][d[n[++g]]]; break; case 5: d[n[++g]] = d[n[++g]] >= n[++g]; break; case 6: d[n[++g]] = d[n[++g]] >> n[++g], d[n[++g]] = d[n[++g]][d[n[++g]]]; break; case 7: d[n[++g]] = d[n[++g]] < n[++g]; break; case 8: d[n[++g]] = d[n[++g]].call(h); break; case 9: d[n[++g]] = "", d[n[++g]] += String.fromCharCode(n[++g]), d[n[++g]] = n[++g]; break; case 10: d[n[++g]] = d[n[++g]] | n[++g]; break; case 11: d[n[++g]] = d[n[++g]] & n[++g], d[n[++g]] = d[n[++g]][d[n[++g]]]; break; case 12: d[n[++g]] = {}; break; case 13: d[n[++g]] = d[n[++g]] | d[n[++g]], d[n[++g]][d[n[++g]]] = d[n[++g]], g += d[n[++g]] ? n[++g] : n[(++g, ++g)]; break; case 14: d[n[++g]] = h; break; case 15: d[n[++g]] = n[++g], d[n[++g]] = d[n[++g]][n[++g]], d[n[++g]] = n[++g]; break; case 16: d[n[++g]] = !0; break; case 17: d[n[++g]] = d[n[++g]] === d[n[++g]]; break; case 18: d[n[++g]] = d[n[++g]] / d[n[++g]]; break; case 19: d[n[++g]][d[n[++g]]] = d[n[++g]], d[n[++g]] = "", d[n[++g]] += String.fromCharCode(n[++g]); break; case 20: d[n[++g]][n[++g]] = d[n[++g]], d[n[++g]][n[++g]] = d[n[++g]], d[n[++g]][n[++g]] = d[n[++g]]; break; case 21: d[n[++g]] = d[n[++g]] * d[n[++g]]; break; case 22: d[n[++g]] = ++d[n[++g]], d[n[++g]] = d[n[++g]]; break; case 23: d[n[++g]] += String.fromCharCode(n[++g]), d[n[++g]] = d[n[++g]][d[n[++g]]], d[n[++g]] = d[n[++g]]; break; case 24: d[n[++g]] = d[n[++g]] << n[++g]; break; case 25: d[n[++g]] = r(d[n[++g]]); break; case 26: d[n[++g]] = d[n[++g]] | d[n[++g]]; break; case 27: d[n[++g]] = n[++g]; break; case 28: d[n[++g]] = d[n[++g]][n[++g]]; break; case 29: d[n[++g]] = n[++g], d[n[++g]][n[++g]] = d[n[++g]], d[n[++g]] = n[++g]; break; case 30: d[n[++g]] = d[n[++g]].call(h, d[n[++g]], d[n[++g]]); break; case 31: d[n[++g]] = n[++g], d[n[++g]] = n[++g], d[n[++g]] = n[++g]; break; case 32: d[n[++g]] = n[++g], d[n[++g]][d[n[++g]]] = d[n[++g]]; break; case 33: d[n[++g]] = d[n[++g]] === n[++g]; break; case 34: d[n[++g]] = d[n[++g]] + n[++g]; break; case 35: d[n[++g]] += String.fromCharCode(n[++g]); break; case 36: d[n[++g]] = "", d[n[++g]] += String.fromCharCode(n[++g]); break; case 37: d[n[++g]] = d[n[++g]][n[++g]], d[n[++g]] = d[n[++g]][n[++g]], d[n[++g]] = d[n[++g]][n[++g]]; break; case 38: d[n[++g]] = "", d[n[++g]] += String.fromCharCode(n[++g]), d[n[++g]] += String.fromCharCode(n[++g]); break; case 39: d[n[++g]] += String.fromCharCode(n[++g]), d[n[++g]] = d[n[++g]] === d[n[++g]], g += d[n[++g]] ? n[++g] : n[(++g, ++g)]; break; case 40: d[n[++g]] = d[n[++g]] > d[n[++g]]; break; case 41: d[n[++g]] = d[n[++g]] - d[n[++g]]; break; case 42: d[n[++g]] = d[n[++g]] << d[n[++g]]; break; case 43: d[n[++g]] = d[n[++g]] & d[n[++g]]; break; case 44: d[n[++g]] = d[n[++g]] & n[++g]; break; case 45: d[n[++g]] = -d[n[++g]]; break; case 46: for (f = [], p = n[++g]; p > 0; p--) f.push(d[n[++g]]); d[n[++g]] = o(g + n[++g], f, a, s, c); try { Object.defineProperty(d[n[g - 1]], "length", { value: n[++g], configurable: !0, writable: !1, enumerable: !1 }) } catch (y) {} break; case 47: g += d[n[++g]] ? n[++g] : n[(++g, ++g)]; break; case 48: d[n[++g]][n[++g]] = d[n[++g]]; break; case 49: d[n[++g]] = ~d[n[++g]]; break; case 50: d[n[++g]] = d[n[++g]].call(d[n[++g]]); break; case 51: d[n[++g]] = d[n[++g]] ^ d[n[++g]]; break; case 52: d[n[++g]] = ++d[n[++g]]; break; case 53: d[n[++g]] = !1; break; case 54: d[n[++g]] = d[n[++g]] >>> n[++g]; break; case 55: d[n[++g]][n[++g]] = d[n[++g]], d[n[++g]] = n[++g], d[n[++g]][n[++g]] = d[n[++g]]; break; case 56: d[n[++g]] = Array(n[++g]); break; case 57: d[n[++g]] += String.fromCharCode(n[++g]), d[n[++g]] += String.fromCharCode(n[++g]), d[n[++g]][n[++g]] = d[n[++g]]; break; case 58: d[n[++g]] = d[n[++g]] % d[n[++g]]; break; case 59: d[n[++g]] = d[n[++g]][d[n[++g]]], d[n[++g]] = d[n[++g]][n[++g]]; break; case 60: d[n[++g]] = d[n[++g]][n[++g]], d[n[++g]] = n[++g]; break; case 61: d[n[++g]] = d[n[++g]] - n[++g]; break; case 62: d[n[++g]] = d[n[++g]] + d[n[++g]]; break; case 63: d[n[++g]] = !d[n[++g]]; break; case 64: d[n[++g]][d[n[++g]]] = d[n[++g]]; break; case 65: for (d[n[++g]] += String.fromCharCode(n[++g]), f = [], p = n[++g]; p > 0; p--) f.push(d[n[++g]]); d[n[++g]] = o(g + n[++g], f, a, s, c); try { Object.defineProperty(d[n[g - 1]], "length", { value: n[++g], configurable: !0, writable: !1, enumerable: !1 }) } catch (A) {} d[n[++g]][d[n[++g]]] = d[n[++g]]; break; case 66: d[n[++g]] = d[n[++g]] - 0; break; case 67: d[n[++g]] = d[n[++g]].call(d[n[++g]], d[n[++g]]); break; case 68: d[n[++g]] = d[n[++g]][n[++g]], d[n[++g]] = d[n[++g]], d[n[++g]] = d[n[++g]] - 0; break; case 69: d[n[++g]] = d[n[++g]][d[n[++g]]], d[n[++g]] = d[n[++g]] + d[n[++g]]; break; case 70: d[n[++g]] = n[++g] + d[n[++g]]; break; case 71: d[n[++g]] = d[n[++g]] << d[n[++g]], d[n[++g]] = d[n[++g]] | d[n[++g]], d[n[++g]][d[n[++g]]] = d[n[++g]]; break; case 72: d[n[++g]] = d[n[++g]].call(d[n[++g]], d[n[++g]], d[n[++g]]); break; case 73: d[n[++g]] = d[n[++g]] >> n[++g]; break; case 74: d[n[++g]][d[n[++g]]] = d[n[++g]], d[n[++g]][d[n[++g]]] = d[n[++g]], d[n[++g]][d[n[++g]]] = d[n[++g]]; break; case 75: d[n[++g]] = n[++g], d[n[++g]][n[++g]] = d[n[++g]], g += d[n[++g]] ? n[++g] : n[(++g, ++g)]; break; case 76: d[n[++g]] = d[n[++g]].call(h, d[n[++g]]); break; case 77: d[n[++g]] = d[n[++g]]; break; case 78: d[n[++g]] = d[n[++g]][d[n[++g]]]; break; case 79: d[n[++g]] = d[n[++g]][n[++g]], d[n[++g]] = d[n[++g]] >> n[++g], d[n[++g]] = d[n[++g]] & n[++g]; break; case 80: d[n[++g]] = ""; break; case 81: d[n[++g]] += String.fromCharCode(n[++g]), d[n[++g]] += String.fromCharCode(n[++g]), d[n[++g]] += String.fromCharCode(n[++g]); break; case 82: d[n[++g]] += String.fromCharCode(n[++g]), d[n[++g]] = d[n[++g]][d[n[++g]]], g += d[n[++g]] ? n[++g] : n[(++g, ++g)] } } catch (b) { if (v.length > 0 && (i = []), i.push(g), 0 === v.length) throw c ? c(b, d, i) : b; g = v.pop(), i.pop() } } } , u = function(e, t, a, s, c) { return function l() { for (var f, p, d = [a, s, t, this, arguments, l, n, 0], h = void 0, g = e, v = []; ; ) try { for (; ; ) switch (n[++g]) { case 0: d[n[++g]] = new d[n[++g]](d[n[++g]]); break; case 1: return d[n[++g]]; case 2: for (f = [], p = n[++g]; p > 0; p--) f.push(d[n[++g]]); d[n[++g]] = u(g + n[++g], f, a, s, c); try { Object.defineProperty(d[n[g - 1]], "length", { value: n[++g], configurable: !0, writable: !1, enumerable: !1 }) } catch (m) {} break; case 3: d[n[++g]] = d[n[++g]] < d[n[++g]]; break; case 4: d[n[++g]] += String.fromCharCode(n[++g]), d[n[++g]] += String.fromCharCode(n[++g]), d[n[++g]] = d[n[++g]][d[n[++g]]]; break; case 5: d[n[++g]] = d[n[++g]] >= n[++g]; break; case 6: d[n[++g]] = d[n[++g]] >> n[++g], d[n[++g]] = d[n[++g]][d[n[++g]]]; break; case 7: d[n[++g]] = d[n[++g]] < n[++g]; break; case 8: d[n[++g]] = d[n[++g]].call(h); break; case 9: d[n[++g]] = "", d[n[++g]] += String.fromCharCode(n[++g]), d[n[++g]] = n[++g]; break; case 10: d[n[++g]] = d[n[++g]] | n[++g]; break; case 11: d[n[++g]] = d[n[++g]] & n[++g], d[n[++g]] = d[n[++g]][d[n[++g]]]; break; case 12: d[n[++g]] = {}; break; case 13: d[n[++g]] = d[n[++g]] | d[n[++g]], d[n[++g]][d[n[++g]]] = d[n[++g]], g += d[n[++g]] ? n[++g] : n[(++g, ++g)]; break; case 14: d[n[++g]] = h; break; case 15: d[n[++g]] = n[++g], d[n[++g]] = d[n[++g]][n[++g]], d[n[++g]] = n[++g]; break; case 16: d[n[++g]] = !0; break; case 17: d[n[++g]] = d[n[++g]] === d[n[++g]]; break; case 18: d[n[++g]] = d[n[++g]] / d[n[++g]]; break; case 19: d[n[++g]][d[n[++g]]] = d[n[++g]], d[n[++g]] = "", d[n[++g]] += String.fromCharCode(n[++g]); break; case 20: d[n[++g]][n[++g]] = d[n[++g]], d[n[++g]][n[++g]] = d[n[++g]], d[n[++g]][n[++g]] = d[n[++g]]; break; case 21: d[n[++g]] = d[n[++g]] * d[n[++g]]; break; case 22: d[n[++g]] = ++d[n[++g]], d[n[++g]] = d[n[++g]]; break; case 23: d[n[++g]] += String.fromCharCode(n[++g]), d[n[++g]] = d[n[++g]][d[n[++g]]], d[n[++g]] = d[n[++g]]; break; case 24: d[n[++g]] = d[n[++g]] << n[++g]; break; case 25: d[n[++g]] = r(d[n[++g]]); break; case 26: d[n[++g]] = d[n[++g]] | d[n[++g]]; break; case 27: d[n[++g]] = n[++g]; break; case 28: d[n[++g]] = d[n[++g]][n[++g]]; break; case 29: d[n[++g]] = n[++g], d[n[++g]][n[++g]] = d[n[++g]], d[n[++g]] = n[++g]; break; case 30: d[n[++g]] = d[n[++g]].call(h, d[n[++g]], d[n[++g]]); break; case 31: d[n[++g]] = n[++g], d[n[++g]] = n[++g], d[n[++g]] = n[++g]; break; case 32: d[n[++g]] = n[++g], d[n[++g]][d[n[++g]]] = d[n[++g]]; break; case 33: d[n[++g]] = d[n[++g]] === n[++g]; break; case 34: d[n[++g]] = d[n[++g]] + n[++g]; break; case 35: d[n[++g]] += String.fromCharCode(n[++g]); break; case 36: d[n[++g]] = "", d[n[++g]] += String.fromCharCode(n[++g]); break; case 37: d[n[++g]] = d[n[++g]][n[++g]], d[n[++g]] = d[n[++g]][n[++g]], d[n[++g]] = d[n[++g]][n[++g]]; break; case 38: d[n[++g]] = "", d[n[++g]] += String.fromCharCode(n[++g]), d[n[++g]] += String.fromCharCode(n[++g]); break; case 39: d[n[++g]] += String.fromCharCode(n[++g]), d[n[++g]] = d[n[++g]] === d[n[++g]], g += d[n[++g]] ? n[++g] : n[(++g, ++g)]; break; case 40: d[n[++g]] = d[n[++g]] > d[n[++g]]; break; case 41: d[n[++g]] = d[n[++g]] - d[n[++g]]; break; case 42: d[n[++g]] = d[n[++g]] << d[n[++g]]; break; case 43: d[n[++g]] = d[n[++g]] & d[n[++g]]; break; case 44: d[n[++g]] = d[n[++g]] & n[++g]; break; case 45: d[n[++g]] = -d[n[++g]]; break; case 46: for (f = [], p = n[++g]; p > 0; p--) f.push(d[n[++g]]); d[n[++g]] = o(g + n[++g], f, a, s, c); try { Object.defineProperty(d[n[g - 1]], "length", { value: n[++g], configurable: !0, writable: !1, enumerable: !1 }) } catch (y) {} break; case 47: g += d[n[++g]] ? n[++g] : n[(++g, ++g)]; break; case 48: d[n[++g]][n[++g]] = d[n[++g]]; break; case 49: d[n[++g]] = ~d[n[++g]]; break; case 50: d[n[++g]] = d[n[++g]].call(d[n[++g]]); break; case 51: d[n[++g]] = d[n[++g]] ^ d[n[++g]]; break; case 52: d[n[++g]] = ++d[n[++g]]; break; case 53: d[n[++g]] = !1; break; case 54: d[n[++g]] = d[n[++g]] >>> n[++g]; break; case 55: d[n[++g]][n[++g]] = d[n[++g]], d[n[++g]] = n[++g], d[n[++g]][n[++g]] = d[n[++g]]; break; case 56: d[n[++g]] = Array(n[++g]); break; case 57: d[n[++g]] += String.fromCharCode(n[++g]), d[n[++g]] += String.fromCharCode(n[++g]), d[n[++g]][n[++g]] = d[n[++g]]; break; case 58: d[n[++g]] = d[n[++g]] % d[n[++g]]; break; case 59: d[n[++g]] = d[n[++g]][d[n[++g]]], d[n[++g]] = d[n[++g]][n[++g]]; break; case 60: d[n[++g]] = d[n[++g]][n[++g]], d[n[++g]] = n[++g]; break; case 61: d[n[++g]] = d[n[++g]] - n[++g]; break; case 62: d[n[++g]] = d[n[++g]] + d[n[++g]]; break; case 63: d[n[++g]] = !d[n[++g]]; break; case 64: d[n[++g]][d[n[++g]]] = d[n[++g]]; break; case 65: for (d[n[++g]] += String.fromCharCode(n[++g]), f = [], p = n[++g]; p > 0; p--) f.push(d[n[++g]]); d[n[++g]] = o(g + n[++g], f, a, s, c); try { Object.defineProperty(d[n[g - 1]], "length", { value: n[++g], configurable: !0, writable: !1, enumerable: !1 }) } catch (A) {} d[n[++g]][d[n[++g]]] = d[n[++g]]; break; case 66: d[n[++g]] = d[n[++g]] - 0; break; case 67: d[n[++g]] = d[n[++g]].call(d[n[++g]], d[n[++g]]); break; case 68: d[n[++g]] = d[n[++g]][n[++g]], d[n[++g]] = d[n[++g]], d[n[++g]] = d[n[++g]] - 0; break; case 69: d[n[++g]] = d[n[++g]][d[n[++g]]], d[n[++g]] = d[n[++g]] + d[n[++g]]; break; case 70: d[n[++g]] = n[++g] + d[n[++g]]; break; case 71: d[n[++g]] = d[n[++g]] << d[n[++g]], d[n[++g]] = d[n[++g]] | d[n[++g]], d[n[++g]][d[n[++g]]] = d[n[++g]]; break; case 72: d[n[++g]] = d[n[++g]].call(d[n[++g]], d[n[++g]], d[n[++g]]); break; case 73: d[n[++g]] = d[n[++g]] >> n[++g]; break; case 74: d[n[++g]][d[n[++g]]] = d[n[++g]], d[n[++g]][d[n[++g]]] = d[n[++g]], d[n[++g]][d[n[++g]]] = d[n[++g]]; break; case 75: d[n[++g]] = n[++g], d[n[++g]][n[++g]] = d[n[++g]], g += d[n[++g]] ? n[++g] : n[(++g, ++g)]; break; case 76: d[n[++g]] = d[n[++g]].call(h, d[n[++g]]); break; case 77: d[n[++g]] = d[n[++g]]; break; case 78: d[n[++g]] = d[n[++g]][d[n[++g]]]; break; case 79: d[n[++g]] = d[n[++g]][n[++g]], d[n[++g]] = d[n[++g]] >> n[++g], d[n[++g]] = d[n[++g]] & n[++g]; break; case 80: d[n[++g]] = ""; break; case 81: d[n[++g]] += String.fromCharCode(n[++g]), d[n[++g]] += String.fromCharCode(n[++g]), d[n[++g]] += String.fromCharCode(n[++g]); break; case 82: d[n[++g]] += String.fromCharCode(n[++g]), d[n[++g]] = d[n[++g]][d[n[++g]]], g += d[n[++g]] ? n[++g] : n[(++g, ++g)] } } catch (b) { if (v.length > 0 && (i = []), i.push(g), 0 === v.length) throw c ? c(b, d, i) : b; g = v.pop(), i.pop() } } }; return t ? o : u } } )()("[binary]", !1)(3944, [], n, [void 0, 1732584193, 4023233417, 2562383102, 3285377520, !1, !0, 2147483648, 4294967295, 4294967296, 1518500249, 1859775393, 1894007588], void 0)(); var i = n._getSecuritySign; delete n._getSecuritySign, t.default = i } .call(this, n(80)) }, 80:function(e, t) { var n; n = function() { return this }(); try { n = n || new Function("return this")() } catch (r) { "object" === typeof window && (n = window) } e.exports = n } }); // var data = '{"comm":{"cv":4747474,"ct":24,"format":"json","inCharset":"utf-8","outCharset":"utf-8","notice":0,"platform":"yqq.json","needNewCode":1,"uin":,"g_tk_new_20200303":1333093622,"g_tk":1333093622},"req_1":{"module":"userInfo.VipQueryServer","method":"SRFVipQuery_V2","param":{"uin_list":[""]}},"req_2":{"module":"userInfo.BaseUserInfoServer","method":"get_user_baseinfo_v2","param":{"vec_uin":[""]}},"req_3":{"module":"music.lvz.VipIconUiShowSvr","method":"GetVipIconUiV2","param":{"PID":3}},"req_4":{"module":"music.musicasset.SongFavRead","method":"IsSongFanByMid","param":{"v_songMid":["000U6tvD2S1FzG"]}},"req_5":{"module":"music.musichallSong.PlayLyricInfo","method":"GetPlayLyricInfo","param":{"songMID":"000U6tvD2S1FzG","songID":478533903}},"req_6":{"method":"GetCommentCount","module":"music.globalComment.GlobalCommentRead","param":{"request_list":[{"biz_type":1,"biz_id":"478533903","biz_sub_type":0}]}},"req_7":{"module":"music.musichallAlbum.AlbumInfoServer","method":"GetAlbumDetail","param":{"albumMid":"004dGOE71b7gWt"}},"req_8":{"module":"music.vkey.GetEVkey","method":"GetUrl","param":{"guid":"5967566778","songmid":["000U6tvD2S1FzG"],"songtype":[0],"uin":"","loginflag":1,"platform":"20","xcdn":1,"qdesc":"lq96kOgg"}}}' function get_Sign(data) { return sdk(350).default(data) }{/collapse-item}{/collapse}以上是QQ音乐的Sign算法，但还不能拿来用，差一步补环境，可以自己网上搜索教程，也可以进群拿完整版{hide}QQ群：949231972{/hide}
如果您看到这篇文章,表示您的 blog 已经安装成功.