

這篇主要是根據bilibili的up主python小丑魚提供的視頻教程來做的練習。
首先打開某準網的頁面:

點擊到某一公司的詳情頁面,按f12進入到開發者工具。

通過網絡的xhr請求發現也就3條請求,第一條是登錄校驗的,第二條是類似關鍵詞的,那么就是第三條了,其實也可以根據我們平常開發的時候寫接口的名稱大概猜測出來位置。

兩個加密參數,一個是kiv:,一個是b:。
找到了加密參數,第一步就是搜索,在來源這里按ctrl+shift+f鍵進行搜索。

只有一個文件有該關鍵詞的,就不用用其他方法,比如下面這種,從請求里看調用js文件哪些位置的代碼。

當我們知道哪一個是關鍵js文件,推薦把js文件放到本地進行hook與調試,這樣的話可以極大的方便我們進行逆向加密參數。本地js的話路徑需要文件夾對應。


從上面這張圖可以看到kiv的參數由s變量形成的,我們往上走,可以看到這句代碼:
```
"string" == typeof a.data && a.data.indexOf("kiv") > -1 ? (n = (i = "string" == typeof a.data ? JSON.parse(a.data) : a.data).b,
s = i.kiv) : (s = Object(m.c)(),
```
這里面第一個"=="一般是真,三元的話執行第一個運算,但后面還有“&&”這個符號,這個一般是false(如果時 || 的話一般是真),所以的話執行是第二個運算符,那么這樣的話上面這行代碼最終只執行m方法:
```
s = Object(m.c)()
```
分析到這里之后我們就先打上斷點進行調試看一下參數。


可以看到s變量確實是生成加密參數的數值。

我們也可以通過hook來查看s變量是不是要找的加密參數,這個對新手來說還是比較方便的。如果不扣代碼的話,利用該方法直接進行rpc遠程調用就可以了。
通過剛才的分析,我們可以試著在控制臺將m函數打印出來。

可以看到,m.c調用的common-2ef183.js:26035行的方法,我們點進去看一下。

可以大概的估計到,kiv是由此方法隨機生成的16位加密字符串,傳進去的e值其實是e =undefined的,通過hook打印就可以知道。kiv的參數我們已經知道了,但是往上看,可以看到,這個其實分化器寫法。

類似圖片的樣式,我們可以回到common這個js文件中往上看一下,m這個方法名是怎么定義的。

很明顯m = n("M0uz"),m就是這么定義得來的,打上斷點,刷新查看一下這個執行的那里的方法。
由于打上斷點后并沒有刷新該方法出來,所以我們用另外一種方法來獲取,因為我們現在還差b的加密參數沒有搞定,所以來看一下這一句代碼:
```
n = Object(m.b)(i, {
iv: s
}).replace(/\//g, "_").replace(/\+/g, "-").replace(/=/g, "~")));
```
可以看到,b這個加密參數同樣是由m方法來生成的,后面這個replace的方法表示搜索相關字符并替換字符串。

我們可以將m.b方法進行打印出來,并點進所在的位置,可以看到這是一個c = 什么什么方法的函數,我們跟著進入c里面看一下就知道了。

我們只需要把這個文件里的代碼全部扣下來就好了。

直接全選復制到我們新建的js文件里


在前面定義一個sign的變量,并補上window環境。
```
var sign;
window = global;
```
在最后那里中括號改成大括號,并將r()改成sign = S,為什么等于S呢。

因為根據r()方法這里可以看到,最后返回的是e,那e往上看很明顯是等于S。

還有另外一種原因就是我們從comm這個js文件跳過來的時候就看到是在使用S方法了。

我們可以寫一個0方法進行測試一下,運行時如果輸出為ceshi那就說明沒有問題。
好了,弄好這些之后我們接著扣代碼。上面已經說過了,
```
m = n("M0uz")
```
而kiv與b加密參數都是調用的m方法形成的。所以我們需要在comm這個js文件找到 “ M0uz ” 這個方法名。


將扣來的代碼放在M0uz上,并看到里面還調用一些其他方法,我們需要一一把這些方法扣過來。

0770這個方法里還調用了其他的,我們也需要扣回來,在補齊所有方法后,我們可以進行調用了。
```
var m = n('M0uz');
var s = Object(m.c)()
return s;
```
只需要模擬commjs文件里的kiv生成代碼就可以了。b參數的話我們通過hook可以知道,只需要在里面加一些數據就能生成加密數據了。好了,目前這兩個加密參數已經基本完成了,下面我們來看一下返回的加密數據如何進行解密成明文數據。
我們需要在返回來的啟動器找到那里是解密方法,一般有幾種,直接搜索的話可能會出來太多方法,一個個跟消耗我們很多時間,我們可以試著搜索這兩個:response decrypt,然后跟一下,或者xhr斷點一步步往下走。

或者從get這里斷點然后開始往下跟。

