逆向案例二十八——某高考志愿网异步请求头参数加密,以及webpack
网址:aHR0cDovL3d3dy54aW5nYW9rYW90Yi5jb20vY29sbGVnZXMvc2VhcmNo
抓包分析,发现请求头有参数u-sign是加密的,载荷没有进行加密,直接跟栈分析。
进入第二个栈,打上断点,分析有没有加密位置。
可以看到参数已经进行加密了
往上跟栈,找到异步位置,打上断点,发现参数没了,这说明加密在异步的函数中
直接进入t的第一个函数,一下子就找到了加密位置,打上断点,发现就是这里加密,加密函数是o
进入o函数里面去看看,打上断点,发现最后的n就是加密位置。
复制下来,写好函数,n没有定义,直接去找n
不要直接进入n函数去复制,会有很多模块,累死人也搞不定。也不要猜测是MD5,我试过了不对的。 往上看看,有新发现。原来是一个webpack。
打上断点,进入加载器r,先全部复制下来。
导出加载器,补环境,现在就去找函数模块了。
缺少什么模块,就去找什么函数模块,添加模块
最终结果:
现在我们有了u-sign,可以带着请求头去访问数据了。
爬取结果:
完整python代码如下。
import requests
import json
import execjs
for page in range(1,21):data = {"keyword": "","provinceNames": [],"natureTypes": [],"eduLevel": "","categories": [],"features": [],"pageIndex": page,"pageSize": 20,"sort": 11}e = '/youzy.dms.basiclib.api.college.query'js_code = execjs.compile(open('中国大学生志愿网逆向.js','r',encoding='utf-8').read())u_sign = js_code.call('get_sign',e,data)url = 'https://uwf7de983aad7a717eb.youzy.cn/youzy.dms.basiclib.api.college.query'headers = {"Accept": "*/*","Accept-Language": "zh-CN,zh;q=0.9","Cache-Control": "no-cache","Connection": "keep-alive","Content-Type": "application/json","Origin": "http://pv4y-pc.youzy.cn","Pragma": "no-cache","Referer": "http://pv4y-pc.youzy.cn/","Sec-Fetch-Dest": "empty","Sec-Fetch-Mode": "cors","Sec-Fetch-Site": "cross-site","User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36","sec-ch-ua-mobile": "?0","u-sign": u_sign,}data = json.dumps(data, separators=(',', ':'))# 发送GET请求response = requests.post(url, headers=headers, data=data).json()print(f'正在爬取第{page}页数据')for item in response['result']['items']:print(item)
完整js代码:
window=global;
navigator={};
var yangxin;
!function(e) {function n(n) {for (var t, o, r = n[0], i = n[1], a = n[2], d = 0, h = []; d < r.length; d++)o = r[d],u[o] && h.push(u[o][0]),u[o] = 0;for (t in i)Object.prototype.hasOwnProperty.call(i, t) && (e[t] = i[t]);for (s && s(n); h.length; )h.shift()();return l.push.apply(l, a || []),c()}function c() {for (var e, n = 0; n < l.length; n++) {for (var c = l[n], t = !0, o = 1; o < c.length; o++) {var i = c[o];0 !== u[i] && (t = !1)}t && (l.splice(n--, 1),e = r(r.s = c[0]))}return e}var t = {}, o = {colleges: 0}, u = {colleges: 0}, l = [];function r(n) {console.log(n)if (t[n])return t[n].exports;var c = t[n] = {i: n,l: !1,exports: {}};return e[n].call(c.exports, c, c.exports, r),c.l = !0,c.exports}yangxin = rr.e = function(e) {var n = [];o[e] ? n.push(o[e]) : 0 !== o[e] && {"chunk-35866964": 1,"chunk-2360ff8e": 1,"chunk-38859794": 1,"chunk-3c11c494": 1,"chunk-549e1a9c": 1,"chunk-7935269e": 1,"chunk-419eda10": 1,"chunk-464dda61": 1,"chunk-6cafc15a": 1,"chunk-71d9e258": 1,"chunk-7f496c16": 1,"chunk-bb50558a": 1,"chunk-efd8109e": 1,"chunk-4eb7095a": 1,"chunk-52ca585a": 1,"chunk-5c99f7cd": 1,"chunk-9a15c92e": 1,"chunk-6b41533f": 1,"chunk-64568e68": 1}[e] && n.push(o[e] = new Promise((function(n, c) {for (var t = "static/css/" + ({}[e] || e) + "." + {"chunk-2d0c2339": "31d6cfe0","chunk-2d21d0c2": "31d6cfe0","chunk-35866964": "4c0b4922","chunk-2360ff8e": "229fbfea","chunk-38859794": "37dd7c64","chunk-3c11c494": "d5d496a0","chunk-549e1a9c": "03ef9d40","chunk-7935269e": "862057d8","chunk-419eda10": "1fb6f521","chunk-464dda61": "cfd2c688","chunk-6cafc15a": "4d3173ef","chunk-71d9e258": "7a300765","chunk-7f496c16": "b458d8e8","chunk-bb50558a": "473d5668","chunk-efd8109e": "2a141185","chunk-4eb7095a": "11cb1ac7","chunk-52ca585a": "aea92b8f","chunk-5c99f7cd": "b32dcf4f","chunk-9a15c92e": "f6c185b7","chunk-6b41533f": "3ce3c01f","chunk-64568e68": "8df6b4dd"}[e] + ".css", u = r.p + t, l = document.getElementsByTagName("link"), i = 0; i < l.length; i++) {var a = l[i], d = a.getAttribute("data-href") || a.getAttribute("href");if ("stylesheet" === a.rel && (d === t || d === u))return n()}var s = document.getElementsByTagName("style");for (i = 0; i < s.length; i++)if ((d = (a = s[i]).getAttribute("data-href")) === t || d === u)return n();var h = document.createElement("link");h.rel = "stylesheet",h.type = "text/css",h.onload = n,h.onerror = function(n) {var t = n && n.target && n.target.src || u, l = new Error("Loading CSS chunk " + e + " failed.\n(" + t + ")");l.code = "CSS_CHUNK_LOAD_FAILED",l.request = t,delete o[e],h.parentNode.removeChild(h),c(l)},h.href = u,document.getElementsByTagName("head")[0].appendChild(h)})).then((function() {o[e] = 0})));var c = u[e];if (0 !== c)if (c)n.push(c[2]);else {var t = new Promise((function(n, t) {c = u[e] = [n, t]}));n.push(c[2] = t);var l, i = document.createElement("script");i.charset = "utf-8",i.timeout = 120,r.nc && i.setAttribute("nonce", r.nc),i.src = function(e) {return r.p + "static/js/" + ({}[e] || e) + "." + {"chunk-2d0c2339": "df908623","chunk-2d21d0c2": "f10b1931","chunk-35866964": "302e2bfb","chunk-2360ff8e": "9743b626","chunk-38859794": "66283e5c","chunk-3c11c494": "4826745b","chunk-549e1a9c": "3d088ca7","chunk-7935269e": "d85f859e","chunk-419eda10": "42b68507","chunk-464dda61": "5940abb1","chunk-6cafc15a": "0212a01a","chunk-71d9e258": "f1eb98b7","chunk-7f496c16": "a88f156b","chunk-bb50558a": "0e61f5a1","chunk-efd8109e": "85fc6c16","chunk-4eb7095a": "1883497a","chunk-52ca585a": "58c51b53","chunk-5c99f7cd": "3bc3dfbc","chunk-9a15c92e": "8d6ff628","chunk-6b41533f": "9c170679","chunk-64568e68": "dd10ee97"}[e] + ".js"}(e),l = function(n) {i.onerror = i.onload = null,clearTimeout(a);var c = u[e];if (0 !== c) {if (c) {var t = n && ("load" === n.type ? "missing" : n.type), o = n && n.target && n.target.src, l = new Error("Loading chunk " + e + " failed.\n(" + t + ": " + o + ")");l.type = t,l.request = o,c[1](l)}u[e] = void 0}};var a = setTimeout((function() {l({type: "timeout",target: i})}), 12e4);i.onerror = i.onload = l,document.head.appendChild(i)}return Promise.all(n)},r.m = e,r.c = t,r.d = function(e, n, c) {r.o(e, n) || Object.defineProperty(e, n, {enumerable: !0,get: c})},r.r = function(e) {"undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, {value: "Module"}),Object.defineProperty(e, "__esModule", {value: !0})},r.t = function(e, n) {if (1 & n && (e = r(e)),8 & n)return e;if (4 & n && "object" == typeof e && e && e.__esModule)return e;var c = Object.create(null);if (r.r(c),Object.defineProperty(c, "default", {enumerable: !0,value: e}),2 & n && "string" != typeof e)for (var t in e)r.d(c, t, function(n) {return e[n]}.bind(null, t));return c},r.n = function(e) {var n = e && e.__esModule ? function() {return e.default}: function() {return e};return r.d(n, "a", n),n},r.o = function(e, n) {return Object.prototype.hasOwnProperty.call(e, n)},r.p = "/",r.oe = function(e) {throw e};var i = window.webpackJsonp = window.webpackJsonp || [], a = i.push.bind(i);i.push = n,i = i.slice();for (var d = 0; d < i.length; d++)n(i[d]);var s = a;l.push([12, "chunk-commons"]),c()
}({12: function(e, n, c) {e.exports = c("9a94")},5880: function(e, n) {e.exports = Vuex},"60bb": function(e, n) {e.exports = _},"9a94": function(e, n, c) {"use strict";c.r(n),c("e260"),c("e6cf"),c("cca6"),c("a79d"),c("d3b7"),c("3ca3"),c("ddb0");var t = c("c1f7");Vue.use(VueRouter);var o = new Vue, u = [{path: "/careers",component: t.a,children: [{path: "/colleges/search",component: function() {return Promise.all([c.e("chunk-5c99f7cd"), c.e("chunk-9a15c92e"), c.e("chunk-6b41533f")]).then(c.bind(null, "95fc"))},name: "CollegesSearch",meta: {title: "院校库",icon: ""}}, {path: "/colleges/detail",name: "CollegesDetail",component: function() {return Promise.all([c.e("chunk-2d21d0c2"), c.e("chunk-35866964"), c.e("chunk-6cafc15a")]).then(c.bind(null, "2e68"))},beforeEnter: function(e, n, c) {!e.query.collegeCode && e.query.cid ? o.api.sdk.dms.basiclib.colleges.bynumidGet(e.query.cid).then((function(n) {e.query.collegeCode = n.result.code,c()})) : c()},meta: {title: "院校详情"}}, {path: "/colleges/liveList",name: "CollegesLiveList",component: function() {return Promise.all([c.e("chunk-2d21d0c2"), c.e("chunk-35866964"), c.e("chunk-efd8109e")]).then(c.bind(null, "6e40"))},beforeEnter: function(e, n, c) {!e.query.collegeCode && e.query.cid ? o.api.sdk.dms.basiclib.colleges.bynumidGet(e.query.cid).then((function(n) {e.query.collegeCode = n.result.code,c()})) : c()},meta: {title: "院校直播页"}}, {path: "/colleges/scoreline",name: "CollegesScoreline",component: function() {return Promise.all([c.e("chunk-2d21d0c2"), c.e("chunk-35866964"), c.e("chunk-3c11c494"), c.e("chunk-7935269e")]).then(c.bind(null, "0be3"))},beforeEnter: function(e, n, c) {!e.query.collegeCode && e.query.cid ? o.api.sdk.dms.basiclib.colleges.bynumidGet(e.query.cid).then((function(n) {e.query.collegeCode = n.result.code,c()})) : c()},meta: {title: "分数线"}}, {path: "/colleges/plan",name: "CollegesScoreline",component: function() {return Promise.all([c.e("chunk-2d21d0c2"), c.e("chunk-35866964"), c.e("chunk-3c11c494"), c.e("chunk-549e1a9c")]).then(c.bind(null, "4078"))},beforeEnter: function(e, n, c) {!e.query.collegeCode && e.query.cid ? o.api.sdk.dms.basiclib.colleges.bynumidGet(e.query.cid).then((function(n) {e.query.collegeCode = n.result.code,c()})) : c()},meta: {title: "招生计划"}}, {path: "/colleges/introduction",name: "CollegesIntroduction",component: function() {return Promise.all([c.e("chunk-2d21d0c2"), c.e("chunk-35866964"), c.e("chunk-7f496c16")]).then(c.bind(null, "9c24"))},beforeEnter: function(e, n, c) {!e.query.collegeCode && e.query.cid ? o.api.sdk.dms.basiclib.colleges.bynumidGet(e.query.cid).then((function(n) {e.query.collegeCode = n.result.code,c()})) : c()},meta: {title: "院校介绍"}}, {path: "/colleges/admissions-guide/list",name: "CollegesNewsList",component: function() {return Promise.all([c.e("chunk-2d21d0c2"), c.e("chunk-35866964"), c.e("chunk-2360ff8e")]).then(c.bind(null, "4a63"))},beforeEnter: function(e, n, c) {!e.query.collegeCode && e.query.cid ? o.api.sdk.dms.basiclib.colleges.bynumidGet(e.query.cid).then((function(n) {e.query.collegeCode = n.result.code,c()})) : c()},meta: {title: "招生简章"}}, {path: "/colleges/admissions-guide/detail",name: "CollegesNewsDetail",component: function() {return Promise.all([c.e("chunk-2d21d0c2"), c.e("chunk-35866964"), c.e("chunk-419eda10")]).then(c.bind(null, "ceb6"))},beforeEnter: function(e, n, c) {!e.query.collegeCode && e.query.cid ? o.api.sdk.dms.basiclib.colleges.bynumidGet(e.query.cid).then((function(n) {e.query.collegeCode = n.result.code,c()})) : c()},meta: {title: "招生简章"}}, {path: "/colleges/employmentreport/list",name: "CollegesEmploymentreportList",component: function() {return Promise.all([c.e("chunk-2d21d0c2"), c.e("chunk-35866964"), c.e("chunk-38859794")]).then(c.bind(null, "0bfa"))},beforeEnter: function(e, n, c) {c(),!e.query.collegeCode && e.query.cid ? o.api.sdk.dms.basiclib.colleges.bynumidGet(e.query.cid).then((function(n) {e.query.collegeCode = n.result.code,c()})) : c()},meta: {title: "就业报告"}}, {path: "/colleges/compare",name: "CollegesCompare",component: function() {return c.e("chunk-52ca585a").then(c.bind(null, "fd28"))},meta: {title: "院校对比"}}, {path: "/colleges/image-list",name: "CollegesImageList",component: function() {return Promise.all([c.e("chunk-2d21d0c2"), c.e("chunk-35866964"), c.e("chunk-464dda61")]).then(c.bind(null, "5ff8"))},beforeEnter: function(e, n, c) {!e.query.collegeCode && e.query.cid ? o.api.sdk.dms.basiclib.colleges.bynumidGet(e.query.cid).then((function(n) {e.query.collegeCode = n.result.code,c()})) : c()},meta: {title: "院校风采"}}, {path: "/colleges/vr",name: "CollegesVR",component: function() {return c.e("chunk-2d0c2339").then(c.bind(null, "48fe"))},beforeEnter: function(e, n, c) {!e.query.collegeCode && e.query.cid ? o.api.sdk.dms.basiclib.colleges.bynumidGet(e.query.cid).then((function(n) {e.query.collegeCode = n.result.code,c()})) : c()},meta: {title: "院校VR"}}, {path: "/colleges/preFraction",name: "CollegesPreFraction",component: function() {return Promise.all([c.e("chunk-2d21d0c2"), c.e("chunk-35866964"), c.e("chunk-bb50558a")]).then(c.bind(null, "baae"))},beforeEnter: function(e, n, c) {!e.query.collegeCode && e.query.cid ? o.api.sdk.dms.basiclib.colleges.bynumidGet(e.query.cid).then((function(n) {e.query.collegeCode = n.result.code,c()})) : c()},meta: {title: "提前批招生计划"}}, {path: "/colleges/preFractionScoreline",name: "CollegesPreFractionScoreline",component: function() {return Promise.all([c.e("chunk-2d21d0c2"), c.e("chunk-35866964"), c.e("chunk-71d9e258")]).then(c.bind(null, "ca37"))},beforeEnter: function(e, n, c) {!e.query.collegeCode && e.query.cid ? o.api.sdk.dms.basiclib.colleges.bynumidGet(e.query.cid).then((function(n) {e.query.collegeCode = n.result.code,c()})) : c()},meta: {title: "提前批分数线"}}, {path: "/colleges/compare/probability",name: "CollegesCompareProbability",component: function() {return c.e("chunk-4eb7095a").then(c.bind(null, "5179"))},meta: {title: "院校录取概率"}}, {path: "/colleges/compare/score-line",name: "CollegesCompareScoreLine",component: function() {return c.e("chunk-64568e68").then(c.bind(null, "31fa"))},meta: {title: "院校分数线"}}]}], l = new VueRouter({mode: "history",scrollBehavior: function() {return {y: 0}},routes: u}), r = c("cf68");Object(r.a)(l, Vue)},6821: function(e, t, r) {!function() {var t = r("00d8"), n = r("9a63").utf8, i = r("8349"), o = r("9a63").bin, a = function(e, r) {e.constructor == String ? e = r && "binary" === r.encoding ? o.stringToBytes(e) : n.stringToBytes(e) : i(e) ? e = Array.prototype.slice.call(e, 0) : Array.isArray(e) || e.constructor === Uint8Array || (e = e.toString());for (var s = t.bytesToWords(e), u = 8 * e.length, c = 1732584193, f = -271733879, d = -1732584194, l = 271733878, h = 0; h < s.length; h++)s[h] = 16711935 & (s[h] << 8 | s[h] >>> 24) | 4278255360 & (s[h] << 24 | s[h] >>> 8);s[u >>> 5] |= 128 << u % 32,s[14 + (u + 64 >>> 9 << 4)] = u;var p = a._ff, b = a._gg, y = a._hh, m = a._ii;for (h = 0; h < s.length; h += 16) {var g = c, v = f, _ = d, w = l;c = p(c, f, d, l, s[h + 0], 7, -680876936),l = p(l, c, f, d, s[h + 1], 12, -389564586),d = p(d, l, c, f, s[h + 2], 17, 606105819),f = p(f, d, l, c, s[h + 3], 22, -1044525330),c = p(c, f, d, l, s[h + 4], 7, -176418897),l = p(l, c, f, d, s[h + 5], 12, 1200080426),d = p(d, l, c, f, s[h + 6], 17, -1473231341),f = p(f, d, l, c, s[h + 7], 22, -45705983),c = p(c, f, d, l, s[h + 8], 7, 1770035416),l = p(l, c, f, d, s[h + 9], 12, -1958414417),d = p(d, l, c, f, s[h + 10], 17, -42063),f = p(f, d, l, c, s[h + 11], 22, -1990404162),c = p(c, f, d, l, s[h + 12], 7, 1804603682),l = p(l, c, f, d, s[h + 13], 12, -40341101),d = p(d, l, c, f, s[h + 14], 17, -1502002290),c = b(c, f = p(f, d, l, c, s[h + 15], 22, 1236535329), d, l, s[h + 1], 5, -165796510),l = b(l, c, f, d, s[h + 6], 9, -1069501632),d = b(d, l, c, f, s[h + 11], 14, 643717713),f = b(f, d, l, c, s[h + 0], 20, -373897302),c = b(c, f, d, l, s[h + 5], 5, -701558691),l = b(l, c, f, d, s[h + 10], 9, 38016083),d = b(d, l, c, f, s[h + 15], 14, -660478335),f = b(f, d, l, c, s[h + 4], 20, -405537848),c = b(c, f, d, l, s[h + 9], 5, 568446438),l = b(l, c, f, d, s[h + 14], 9, -1019803690),d = b(d, l, c, f, s[h + 3], 14, -187363961),f = b(f, d, l, c, s[h + 8], 20, 1163531501),c = b(c, f, d, l, s[h + 13], 5, -1444681467),l = b(l, c, f, d, s[h + 2], 9, -51403784),d = b(d, l, c, f, s[h + 7], 14, 1735328473),c = y(c, f = b(f, d, l, c, s[h + 12], 20, -1926607734), d, l, s[h + 5], 4, -378558),l = y(l, c, f, d, s[h + 8], 11, -2022574463),d = y(d, l, c, f, s[h + 11], 16, 1839030562),f = y(f, d, l, c, s[h + 14], 23, -35309556),c = y(c, f, d, l, s[h + 1], 4, -1530992060),l = y(l, c, f, d, s[h + 4], 11, 1272893353),d = y(d, l, c, f, s[h + 7], 16, -155497632),f = y(f, d, l, c, s[h + 10], 23, -1094730640),c = y(c, f, d, l, s[h + 13], 4, 681279174),l = y(l, c, f, d, s[h + 0], 11, -358537222),d = y(d, l, c, f, s[h + 3], 16, -722521979),f = y(f, d, l, c, s[h + 6], 23, 76029189),c = y(c, f, d, l, s[h + 9], 4, -640364487),l = y(l, c, f, d, s[h + 12], 11, -421815835),d = y(d, l, c, f, s[h + 15], 16, 530742520),c = m(c, f = y(f, d, l, c, s[h + 2], 23, -995338651), d, l, s[h + 0], 6, -198630844),l = m(l, c, f, d, s[h + 7], 10, 1126891415),d = m(d, l, c, f, s[h + 14], 15, -1416354905),f = m(f, d, l, c, s[h + 5], 21, -57434055),c = m(c, f, d, l, s[h + 12], 6, 1700485571),l = m(l, c, f, d, s[h + 3], 10, -1894986606),d = m(d, l, c, f, s[h + 10], 15, -1051523),f = m(f, d, l, c, s[h + 1], 21, -2054922799),c = m(c, f, d, l, s[h + 8], 6, 1873313359),l = m(l, c, f, d, s[h + 15], 10, -30611744),d = m(d, l, c, f, s[h + 6], 15, -1560198380),f = m(f, d, l, c, s[h + 13], 21, 1309151649),c = m(c, f, d, l, s[h + 4], 6, -145523070),l = m(l, c, f, d, s[h + 11], 10, -1120210379),d = m(d, l, c, f, s[h + 2], 15, 718787259),f = m(f, d, l, c, s[h + 9], 21, -343485551),c = c + g >>> 0,f = f + v >>> 0,d = d + _ >>> 0,l = l + w >>> 0}return t.endian([c, f, d, l])};a._ff = function(e, t, r, n, i, o, a) {var s = e + (t & r | ~t & n) + (i >>> 0) + a;return (s << o | s >>> 32 - o) + t},a._gg = function(e, t, r, n, i, o, a) {var s = e + (t & n | r & ~n) + (i >>> 0) + a;return (s << o | s >>> 32 - o) + t},a._hh = function(e, t, r, n, i, o, a) {var s = e + (t ^ r ^ n) + (i >>> 0) + a;return (s << o | s >>> 32 - o) + t},a._ii = function(e, t, r, n, i, o, a) {var s = e + (r ^ (t | ~n)) + (i >>> 0) + a;return (s << o | s >>> 32 - o) + t},a._blocksize = 16,a._digestsize = 16,e.exports = function(e, r) {if (null == e)throw new Error("Illegal argument " + e);var n = t.wordsToBytes(a(e, r));return r && r.asBytes ? n : r && r.asString ? o.bytesToString(n) : t.bytesToHex(n)}}()},"00d8": function(e, t) {!function() {var t = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", r = {rotl: function(e, t) {return e << t | e >>> 32 - t},rotr: function(e, t) {return e << 32 - t | e >>> t},endian: function(e) {if (e.constructor == Number)return 16711935 & r.rotl(e, 8) | 4278255360 & r.rotl(e, 24);for (var t = 0; t < e.length; t++)e[t] = r.endian(e[t]);return e},randomBytes: function(e) {for (var t = []; e > 0; e--)t.push(Math.floor(256 * Math.random()));return t},bytesToWords: function(e) {for (var t = [], r = 0, n = 0; r < e.length; r++,n += 8)t[n >>> 5] |= e[r] << 24 - n % 32;return t},wordsToBytes: function(e) {for (var t = [], r = 0; r < 32 * e.length; r += 8)t.push(e[r >>> 5] >>> 24 - r % 32 & 255);return t},bytesToHex: function(e) {for (var t = [], r = 0; r < e.length; r++)t.push((e[r] >>> 4).toString(16)),t.push((15 & e[r]).toString(16));return t.join("")},hexToBytes: function(e) {for (var t = [], r = 0; r < e.length; r += 2)t.push(parseInt(e.substr(r, 2), 16));return t},bytesToBase64: function(e) {for (var r = [], n = 0; n < e.length; n += 3)for (var i = e[n] << 16 | e[n + 1] << 8 | e[n + 2], o = 0; o < 4; o++)8 * n + 6 * o <= 8 * e.length ? r.push(t.charAt(i >>> 6 * (3 - o) & 63)) : r.push("=");return r.join("")},base64ToBytes: function(e) {e = e.replace(/[^A-Z0-9+\/]/gi, "");for (var r = [], n = 0, i = 0; n < e.length; i = ++n % 4)0 != i && r.push((t.indexOf(e.charAt(n - 1)) & Math.pow(2, -2 * i + 8) - 1) << 2 * i | t.indexOf(e.charAt(n)) >>> 6 - 2 * i);return r}};e.exports = r}()},"9a63": function(e, t) {var r = {utf8: {stringToBytes: function(e) {return r.bin.stringToBytes(unescape(encodeURIComponent(e)))},bytesToString: function(e) {return decodeURIComponent(escape(r.bin.bytesToString(e)))}},bin: {stringToBytes: function(e) {for (var t = [], r = 0; r < e.length; r++)t.push(255 & e.charCodeAt(r));return t},bytesToString: function(e) {for (var t = [], r = 0; r < e.length; r++)t.push(String.fromCharCode(e[r]));return t.join("")}}};e.exports = r},8349: function(e, t) {function r(e) {return !!e.constructor && "function" == typeof e.constructor.isBuffer && e.constructor.isBuffer(e)}e.exports = function(e) {return null != e && (r(e) || function(e) {return "function" == typeof e.readFloatLE && "function" == typeof e.slice && r(e.slice(0, 0))}(e) || !!e._isBuffer)}},
});
var n =yangxin("6821");
function get_sign(e, t) {var r, i = "9SASji5OWnG41iRKiSvTJHlXHmRySRp1", o = "", a = t || {}, s = (e = e || "").split("?");if (s.length > 0 && (r = s[1]),r) {var u = r.split("&"), c = "";u.forEach((function(e) {var t = e.split("=");c += "".concat(t[0], "=").concat(encodeURI(t[1]), "&")})),o = "".concat(_.trimEnd(c, "&"), "&").concat(i)} elseo = Object.keys(a).length > 0 ? "".concat(JSON.stringify(a), "&").concat(i) : "&".concat(i);o = o.toLowerCase()return n(o);};
// var e = '/youzy.dms.basiclib.api.college.query';
// var t = {
// "keyword": "",
// "provinceNames": [],
// "natureTypes": [],
// "eduLevel": "",
// "categories": [],
// "features": [],
// "pageIndex": 13,
// "pageSize": 20,
// "sort": 11
// };
// console.log(get_sign(e,t))
相关文章:
逆向案例二十八——某高考志愿网异步请求头参数加密,以及webpack
网址:aHR0cDovL3d3dy54aW5nYW9rYW90Yi5jb20vY29sbGVnZXMvc2VhcmNo 抓包分析,发现请求头有参数u-sign是加密的,载荷没有进行加密,直接跟栈分析。 进入第二个栈,打上断点,分析有没有加密位置。 可以看到参数…...
WebKit的文本装饰艺术:CSS Text Decoration全解析
WebKit的文本装饰艺术:CSS Text Decoration全解析 CSS文本装饰(Text Decoration)是一组用于美化和增强网页文本表现的属性,它们可以为文本添加下划线、上划线、线删除和强调标记等效果。WebKit作为许多现代浏览器的渲染引擎&…...
【linux】Shell脚本三剑客之sed命令的详细用法攻略
✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…...
解析class字节码文件获取魔数和版本号
写在前面 本文看下如何获取class字节码文件的魔数和版本号信息。 1:正文 需要对class字节码的结构有一定的了解,可以参考这篇文章 。 直接看代码: package org.example;import java.math.BigInteger;public class TTTT {//取部分字节码&…...
技术文档总结----思维导图
性能调优| ProcessOn免费在线作图,在线流程图,在线思维导图 mysql| ProcessOn免费在线作图,在线流程图,在线思维导图 kafka| ProcessOn免费在线作图,在线流程图,在线思维导图 mybatis缓存| ProcessOn免费在线作图,在线流程图,在线思维导图 java锁| ProcessOn免费在线作图,在…...
【iOS】—— retain\release实现原理和属性关键字
【iOS】—— retain\release实现原理和属性关键字 1. retain\reelase实现原理1.1 retain实现原理1.2 release实现原理 2. 属性关键字2.1 属性关键字的分类2.2 内存管理关键字2.2.1 weak2.2.2 assgin2.3.3 strong和copy 2.4 线程安全的关键字2.5 修饰变量的关键字2.5.1常量const…...
这一文,关于Java泛型的点点滴滴 一
作为一个 Java 程序员,用到泛型最多的,我估计应该就是这一行代码: List<String> list new ArrayList<>();这也是所有 Java 程序员的泛型之路开始的地方啊。 不过本文讲泛型,先不从这里开始讲,而是再往前…...
微信小程序之调查问卷
一、设计思路 1、界面 调查问卷又称调查表,是以问题的形式系统地记载调查内容的一种形式。微信小程序制作的调查问卷,可以在短时间内快速收集反馈信息。具体效果如下所示: 2、思路 此调查问卷采用服务器客户端的方式进行设计,服…...
基于Qt的视频剪辑
在Qt中进行视频剪辑可以通过多种方式实现,但通常需要使用一些额外的库来处理视频数据。以下是一些常见的方法和步骤: 使用FFmpeg FFmpeg是一个非常强大的多媒体框架,可以用来处理视频和音频数据。你可以使用FFmpeg的命令行工具或者其库来实现…...
electron 网页TodoList工具打包成win桌面应用exe
参考: electron安装(支持win、mac、linux桌面应用) https://blog.csdn.net/weixin_42357472/article/details/140643624 TodoList工具 https://blog.csdn.net/weixin_42357472/article/details/140618446 electron打包过程: 要将…...
数据结构之判断二叉树是否为搜索树(C/C++实现)
文章目录 判断二叉树是否为搜索树方法一:递归法方法二:中序遍历法总结 二叉树是一种非常常见的数据结构,它在计算机科学中有着广泛的应用。二叉搜索树(Binary Search Tree,简称BST)是二叉树的一种特殊形式&…...
golang长连接的误用
误用一:忘记读取响应的body 由于忘记读取响应的body导致创建大量处于TIME_WAIT状态的连接(同时产生大量处于transport.go的readLoop和writeLoop的协程) 在linux下运行下面的代码: package mainimport ("fmt""html"&qu…...
Springboot @Validate @Valid 基于复杂嵌套对象的参数校验示例
Springboot Validate Valid 基于复杂嵌套对象的参数校验示例 复杂对象 Data public class Object1 {Length(max 50,message "长度不能超过50位字符")NotBlank(message "名称不能为空")private String name;NotNull(message "不能为空")pri…...
算力共享下的,分级路由转发报文协议与通告
目录 网络双 SLA 约束 一、双SLA约束的定义与背景 二、双SLA约束的应用场景 三、双SLA约束的管理与实施 四、双SLA约束的优势与挑战 算力共享下的,分级路由转发报文协议与通告 基础设施即服务(IaaS)类 型算力资源 函数即服务(FaaS)类型算力服务 软件即服务(SaaS…...
滚动数组详解
滚动数组详解 何为滚动数组?滚动数组是如何优化空间的?交替滚动例题:来自某某轮廓线DP的题目 自我滚动(~~不如交替~~ 完结!!! ( 宇宙免责任书:我用的是C) 何为滚动数组? 什么是滚动…...
C 语言动态链表
线性结构->顺序存储->动态链表 一、理论部分 从起源中理解事物,就是从本质上理解事物。 -杜勒鲁奇 动态链表是通过结点(Node)的集合来非连续地存储数据,结点之间通过指针相互连接。 动态链表本身就是一种动态分配内存的…...
【Leetcode】二十、记忆化搜索:零钱兑换
文章目录 1、记忆化搜索2、leetcode509:斐波那契数列3、leetcode322:零钱兑换 1、记忆化搜索 也叫备忘录,即把已经计算过的结果存下来,下次再遇到,就直接取,不用重新计算。目的是以减少重复计算。 以前面提…...
json数据格式 继续学习
1.定义 轻量级的数据交互格式,可以按照json数据格式去组织和封装数据。 本质是一个带有特定格式的字符串。 2.功能 负责不同编程语言中的数据传递和交互。 3.json数据格式转化 """ 演示json数据和python字典之间的转换 """ impor…...
gradle 构建项目添加版本信息
gradle 构建项目添加版本信息,打包使用 spring boot 的打包插件 build.gradle 配置文件 bootJar {manifest {attributes(Project-Name: project.name,Project-Version: project.version,"project-Vendor": "XXX Corp","Built-By": &…...
vue3 学习笔记17 -- 基于el-menu封装菜单
vue3 学习笔记17 – 基于el-menu封装菜单 前提条件:组件创建完成 配置路由 // src/router/index.ts import { createRouter, createWebHashHistory } from vue-router import type { RouteRecordRaw } from vue-router export const Layout () > import(/lay…...
使用 Redis 实现验证码、token 的存储,用自定义拦截器完成用户认证、并使用双重拦截器解决 token 刷新的问题
可以看一下我以前做过的笔记:黑马点评 短信登录部分 基于session实现登录流程 1.发送验证码 用户在提交手机号后,会校验手机号是否合法,如果不合法,则要求用户重新输入手机号 如果手机号合法,后台此时生成对应的验…...
反转链表 - 力扣(LeetCode)C语言
206. 反转链表 - 力扣(LeetCode)( 点击前面链接即可查看题目) /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode* reverseList(struct ListNode* head) {if(head NULL)…...
【Linux】进程间通信(1):进程通信概念与匿名管道
人与人之间是如何通信的?举个简单的例子,假如我是月老,我要为素不相识的但又渴望爱情的男女两方牵红线。我需要收集男方的信息告诉女方,收集女方的信息告诉男方,然后由男女双方来决定是否继续。对于他们而言࿰…...
Spring从入门到精通 01
文章目录 1. 依赖注入 (Dependency Injection, DI)2. 面向切面编程 (Aspect-Oriented Programming, AOP)3. 事务管理4. 简化 JDBC 开发5. 集成各种框架和技术6. 模块化和扩展性:主要的 Spring 模块:Core Container:AOP 模块:Data …...
C语言经典习题25
冒泡排序 对一维数组进行升序排序,然后在数组中输入20个数,将排序后的结果打印输出。 #include<stdio.h> #define N 20 int main() {int a[N];int i;for(i0;i<N;i) //初始化数组的数 {scanf("%d",&a);}for(i0;…...
2-47 基于matlab的时域有限差分法(FDTD法)拉夫等效原理进行时谐场外推
基于matlab的时域有限差分法(FDTD法)拉夫等效原理进行时谐场外推。外推边界距离吸收边界的距离、电磁场循环、傅立叶变换提起幅值和相位、各远区剖分点电场、方向系数计算等操作,得出可视化结果。程序已调通,可直接运行。 2-47 时域有限差分法(FDTD法) 拉…...
JupyterNotebook快捷键 自用
COMMAND MODE —————————————————————————————— Up Down cells的上下选择 A B 在上/下方插入cell C V X 复制/粘贴/剪切cell 双击D 删除所选cell Z 恢复被删除的cell 双击I Interrupt中断内核 Shift Enter 运行cell并选择下方 EDIT MODE ———…...
【我的OpenGL学习进阶之旅】讲一讲GL_TEXTURE_2D和GL_TEXTURE_EXTERNAL_OES的区别
在使用OpenGL ES进行图形图像开发时,我们常使用GL_TEXTURE_2D纹理类型,它提供了对标准2D图像的处理能力。这种纹理类型适用于大多数场景,可以用于展示静态贴图、渲染2D图形和进行图像处理等操作。 另外,有时我们需要从Camera或外部视频源读取数据帧并进行处理。这时,我们…...
Makefile 如何将生成的 .o 文件放到指定文件夹
研究了不少文章,我行通了一个,但是也不全,目前只能适用当前文件夹,如果源文件有子文件夹处理不了,还得继续研究。很多人说编译完把O文件移动走或者直接删掉。我想说的是不符合我的要求,移走或者删除O文件&a…...
聊一聊知识图谱结合RAG
因为最近在做一些关于提高公司内部使用的聊天机器人的回答准确率,并且最近微软官方也是开源了一下graphrag的源码,所以想聊一聊这个知识图谱结合rag。 rag在利用私有数据增强大模型回答的领域是一种比较典型的技术,也就是我们提出问题的时候&…...
成都网站搭建公司/武汉搜索排名提升
授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力。希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石。。。 共同学习成长QQ群 622368884,不喜勿加,里面有一大群志同道合的探路人 快速导航 单片机菜鸟的博客快速索引(快…...
创意+wordpress主题/海外引流推广平台
将到安全通信就要先介绍一下PKI 用我的话说就是认证证书。PKI(Public Key Infrastructure ) 即"公钥基础设施", PKI的基础技术包括加密、数字签名、数据完整性机制、数字信封、双重数字签名等。PKI 分为 公钥和私钥 通信过程…...
做网站哪个软件好/全渠道营销
上一篇:助教指南,持续更新... // Version: 0.0.4 许多人,所不知道的是,每一种编程语言都有其对应的单元测试框架,对程序在不同阶段的测试环节也概念模糊。在实际动手编写程序许久之后才听说“单元测试”、“模块测试”…...
Wordpress提高pagespeed/下载优化大师安装桌面
佐治亚理工学院电子与计算机工程硕士专业是美国排名最高的学校之一,也是美国同类规模最大的学校之一。研究方向包括:生物工程、计算机系统和软件、数字信号处理、电能、电磁、电子设计和应用、微电子/微、光学和光子学、系统和控制、电信、VLSI系统和数字…...
做电影的网站赚什么钱/搜索引擎营销分类
Himi 原创,转载请注明!原文地址:http://blog.csdn.net/xiaominghimi/article/details/6665887 -----------------------------------本章补充开始!---------------------------------- 本篇对于多触点和触屏事件已经做了一个详细的…...
纺织网站制作123纺织网/怎么自己做一个网页
附Java/C/C/机器学习/算法与数据结构/前端/安卓/Python/程序员必读书籍书单大全: 书单导航页(点击右侧 极客侠栈 即可打开个人博客):极客侠栈 ①【Java】学习之路吐血整理技术书从入门到进阶最全50本(珍藏版) ②【算法…...