我在找到response之后在它方法的下一行進行了斷點,這樣就可以找到它進來的參數是什么了,在跳過兩次后,我們就可以看到進來一個跟我們需要解密數據差不多的data傳了進來。如果還是不太確定的話可以在response最后返回那里打上斷點就可以返回的是一個已經解密好的數據。
```
if (200 == t.status && t.config.crypto && "string" == typeof n && (n = Object(m.a)(t.data, {
iv: "string" == typeof i ? JSON.parse(i).kiv : i.kiv
}),
```
跟到這里的時候我們再往下就跳到另外的方法里,所以可以猜測解密應該是這里執行的,我們把它拿出來,i.kiv就是我們之前生成的加密參數,我們如果不太確定這個語句執行的是什么的話可以將他打印出來看一下。(JSON.parse(n)我們還看到這一句代碼,有時候搜索查找的時候我們也可以就搜索上面一個說不定就可以找到了)

我們將iv: "string" == typeof i ? JSON.parse(i).kiv : i.kiv這句直接放到控制臺運行,可以看到最后輸出的就是我們之前生成的加密參數。那我們試著執行一下 Object(m.a)()這個方法。

我們只要像這樣就可以了。本章節也講完了。。。。本教程僅供學習交流,請勿用作其他用途


```
window = global;
var e = "XY1Dp1iGHtF59tsGp3iBZO+i7uUe6C7+DwQryWckdInXAA1nurufhO2ISIh8bp7aeKJi5rdhX/VpwrIJHY3TSvxgoSiGEulupOZNydcN6xs/LvpwbnDXntdr0mvmKPj9s4HQ2AbQviBpGI7N+BD2uVo91d/zDJKV1aNYZ22ZIP1vw3xp0TY5x7V6RB2SqkQ1GjQvQZKvY9PXQiIPOeU/k2Afbmf4k5qHpdCA6OX/8sBx2/fmazL9dQE6v0zSXJZ55Ddv6zDjv4+prRSDaodsxFvVoXEp4crBzOBiMkwndVeyfc8XHlcohwWX2NaFEu5I09yJWaGhXEKruYYjmVh4woaplg3PJDnDsjrbaqhnUtDjazAKX3bLNEI2N6hEd7iAX5g/RNifhhxOvmghJjuKd3ozsznBcmgxbAY4ovrf7N+VwEpK8L6p21Y9MSvtvaAdF/3T9X0TNi7fBBDx+Xebu69R887ERa2e9TPqMjlFuBdEiNvuEFdYXDpmrKHLlvIh338T8ulf4KlW8afCW/XgTwiNzOOYLgjH2fVvLYXmM0qU7ho0JIe8Khr8tgfvYEG1";
var t = "NgYFhzTgIZSbgQnb";
var sign;
window = global;
! function(e) {
function n(n) {
for (var t, o, i = n\[0\], c = n\[1\], a = n\[2\], d = 0, s = \[\]; d < i.length; d++)
o = i\[d\],
Object.prototype.hasOwnProperty.call(A, o) && A\[o\] && s.push(A\[o\]\[0\]),
A\[o\] = 0;
for (t in c)
Object.prototype.hasOwnProperty.call(c, t) && (e\[t\] = c\[t\]);
for (J && J(n); s.length;)
s.shift()();
return M.push.apply(M, a || \[\]),
r()
? ? }
function r() {
for (var e, n = 0; n < M.length; n++) {
for (var r = M\[n\], t = !0, o = 1; o < r.length; o++) {
var i = r\[o\];
0 !== A\[i\] && (t = !1)
? ? ? ? ? ? }
t && (M.splice(n\--, 1),
e = S(S.s = r\[0\]))
? ? ? ? }
return e
? ? }
var t = window.webpackHotUpdate;
window.webpackHotUpdate = function(e, n) {
! function(e, n) {
if (!\_\[e\] || !g\[e\])
return;
for (var r in g\[e\] = !1,
n)
Object.prototype.hasOwnProperty.call(n, r) && (v\[r\] = n\[r\]);
0 == --w && 0 === O && P()
? ? ? ? }(e, n),
t && t(e, n)
? ? };
var o, i = !0,
c = "2ef183362af73dab273d",
a = {},
d = \[\],
s = \[\];
function p(n) {
var r = {
\_acceptedDependencies: {},
\_declinedDependencies: {},
\_selfAccepted: !1,
\_selfDeclined: !1,
\_selfInvalidated: !1,
\_disposeHandlers: \[\],
\_main: o !== n,
active: !0,
accept: function(e, n) {
if (void 0 === e)
r.\_selfAccepted = !0;
else if ("function" == typeof e)
r.\_selfAccepted = e;
else if ("object" == typeof e)
for (var t = 0; t < e.length; t++)
r.\_acceptedDependencies\[e\[t\]\] = n || function() {};
else
r.\_acceptedDependencies\[e\] = n || function() {}
? ? ? ? ? ? },
decline: function(e) {
if (void 0 === e)
r.\_selfDeclined = !0;
else if ("object" == typeof e)
for (var n = 0; n < e.length; n++)
r.\_declinedDependencies\[e\[n\]\] = !0;
else
r.\_declinedDependencies\[e\] = !0
? ? ? ? ? ? },
dispose: function(e) {
r.\_disposeHandlers.push(e)
? ? ? ? ? ? },
addDisposeHandler: function(e) {
r.\_disposeHandlers.push(e)
? ? ? ? ? ? },
removeDisposeHandler: function(e) {
var n = r.\_disposeHandlers.indexOf(e);
n >= 0 && r.\_disposeHandlers.splice(n, 1)
? ? ? ? ? ? },
invalidate: function() {
switch (this.\_selfInvalidated = !0,
u) {
case "idle":
? ? ? ? ? ? ? ? ? ? ? ? (v = {})\[n\] = e\[n\],
f("ready");
break;
case "ready":
x(n);
break;
case "prepare":
case "check":
case "dispose":
case "apply":
? ? ? ? ? ? ? ? ? ? ? ? (b = b || \[\]).push(n)
? ? ? ? ? ? ? ? }
? ? ? ? ? ? },
check: D,
apply: I,
status: function(e) {
if (!e)
return u;
l.push(e)
? ? ? ? ? ? },
addStatusHandler: function(e) {
l.push(e)
? ? ? ? ? ? },
removeStatusHandler: function(e) {
var n = l.indexOf(e);
n >= 0 && l.splice(n, 1)
? ? ? ? ? ? },
data: a\[n\]
? ? ? ? };
return o = void 0,
r
? ? }
var l = \[\],
u = "idle";
function f(e) {
u = e;
for (var n = 0; n < l.length; n++)
l\[n\].call(null, e)
? ? }
var h, v, y, b, w = 0,
O = 0,
m = {},
g = {},
\_ = {};
function j(e) {
return +e + "" === e ? +e : e
? ? }
function D(e) {
if ("idle" !== u)
throw new Error("check() is only allowed in idle status");
return i = e,
f("check"),
? ? ? ? ? ? (n = 1e4,
n = n || 1e4,
new Promise((function(e, r) {
if ("undefined" == typeof XMLHttpRequest)
return r(new Error("No browser support"));
try {
var t = new XMLHttpRequest,
o = S.p + "" + c + ".hot-update.json";
t.open("GET", o, !0),
t.timeout = n,
t.send(null)
} catch (e) {
return r(e)
? ? ? ? ? ? ? ? ? ? }
t.onreadystatechange = function() {
if (4 === t.readyState)
if (0 === t.status)
r(new Error("Manifest request to " + o + " timed out."));
else if (404 === t.status)
e();
else if (200 !== t.status && 304 !== t.status)
r(new Error("Manifest request to " + o + " failed."));
else {
try {
var n = JSON.parse(t.responseText)
} catch (e) {
return void r(e)
? ? ? ? ? ? ? ? ? ? ? ? ? ? }
e(n)
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }))).then((function(e) {
if (!e)
return f(k() ? "ready" : "idle"),
null;
g = {},
m = {},
\_ = e.c,
y = e.h,
f("prepare");
var n = new Promise((function(e, n) {
h = {
resolve: e,
reject: n
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }));
for (var r in v = {},
A)
E(r);
return "prepare" === u && 0 === O && 0 === w && P(),
n
? ? ? ? ? ? }));
var n
? ? }
function E(e) {
\_\[e\] ? (g\[e\] = !0,
w++,
function(e) {
var n = document.createElement("script");
n.charset = "utf-8",
n.src = S.p + "" + e + "." + c + ".hot-update.js",
document.head.appendChild(n)
? ? ? ? ? ? }(e)) : m\[e\] = !0
? ? }
function P() {
f("ready");
var e = h;
if (h = null,
e)
if (i)
Promise.resolve().then((function() {
return I(i)
? ? ? ? ? ? ? ? })).then((function(n) {
e.resolve(n)
? ? ? ? ? ? ? ? }), (function(n) {
e.reject(n)
? ? ? ? ? ? ? ? }));
else {
var n = \[\];
for (var r in v)
Object.prototype.hasOwnProperty.call(v, r) && n.push(j(r));
e.resolve(n)
? ? ? ? ? ? }
? ? }
function I(n) {
if ("ready" !== u)
throw new Error("apply() is only allowed in ready status");
return function n(r) {
var t, i, s, p, l;
function u(e) {
for (var n = \[e\], r = {}, t = n.map((function(e) {
return {
chain: \[e\],
id: e
? ? ? ? ? ? ? ? ? ? ? ? }
})); t.length > 0;) {
var o = t.pop(),
i = o.id,
c = o.chain;
if ((p = H\[i\]) && (!p.hot.\_selfAccepted || p.hot.\_selfInvalidated)) {
if (p.hot.\_selfDeclined)
return {
type: "self-declined",
chain: c,
moduleId: i
? ? ? ? ? ? ? ? ? ? ? ? ? ? };
if (p.hot.\_main)
return {
type: "unaccepted",
chain: c,
moduleId: i
? ? ? ? ? ? ? ? ? ? ? ? ? ? };
for (var a = 0; a < p.parents.length; a++) {
var d = p.parents\[a\],
s = H\[d\];
if (s) {
if (s.hot.\_declinedDependencies\[i\])
return {
type: "declined",
chain: c.concat(\[d\]),
moduleId: i,
parentId: d
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }; -
1 === n.indexOf(d) && (s.hot.\_acceptedDependencies\[i\] ? (r\[d\] || (r\[d\] = \[\]),
h(r\[d\], \[i\])) : (delete r\[d\],
n.push(d),
t.push({
chain: c.concat(\[d\]),
id: d
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? })))
? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
return {
type: "accepted",
moduleId: e,
outdatedModules: n,
outdatedDependencies: r
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
function h(e, n) {
for (var r = 0; r < n.length; r++) {
var t = n\[r\]; -
1 === e.indexOf(t) && e.push(t)
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
k();
var w = {},
O = \[\],
m = {},
g = function() {};
for (var D in v)
if (Object.prototype.hasOwnProperty.call(v, D)) {
var E;
l = j(D),
E = v\[D\] ? u(l) : {
type: "disposed",
moduleId: D
? ? ? ? ? ? ? ? ? ? ? ? };
var P = !1,
I = !1,
x = !1,
M = "";
switch (E.chain && (M = "\\nUpdate propagation: " + E.chain.join(" -> ")),
E.type) {
case "self-declined":
r.onDeclined && r.onDeclined(E),
r.ignoreDeclined || (P = new Error("Aborted because of self decline: " + E.moduleId + M));
break;
case "declined":
r.onDeclined && r.onDeclined(E),
r.ignoreDeclined || (P = new Error("Aborted because of declined dependency: " + E.moduleId + " in " + E.parentId + M));
break;
case "unaccepted":
r.onUnaccepted && r.onUnaccepted(E),
r.ignoreUnaccepted || (P = new Error("Aborted because " + l + " is not accepted" + M));
break;
case "accepted":
r.onAccepted && r.onAccepted(E),
I = !0;
break;
case "disposed":
r.onDisposed && r.onDisposed(E),
x = !0;
break;
default:
throw new Error("Unexception type " + E.type)
? ? ? ? ? ? ? ? ? ? }
if (P)
return f("abort"),
Promise.reject(P);
if (I)
for (l in m\[l\] = v\[l\],
h(O, E.outdatedModules),
E.outdatedDependencies)
Object.prototype.hasOwnProperty.call(E.outdatedDependencies, l) && (w\[l\] || (w\[l\] = \[\]),
h(w\[l\], E.outdatedDependencies\[l\]));
x && (h(O, \[E.moduleId\]),
m\[l\] = g)
? ? ? ? ? ? ? ? }
var U, q = \[\];
for (i = 0; i < O.length; i++)
l = O\[i\],
H\[l\] && H\[l\].hot.\_selfAccepted && m\[l\] !== g && !H\[l\].hot.\_selfInvalidated && q.push({
module: l,
parents: H\[l\].parents.slice(),
errorHandler: H\[l\].hot.\_selfAccepted
? ? ? ? ? ? ? ? });
f("dispose"),
Object.keys(\_).forEach((function(e) {
? ? ? ? ? ? ? ? ? ? !1 === \_\[e\] && function(e) {
delete A\[e\]
? ? ? ? ? ? ? ? ? ? }(e)
? ? ? ? ? ? ? ? }));
var T, J, L = O.slice();
for (; L.length > 0;)
if (l = L.pop(),
p = H\[l\]) {
var N = {},
R = p.hot.\_disposeHandlers;
for (s = 0; s < R.length; s++)
? ? ? ? ? ? ? ? ? ? ? ? (t = R\[s\])(N);
for (a\[l\] = N,
p.hot.active = !1,
delete H\[l\],
delete w\[l\],
s = 0; s < p.children.length; s++) {
var X = H\[p.children\[s\]\];
X && ((U = X.parents.indexOf(l)) >= 0 && X.parents.splice(U, 1))
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
for (l in w)
if (Object.prototype.hasOwnProperty.call(w, l) && (p = H\[l\]))
for (J = w\[l\],
s = 0; s < J.length; s++)
T = J\[s\],
? ? ? ? ? ? ? ? ? ? ? ? (U = p.children.indexOf(T)) >= 0 && p.children.splice(U, 1);
f("apply"),
void 0 !== y && (c = y,
y = void 0);
for (l in v = void 0,
m)
Object.prototype.hasOwnProperty.call(m, l) && (e\[l\] = m\[l\]);
var z = null;
for (l in w)
if (Object.prototype.hasOwnProperty.call(w, l) && (p = H\[l\])) {
J = w\[l\];
var C = \[\];
for (i = 0; i < J.length; i++)
if (T = J\[i\],
t = p.hot.\_acceptedDependencies\[T\]) {
if (-1 !== C.indexOf(t))
continue;
C.push(t)
? ? ? ? ? ? ? ? ? ? ? ? }
for (i = 0; i < C.length; i++) {
t = C\[i\];
try {
t(J)
} catch (e) {
r.onErrored && r.onErrored({
type: "accept-errored",
moduleId: l,
dependencyId: J\[i\],
error: e
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }),
r.ignoreErrored || z || (z = e)
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
for (i = 0; i < q.length; i++) {
var G = q\[i\];
l = G.module,
d = G.parents,
o = l;
try {
S(l)
} catch (e) {
if ("function" == typeof G.errorHandler)
try {
G.errorHandler(e)
} catch (n) {
r.onErrored && r.onErrored({
type: "self-accept-error-handler-errored",
moduleId: l,
error: n,
originalError: e
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }),
r.ignoreErrored || z || (z = n),
z || (z = e)
? ? ? ? ? ? ? ? ? ? ? ? }
else
r.onErrored && r.onErrored({
type: "self-accept-errored",
moduleId: l,
error: e
? ? ? ? ? ? ? ? ? ? ? ? }),
r.ignoreErrored || z || (z = e)
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
if (z)
return f("fail"),
Promise.reject(z);
if (b)
return n(r).then((function(e) {
return O.forEach((function(n) {
e.indexOf(n) < 0 && e.push(n)
? ? ? ? ? ? ? ? ? ? ? ? })),
e
? ? ? ? ? ? ? ? }));
return f("idle"),
new Promise((function(e) {
e(O)
? ? ? ? ? ? ? ? }))
? ? ? ? }(n = n || {})
? ? }
function k() {
if (b)
return v || (v = {}),
b.forEach(x),
b = void 0, !0
? ? }
function x(n) {
Object.prototype.hasOwnProperty.call(v, n) || (v\[n\] = e\[n\])
? ? }
var H = {},
A = {
2: 0
? ? ? ? },
M = \[\];
function S(n) {
if (H\[n\])
return H\[n\].exports;
var r = H\[n\] = {
i: n,
l: !1,
exports: {},
hot: p(n),
parents: (s = d,
d = \[\],
s),
children: \[\]
? ? ? ? };
return e\[n\].call(r.exports, r, r.exports, function(e) {
var n = H\[e\];
if (!n)
return S;
var r = function(r) {
return n.hot.active ? (H\[r\] ? -1 === H\[r\].parents.indexOf(e) && H\[r\].parents.push(e) : (d = \[e\],
o = r), -1 === n.children.indexOf(r) && n.children.push(r)) : d = \[\],
S(r)
? ? ? ? ? ? ? ? ? ? },
t = function(e) {
return {
configurable: !0,
enumerable: !0,
get: function() {
return S\[e\]
? ? ? ? ? ? ? ? ? ? ? ? ? ? },
set: function(n) {
S\[e\] = n
? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? };
for (var i in S)
Object.prototype.hasOwnProperty.call(S, i) && "e" !== i && "t" !== i && Object.defineProperty(r, i, t(i));
return r.e = function(e) {
return "ready" === u && f("prepare"),
O++,
S.e(e).then(n, (function(e) {
throw n(),
e
? ? ? ? ? ? ? ? ? ? ? ? ? ? }));
function n() {
O\--,
"prepare" === u && (m\[e\] || E(e),
0 === O && 0 === w && P())
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? },
r.t = function(e, n) {
return 1 & n && (e = r(e)),
S.t(e, -2 & n)
? ? ? ? ? ? ? ? ? ? },
r
? ? ? ? ? ? }(n)),
r.l = !0,
r.exports
? ? }
S.m = e,
S.c = H,
S.d = function(e, n, r) {
S.o(e, n) || Object.defineProperty(e, n, {
enumerable: !0,
get: r
? ? ? ? ? ? })
? ? ? ? },
S.r = function(e) {
"undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, {
value: "Module"
? ? ? ? ? ? ? ? }),
Object.defineProperty(e, "\_\_esModule", {
value: !0
? ? ? ? ? ? ? ? })
? ? ? ? },
S.t = function(e, n) {
if (1 & n && (e = S(e)),
8 & n)
return e;
if (4 & n && "object" == typeof e && e && e.\_\_esModule)
return e;
var r = Object.create(null);
if (S.r(r),
Object.defineProperty(r, "default", {
enumerable: !0,
value: e
? ? ? ? ? ? ? ? }),
2 & n && "string" != typeof e)
for (var t in e)
S.d(r, t, function(n) {
return e\[n\]
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? .bind(null, t));
return r
? ? ? ? },
S.n = function(e) {
var n = e && e.\_\_esModule ? function() {
return e.default
? ? ? ? ? ? ? ? } :
function() {
return e
? ? ? ? ? ? ? ? };
return S.d(n, "a", n),
n
? ? ? ? },
S.o = function(e, n) {
return Object.prototype.hasOwnProperty.call(e, n)
? ? ? ? },
S.p = "https://static.kanzhun.com/assets/web/",
S.h = function() {
return c
? ? ? ? };
var U = window.webpackJsonp = window.webpackJsonp || \[\],
q = U.push.bind(U);
U.push = n,
U = U.slice();
for (var T = 0; T < U.length; T++)
n(U\[T\]);
var J = q;
sign = S;
}({
n770: function(e, t, n) {
"use strict";
? ? ? ? (function(e) {
function n(e, t) {
return e(t = {
exports: {}
}, t.exports),
t.exports
? ? ? ? ? ? }
"undefined" != typeof globalThis ? globalThis : "undefined" != typeof window ? window : void 0 !== e || "undefined" != typeof self && self;
var r = n((function(e, t) {
var n;
e.exports = n = n || function(e, t) {
var n = Object.create || function() {
function e() {}
return function(t) {
var n;
return e.prototype = t,
n = new e,
e.prototype = null,
n
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ? }(),
r = {},
i = r.lib = {},
a = i.Base = {
extend: function(e) {
var t = n(this);
return e && t.mixIn(e),
t.hasOwnProperty("init") && this.init !== t.init || (t.init = function() {
t.$super.init.apply(this, arguments)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }),
t.init.prototype = t,
t.$super = this,
t
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? },
create: function() {
var e = this.extend();
return e.init.apply(e, arguments),
e
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? },
init: function() {},
mixIn: function(e) {
for (var t in e)
e.hasOwnProperty(t) && (this\[t\] = e\[t\]);
l(this);
for (var e = this.cfg.drop; e > 0; e\--)
a.call(this)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? });
e.RC4Drop = t.\_createHelper(o)
? ? ? ? ? ? ? ? ? ? ? ? ? ? }(),
n.RC4)
? ? ? ? ? ? ? ? ? ? })),
n((function(e, t) {
var n;
e.exports = (n = r,
function() {
var e = n,
t = e.lib.StreamCipher,
r = e.algo,
i = \[\],
a = \[\],
o = \[\],
s = r.Rabbit = t.extend({
\_doReset: function() {
for (var e = this.\_key.words, t = this.cfg.iv, n = 0; n < 4; n++)
e\[n\] = 16711935 & (e\[n\] >> 24) | 4278255360 & (e\[n\] >> 8);
var r = this.\_X = \[e\[0\], e\[3\] >> 16, e\[1\], e\[0\] >> 16, e\[2\], e\[1\] >> 16, e\[3\], e\[2\] >> 16\],
i = this.\_C = \[e\[2\] >> 16, 4294901760 & e\[0\] | 65535 & e\[1\], e\[3\] >> 16, 4294901760 & e\[1\] | 65535 & e\[2\], e\[0\] >> 16, 4294901760 & e\[2\] | 65535 & e\[3\], e\[1\] >> 16, 4294901760 & e\[3\] | 65535 & e\[0\]\];
for (this.\_b = 0,
n = 0; n < 4; n++)
u.call(this);
for (n = 0; n < 8; n++)
i\[n\] ^= r\[n + 4 & 7\];
if (t) {
var a = t.words,
o = a\[0\],
s = a\[1\],
c = 16711935 & (o >> 24) | 4278255360 & (o >> 8),
l = 16711935 & (s >> 24) | 4278255360 & (s >> 8),
d = c >>> 16 | 4294901760 & l,
f = l << 16 | 65535 & c;
for (i\[0\] ^= c,
i\[1\] ^= d,
i\[2\] ^= l,
i\[3\] ^= f,
i\[4\] ^= c,
i\[5\] ^= d,
i\[6\] ^= l,
i\[7\] ^= f,
n = 0; n < 4; n++)
u.call(this)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? },
\_doProcessBlock: function(e, t) {
var n = this.\_X;
u.call(this),
i\[0\] = n\[0\] ^ n\[5\] >>> 16 ^ n\[3\] << 16,
i\[1\] = n\[2\] ^ n\[7\] >>> 16 ^ n\[5\] << 16,
i\[2\] = n\[4\] ^ n\[1\] >>> 16 ^ n\[7\] << 16,
i\[3\] = n\[6\] ^ n\[3\] >>> 16 ^ n\[1\] << 16;
for (var r = 0; r < 4; r++)
i\[r\] = 16711935 & (i\[r\] >> 24) | 4278255360 & (i\[r\] >> 8),
e\[t + r\] ^= i\[r\]
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? },
blockSize: 4,
ivSize: 2
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? });
function u() {
for (var e = this.\_X, t = this.\_C, n = 0; n < 8; n++)
a\[n\] = t\[n\];
for (t\[0\] = t\[0\] + 1295307597 + this.\_b | 0,
t\[1\] = t\[1\] + 3545052371 + (t\[0\] >>> 0 >> 0 ? 1 : 0) | 0,
t\[2\] = t\[2\] + 886263092 + (t\[1\] >>> 0 >> 0 ? 1 : 0) | 0,
t\[3\] = t\[3\] + 1295307597 + (t\[2\] >>> 0 >> 0 ? 1 : 0) | 0,
t\[4\] = t\[4\] + 3545052371 + (t\[3\] >>> 0 >> 0 ? 1 : 0) | 0,
t\[5\] = t\[5\] + 886263092 + (t\[4\] >>> 0 >> 0 ? 1 : 0) | 0,
t\[6\] = t\[6\] + 1295307597 + (t\[5\] >>> 0 >> 0 ? 1 : 0) | 0,
t\[7\] = t\[7\] + 3545052371 + (t\[6\] >>> 0 >> 0 ? 1 : 0) | 0,
this.\_b = t\[7\] >>> 0 >> 0 ? 1 : 0,
n = 0; n < 8; n++) {
var r = e\[n\] + t\[n\],
i = 65535 & r,
s = r >>> 16,
u = ((i \* i >>> 17) + i \* s >>> 15) + s \* s,
c = ((4294901760 & r) \* r | 0) + ((65535 & r) \* r | 0);
o\[n\] = u ^ c
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
e\[0\] = o\[0\] + (o\[7\] >> 16) + (o\[6\] >> 16) | 0,
e\[1\] = o\[1\] + (o\[0\] >> 24) + o\[7\] | 0,
e\[2\] = o\[2\] + (o\[1\] >> 16) + (o\[0\] >> 16) | 0,
e\[3\] = o\[3\] + (o\[2\] >> 24) + o\[1\] | 0,
e\[4\] = o\[4\] + (o\[3\] >> 16) + (o\[2\] >> 16) | 0,
e\[5\] = o\[5\] + (o\[4\] >> 24) + o\[3\] | 0,
e\[6\] = o\[6\] + (o\[5\] >> 16) + (o\[4\] >> 16) | 0,
e\[7\] = o\[7\] + (o\[6\] >> 24) + o\[5\] | 0
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
e.Rabbit = t.\_createHelper(s)
? ? ? ? ? ? ? ? ? ? ? ? ? ? }(),
n.Rabbit)
? ? ? ? ? ? ? ? ? ? })),
n((function(e, t) {
var n;
e.exports = (n = r,
function() {
var e = n,
t = e.lib.StreamCipher,
r = e.algo,
i = \[\],
a = \[\],
o = \[\],
s = r.RabbitLegacy = t.extend({
\_doReset: function() {
var e = this.\_key.words,
t = this.cfg.iv,
n = this.\_X = \[e\[0\], e\[3\] >> 16, e\[1\], e\[0\] >> 16, e\[2\], e\[1\] >> 16, e\[3\], e\[2\] >> 16\],
r = this.\_C = \[e\[2\] >> 16, 4294901760 & e\[0\] | 65535 & e\[1\], e\[3\] >> 16, 4294901760 & e\[1\] | 65535 & e\[2\], e\[0\] >> 16, 4294901760 & e\[2\] | 65535 & e\[3\], e\[1\] >> 16, 4294901760 & e\[3\] | 65535 & e\[0\]\];
this.\_b = 0;
for (var i = 0; i < 4; i++)
u.call(this);
for (i = 0; i < 8; i++)
r\[i\] ^= n\[i + 4 & 7\];
if (t) {
var a = t.words,
o = a\[0\],
s = a\[1\],
c = 16711935 & (o >> 24) | 4278255360 & (o >> 8),
l = 16711935 & (s >> 24) | 4278255360 & (s >> 8),
d = c >>> 16 | 4294901760 & l,
f = l << 16 | 65535 & c;
for (r\[0\] ^= c,
r\[1\] ^= d,
r\[2\] ^= l,
r\[3\] ^= f,
r\[4\] ^= c,
r\[5\] ^= d,
r\[6\] ^= l,
r\[7\] ^= f,
i = 0; i < 4; i++)
u.call(this)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? },
\_doProcessBlock: function(e, t) {
var n = this.\_X;
u.call(this),
i\[0\] = n\[0\] ^ n\[5\] >>> 16 ^ n\[3\] << 16,
i\[1\] = n\[2\] ^ n\[7\] >>> 16 ^ n\[5\] << 16,
i\[2\] = n\[4\] ^ n\[1\] >>> 16 ^ n\[7\] << 16,
i\[3\] = n\[6\] ^ n\[3\] >>> 16 ^ n\[1\] << 16;
for (var r = 0; r < 4; r++)
i\[r\] = 16711935 & (i\[r\] >> 24) | 4278255360 & (i\[r\] >> 8),
e\[t + r\] ^= i\[r\]
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? },
blockSize: 4,
ivSize: 2
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? });
function u() {
for (var e = this.\_X, t = this.\_C, n = 0; n < 8; n++)
a\[n\] = t\[n\];
for (t\[0\] = t\[0\] + 1295307597 + this.\_b | 0,
t\[1\] = t\[1\] + 3545052371 + (t\[0\] >>> 0 >> 0 ? 1 : 0) | 0,
t\[2\] = t\[2\] + 886263092 + (t\[1\] >>> 0 >> 0 ? 1 : 0) | 0,
t\[3\] = t\[3\] + 1295307597 + (t\[2\] >>> 0 >> 0 ? 1 : 0) | 0,
t\[4\] = t\[4\] + 3545052371 + (t\[3\] >>> 0 >> 0 ? 1 : 0) | 0,
t\[5\] = t\[5\] + 886263092 + (t\[4\] >>> 0 >> 0 ? 1 : 0) | 0,
t\[6\] = t\[6\] + 1295307597 + (t\[5\] >>> 0 >> 0 ? 1 : 0) | 0,
t\[7\] = t\[7\] + 3545052371 + (t\[6\] >>> 0 >> 0 ? 1 : 0) | 0,
this.\_b = t\[7\] >>> 0 >> 0 ? 1 : 0,
n = 0; n < 8; n++) {
var r = e\[n\] + t\[n\],
i = 65535 & r,
s = r >>> 16,
u = ((i \* i >>> 17) + i \* s >>> 15) + s \* s,
c = ((4294901760 & r) \* r | 0) + ((65535 & r) \* r | 0);
o\[n\] = u ^ c
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
e\[0\] = o\[0\] + (o\[7\] >> 16) + (o\[6\] >> 16) | 0,
e\[1\] = o\[1\] + (o\[0\] >> 24) + o\[7\] | 0,
e\[2\] = o\[2\] + (o\[1\] >> 16) + (o\[0\] >> 16) | 0,
e\[3\] = o\[3\] + (o\[2\] >> 24) + o\[1\] | 0,
e\[4\] = o\[4\] + (o\[3\] >> 16) + (o\[2\] >> 16) | 0,
e\[5\] = o\[5\] + (o\[4\] >> 24) + o\[3\] | 0,
e\[6\] = o\[6\] + (o\[5\] >> 16) + (o\[4\] >> 16) | 0,
e\[7\] = o\[7\] + (o\[6\] >> 24) + o\[5\] | 0
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
e.RabbitLegacy = t.\_createHelper(s)
? ? ? ? ? ? ? ? ? ? ? ? ? ? }(),
n.RabbitLegacy)
? ? ? ? ? ? ? ? ? ? })),
n((function(e, t) {
e.exports = r
? ? ? ? ? ? ? ? ? ? })));
t.a = i
? ? ? ? }).call(this, n("JAn9"))
? ? },
JAn9: function(e, t) {
var n;
n = function() {
return this
? ? ? ? }();
try {
n = n || new Function("return this")()
} catch (e) {
"object" == typeof window && (n = window)
? ? ? ? }
e.exports = n
? ? }
});
var r = sign("n770");
function jiemi(e, t) {
void 0 === e && (e = ""),
void 0 === t && (t = "");
var n = a(),
i = r.a.AES.decrypt(e.toString(), n.key, {
iv: r.a.enc.Utf8.parse(t),
mode: n.mode,
padding: n.pad
? ? ? ? });
return i = i.toString(r.a.enc.Utf8)
}
function a() {
var e, t, n, a, o;
var i = null;
return i || ((o = null) || (t = new RegExp("\\\\u200c", "g"),
n = new RegExp("\\\\u200d", "g"),
a = new RegExp(".{8}", "g"),
e = "????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????".replace(a, (function(e) {
return String.fromCharCode(parseInt(e.replace(t, 1).replace(n, 0), 2))
? ? ? ? ? ? ? ? })),
o = {
key: r.a.enc.Utf8.parse(e),
mode: r.a.mode.CBC,
pad: r.a.pad.Pkcs7
? ? ? ? ? ? ? ? }),
i = o),
i
}
function o(e, t) {
void 0 === e && (e = ""),
void 0 === t && (t = "");
var n = a(),
i = r.a.AES.encrypt(e.toString(), n.key, {
iv: r.a.enc.Utf8.parse(t),
mode: n.mode,
padding: n.pad
? ? ? ? });
return i = i.toString()
}
console.log(jiemi(e, t))
```