When I saw Joker Xue’s new song posted by a friend in Moments, I wanted to check it out, so let’s start directly:
Target link: NetEase Cloud Music
The first step is to capture the packet:
First, by clicking on the detail pages of several songs, I found that the single songs only have IDs and are different, so just find the source of the song IDs directly.
It just so happens that he has a name and ID, so now just check whether it is encrypted. If the package is not sent directly, the result will always be unsatisfactory. I found that he carried something with params=xxx. What is this? Preliminary estimation is that it is what is being searched for, because it does not pass parameters in other places, so this is the only place, then let's go in and see its source.
Then let’s go in and take a look directly through the simplest launcher.
The outermost layer is the send packet, so follow it at the next breakpoint and see
You find that it has been encrypted here, so follow the stack up. It is found that there is no encryption here, but the stack below has been encrypted.
Obviously, encryption is completed in the middle, so just set the breakpoint at u5z.be5j and chase it in one step.
I found that encryption is carried out here, so can I just dig out the code here?
It is said that the process of extracting js can be placed directly where it is used. I will not demonstrate it here.
Attached below is the js I have already attached. Just call the main function in it directly.
var window =this;
var location = {
"ancestorOrigins": {
"0": "https://music.163.com"
},
"href": "https://music.163.com/song?id=2067808196",
"origin": "https://music.163.com",
"protocol": "https:",
"host": "music.163.com",
"hostname": "music.163.com",
"port": "",
"pathname": "/song",
"search": "?id=2067808196",
"hash": ""
};
var document = {createElement:function(){}};
var CryptoJS = CryptoJS || function(u, p) {
var d = {}
, l = d.lib = {}
, s = function() {}
, t = l.Base = {
extend: function(a) {
s.prototype = this;
var c = new s;
a && c.mixIn(a);
c.hasOwnProperty("init") || (c.init = function() {
c.$super.init.apply(this, arguments)
}
);
c.init.prototype = c;
c.$super = this;
return c
},
create: function() {
var a = this.extend();
a.init.apply(a, arguments);
return a
},
init: function() {},
mixIn: function(a) {
for (var c in a)
a.hasOwnProperty(c) && (this[c] = a[c]);
a.hasOwnProperty("toString") && (this.toString = a.toString)
},
clone: function() {
return this.init.prototype.extend(this)
}
}
, r = l.WordArray = t.extend({
init: function(a, c) {
a = this.words = a || [];
this.sigBytes = c != p ? c : 4 * a.length
},
toString: function(a) {
return (a || v).stringify(this)
},
concat: function(a) {
var c = this.words
, e = a.words
, j = this.sigBytes;
a = a.sigBytes;
this.clamp();
if (j % 4)
for (var k = 0; k < a; k++)
c[j + k >>> 2] |= (e[k >>> 2] >>> 24 - 8 * (k % 4) & 255) << 24 - 8 * ((j + k) % 4);
else if (65535 < e.length)
for (k = 0; k < a; k += 4)
c[j + k >>> 2] = e[k >>> 2];
else
c.push.apply(c, e);
this.sigBytes += a;
return this
},
clamp: function() {
var a = this.words
, c = this.sigBytes;
a[c >>> 2] &= 4294967295 << 32 - 8 * (c % 4);
a.length = u.ceil(c / 4)
},
clone: function() {
var a = t.clone.call(this);
a.words = this.words.slice(0);
return a
},
random: function(a) {
for (var c = [], e = 0; e < a; e += 4)
c.push(4294967296 * u.random() | 0);
return new r.init(c,a)
}
})
, w = d.enc = {}
, v = w.Hex = {
stringify: function(a) {
var c = a.words;
a = a.sigBytes;
for (var e = [], j = 0; j < a; j++) {
var k = c[j >>> 2] >>> 24 - 8 * (j % 4) & 255;
e.push((k >>> 4).toString(16));
e.push((k & 15).toString(16))
}
return e.join("")
},
parse: function(a) {
for (var c = a.length, e = [], j = 0; j < c; j += 2)
e[j >>> 3] |= parseInt(a.substr(j, 2), 16) << 24 - 4 * (j % 8);
return new r.init(e,c / 2)
}
}
, b = w.Latin1 = {
stringify: function(a) {
var c = a.words;
a = a.sigBytes;
for (var e = [], j = 0; j < a; j++)
e.push(String.fromCharCode(c[j >>> 2] >>> 24 - 8 * (j % 4) & 255));
return e.join("")
},
parse: function(a) {
for (var c = a.length, e = [], j = 0; j < c; j++)
e[j >>> 2] |= (a.charCodeAt(j) & 255) << 24 - 8 * (j % 4);
return new r.init(e,c)
}
}
, x = w.Utf8 = {
stringify: function(a) {
try {
return decodeURIComponent(escape(b.stringify(a)))
} catch (c) {
throw Error("Malformed UTF-8 data")
}
},
parse: function(a) {
return b.parse(unescape(encodeURIComponent(a)))
}
}
, q = l.BufferedBlockAlgorithm = t.extend({
reset: function() {
this.i5n = new r.init;
this.yL1x = 0
},
AE2x: function(a) {
"string" == typeof a && (a = x.parse(a));
this.i5n.concat(a);
this.yL1x += a.sigBytes
},
mD8v: function(a) {
var c = this.i5n
, e = c.words
, j = c.sigBytes
, k = this.blockSize
, b = j / (4 * k)
, b = a ? u.ceil(b) : u.max((b | 0) - this.Vr0x, 0);
a = b * k;
j = u.min(4 * a, j);
if (a) {
for (var q = 0; q < a; q += k)
this.tt0x(e, q);
q = e.splice(0, a);
c.sigBytes -= j
}
return new r.init(q,j)
},
clone: function() {
var a = t.clone.call(this);
a.i5n = this.i5n.clone();
return a
},
Vr0x: 0
});
l.Hasher = q.extend({
cfg: t.extend(),
init: function(a) {
this.cfg = this.cfg.extend(a);
this.reset()
},
reset: function() {
q.reset.call(this);
this.mj8b()
},
update: function(a) {
this.AE2x(a);
this.mD8v();
return this
},
finalize: function(a) {
a && this.AE2x(a);
return this.nZ9Q()
},
blockSize: 16,
mE8w: function(a) {
return function(b, e) {
return (new a.init(e)).finalize(b)
}
},
yK1x: function(a) {
return function(b, e) {
return (new n.HMAC.init(a,e)).finalize(b)
}
}
});
var n = d.algo = {};
return d
}(Math);
(function() {
var u = CryptoJS
, p = u.lib.WordArray;
u.enc.Base64 = {
stringify: function(d) {
var l = d.words
, p = d.sigBytes
, t = this.bD6x;
d.clamp();
d = [];
for (var r = 0; r < p; r += 3)
for (var w = (l[r >>> 2] >>> 24 - 8 * (r % 4) & 255) << 16 | (l[r + 1 >>> 2] >>> 24 - 8 * ((r + 1) % 4) & 255) << 8 | l[r + 2 >>> 2] >>> 24 - 8 * ((r + 2) % 4) & 255, v = 0; 4 > v && r + .75 * v < p; v++)
d.push(t.charAt(w >>> 6 * (3 - v) & 63));
if (l = t.charAt(64))
for (; d.length % 4; )
d.push(l);
return d.join("")
},
parse: function(d) {
var l = d.length
, s = this.bD6x
, t = s.charAt(64);
t && (t = d.indexOf(t),
-1 != t && (l = t));
for (var t = [], r = 0, w = 0; w < l; w++)
if (w % 4) {
var v = s.indexOf(d.charAt(w - 1)) << 2 * (w % 4)
, b = s.indexOf(d.charAt(w)) >>> 6 - 2 * (w % 4);
t[r >>> 2] |= (v | b) << 24 - 8 * (r % 4);
r++
}
return p.create(t, r)
},
bD6x: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
}
}
)();
(function(u) {
function p(b, n, a, c, e, j, k) {
b = b + (n & a | ~n & c) + e + k;
return (b << j | b >>> 32 - j) + n
}
function d(b, n, a, c, e, j, k) {
b = b + (n & c | a & ~c) + e + k;
return (b << j | b >>> 32 - j) + n
}
function l(b, n, a, c, e, j, k) {
b = b + (n ^ a ^ c) + e + k;
return (b << j | b >>> 32 - j) + n
}
function s(b, n, a, c, e, j, k) {
b = b + (a ^ (n | ~c)) + e + k;
return (b << j | b >>> 32 - j) + n
}
for (var t = CryptoJS, r = t.lib, w = r.WordArray, v = r.Hasher, r = t.algo, b = [], x = 0; 64 > x; x++)
b[x] = 4294967296 * u.abs(u.sin(x + 1)) | 0;
r = r.MD5 = v.extend({
mj8b: function() {
this.cU6O = new w.init([1732584193, 4023233417, 2562383102, 271733878])
},
tt0x: function(q, n) {
for (var a = 0; 16 > a; a++) {
var c = n + a
, e = q[c];
q[c] = (e << 8 | e >>> 24) & 16711935 | (e << 24 | e >>> 8) & 4278255360
}
var a = this.cU6O.words
, c = q[n + 0]
, e = q[n + 1]
, j = q[n + 2]
, k = q[n + 3]
, z = q[n + 4]
, r = q[n + 5]
, t = q[n + 6]
, w = q[n + 7]
, v = q[n + 8]
, A = q[n + 9]
, B = q[n + 10]
, C = q[n + 11]
, u = q[n + 12]
, D = q[n + 13]
, E = q[n + 14]
, x = q[n + 15]
, f = a[0]
, m = a[1]
, g = a[2]
, h = a[3]
, f = p(f, m, g, h, c, 7, b[0])
, h = p(h, f, m, g, e, 12, b[1])
, g = p(g, h, f, m, j, 17, b[2])
, m = p(m, g, h, f, k, 22, b[3])
, f = p(f, m, g, h, z, 7, b[4])
, h = p(h, f, m, g, r, 12, b[5])
, g = p(g, h, f, m, t, 17, b[6])
, m = p(m, g, h, f, w, 22, b[7])
, f = p(f, m, g, h, v, 7, b[8])
, h = p(h, f, m, g, A, 12, b[9])
, g = p(g, h, f, m, B, 17, b[10])
, m = p(m, g, h, f, C, 22, b[11])
, f = p(f, m, g, h, u, 7, b[12])
, h = p(h, f, m, g, D, 12, b[13])
, g = p(g, h, f, m, E, 17, b[14])
, m = p(m, g, h, f, x, 22, b[15])
, f = d(f, m, g, h, e, 5, b[16])
, h = d(h, f, m, g, t, 9, b[17])
, g = d(g, h, f, m, C, 14, b[18])
, m = d(m, g, h, f, c, 20, b[19])
, f = d(f, m, g, h, r, 5, b[20])
, h = d(h, f, m, g, B, 9, b[21])
, g = d(g, h, f, m, x, 14, b[22])
, m = d(m, g, h, f, z, 20, b[23])
, f = d(f, m, g, h, A, 5, b[24])
, h = d(h, f, m, g, E, 9, b[25])
, g = d(g, h, f, m, k, 14, b[26])
, m = d(m, g, h, f, v, 20, b[27])
, f = d(f, m, g, h, D, 5, b[28])
, h = d(h, f, m, g, j, 9, b[29])
, g = d(g, h, f, m, w, 14, b[30])
, m = d(m, g, h, f, u, 20, b[31])
, f = l(f, m, g, h, r, 4, b[32])
, h = l(h, f, m, g, v, 11, b[33])
, g = l(g, h, f, m, C, 16, b[34])
, m = l(m, g, h, f, E, 23, b[35])
, f = l(f, m, g, h, e, 4, b[36])
, h = l(h, f, m, g, z, 11, b[37])
, g = l(g, h, f, m, w, 16, b[38])
, m = l(m, g, h, f, B, 23, b[39])
, f = l(f, m, g, h, D, 4, b[40])
, h = l(h, f, m, g, c, 11, b[41])
, g = l(g, h, f, m, k, 16, b[42])
, m = l(m, g, h, f, t, 23, b[43])
, f = l(f, m, g, h, A, 4, b[44])
, h = l(h, f, m, g, u, 11, b[45])
, g = l(g, h, f, m, x, 16, b[46])
, m = l(m, g, h, f, j, 23, b[47])
, f = s(f, m, g, h, c, 6, b[48])
, h = s(h, f, m, g, w, 10, b[49])
, g = s(g, h, f, m, E, 15, b[50])
, m = s(m, g, h, f, r, 21, b[51])
, f = s(f, m, g, h, u, 6, b[52])
, h = s(h, f, m, g, k, 10, b[53])
, g = s(g, h, f, m, B, 15, b[54])
, m = s(m, g, h, f, e, 21, b[55])
, f = s(f, m, g, h, v, 6, b[56])
, h = s(h, f, m, g, x, 10, b[57])
, g = s(g, h, f, m, t, 15, b[58])
, m = s(m, g, h, f, D, 21, b[59])
, f = s(f, m, g, h, z, 6, b[60])
, h = s(h, f, m, g, C, 10, b[61])
, g = s(g, h, f, m, j, 15, b[62])
, m = s(m, g, h, f, A, 21, b[63]);
a[0] = a[0] + f | 0;
a[1] = a[1] + m | 0;
a[2] = a[2] + g | 0;
a[3] = a[3] + h | 0
},
nZ9Q: function() {
var b = this.i5n
, n = b.words
, a = 8 * this.yL1x
, c = 8 * b.sigBytes;
n[c >>> 5] |= 128 << 24 - c % 32;
var e = u.floor(a / 4294967296);
n[(c + 64 >>> 9 << 4) + 15] = (e << 8 | e >>> 24) & 16711935 | (e << 24 | e >>> 8) & 4278255360;
n[(c + 64 >>> 9 << 4) + 14] = (a << 8 | a >>> 24) & 16711935 | (a << 24 | a >>> 8) & 4278255360;
b.sigBytes = 4 * (n.length + 1);
this.mD8v();
b = this.cU6O;
n = b.words;
for (a = 0; 4 > a; a++)
c = n[a],
n[a] = (c << 8 | c >>> 24) & 16711935 | (c << 24 | c >>> 8) & 4278255360;
return b
},
clone: function() {
var b = v.clone.call(this);
b.cU6O = this.cU6O.clone();
return b
}
});
t.MD5 = v.mE8w(r);
t.HmacMD5 = v.yK1x(r)
}
)(Math);
(function() {
var u = CryptoJS
, p = u.lib
, d = p.Base
, l = p.WordArray
, p = u.algo
, s = p.EvpKDF = d.extend({
cfg: d.extend({
keySize: 4,
hasher: p.MD5,
iterations: 1
}),
init: function(d) {
this.cfg = this.cfg.extend(d)
},
compute: function(d, r) {
for (var p = this.cfg, s = p.hasher.create(), b = l.create(), u = b.words, q = p.keySize, p = p.iterations; u.length < q; ) {
n && s.update(n);
var n = s.update(d).finalize(r);
s.reset();
for (var a = 1; a < p; a++)
n = s.finalize(n),
s.reset();
b.concat(n)
}
b.sigBytes = 4 * q;
return b
}
});
u.EvpKDF = function(d, l, p) {
return s.create(p).compute(d, l)
}
}
)();
CryptoJS.lib.Cipher || function(u) {
var p = CryptoJS
, d = p.lib
, l = d.Base
, s = d.WordArray
, t = d.BufferedBlockAlgorithm
, r = p.enc.Base64
, w = p.algo.EvpKDF
, v = d.Cipher = t.extend({
cfg: l.extend(),
createEncryptor: function(e, a) {
return this.create(this.IX7Q, e, a)
},
createDecryptor: function(e, a) {
return this.create(this.brC4G, e, a)
},
init: function(e, a, b) {
this.cfg = this.cfg.extend(b);
this.Vv0x = e;
this.J5O = a;
this.reset()
},
reset: function() {
t.reset.call(this);
this.mj8b()
},
process: function(e) {
this.AE2x(e);
return this.mD8v()
},
finalize: function(e) {
e && this.AE2x(e);
return this.nZ9Q()
},
keySize: 4,
ivSize: 4,
IX7Q: 1,
brC4G: 2,
mE8w: function(e) {
return {
encrypt: function(b, k, d) {
return ("string" == typeof k ? c : a).encrypt(e, b, k, d)
},
decrypt: function(b, k, d) {
return ("string" == typeof k ? c : a).decrypt(e, b, k, d)
}
}
}
});
d.StreamCipher = v.extend({
nZ9Q: function() {
return this.mD8v(!0)
},
blockSize: 1
});
var b = p.mode = {}
, x = function(e, a, b) {
var c = this.tB0x;
c ? this.tB0x = u : c = this.DB2x;
for (var d = 0; d < b; d++)
e[a + d] ^= c[d]
}
, q = (d.BlockCipherMode = l.extend({
createEncryptor: function(e, a) {
return this.Encryptor.create(e, a)
},
createDecryptor: function(e, a) {
return this.Decryptor.create(e, a)
},
init: function(e, a) {
this.ud0x = e;
this.tB0x = a
}
})).extend();
q.Encryptor = q.extend({
processBlock: function(e, a) {
var b = this.ud0x
, c = b.blockSize;
x.call(this, e, a, c);
b.encryptBlock(e, a);
this.DB2x = e.slice(a, a + c)
}
});
q.Decryptor = q.extend({
processBlock: function(e, a) {
var b = this.ud0x
, c = b.blockSize
, d = e.slice(a, a + c);
b.decryptBlock(e, a);
x.call(this, e, a, c);
this.DB2x = d
}
});
b = b.CBC = q;
q = (p.pad = {}).Pkcs7 = {
pad: function(a, b) {
for (var c = 4 * b, c = c - a.sigBytes % c, d = c << 24 | c << 16 | c << 8 | c, l = [], n = 0; n < c; n += 4)
l.push(d);
c = s.create(l, c);
a.concat(c)
},
unpad: function(a) {
a.sigBytes -= a.words[a.sigBytes - 1 >>> 2] & 255
}
};
d.BlockCipher = v.extend({
cfg: v.cfg.extend({
mode: b,
padding: q
}),
reset: function() {
v.reset.call(this);
var a = this.cfg
, b = a.iv
, a = a.mode;
if (this.Vv0x == this.IX7Q)
var c = a.createEncryptor;
else
c = a.createDecryptor,
this.Vr0x = 1;
this.eU7N = c.call(a, this, b && b.words)
},
tt0x: function(a, b) {
this.eU7N.processBlock(a, b)
},
nZ9Q: function() {
var a = this.cfg.padding;
if (this.Vv0x == this.IX7Q) {
a.pad(this.i5n, this.blockSize);
var b = this.mD8v(!0)
} else
b = this.mD8v(!0),
a.unpad(b);
return b
},
blockSize: 4
});
var n = d.CipherParams = l.extend({
init: function(a) {
this.mixIn(a)
},
toString: function(a) {
return (a || this.formatter).stringify(this)
}
})
, b = (p.format = {}).OpenSSL = {
stringify: function(a) {
var b = a.ciphertext;
a = a.salt;
return (a ? s.create([1398893684, 1701076831]).concat(a).concat(b) : b).toString(r)
},
parse: function(a) {
a = r.parse(a);
var b = a.words;
if (1398893684 == b[0] && 1701076831 == b[1]) {
var c = s.create(b.slice(2, 4));
b.splice(0, 4);
a.sigBytes -= 16
}
return n.create({
ciphertext: a,
salt: c
})
}
}
, a = d.SerializableCipher = l.extend({
cfg: l.extend({
format: b
}),
encrypt: function(a, b, c, d) {
d = this.cfg.extend(d);
var l = a.createEncryptor(c, d);
b = l.finalize(b);
l = l.cfg;
return n.create({
ciphertext: b,
key: c,
iv: l.iv,
algorithm: a,
mode: l.mode,
padding: l.padding,
blockSize: a.blockSize,
formatter: d.format
})
},
decrypt: function(a, b, c, d) {
d = this.cfg.extend(d);
b = this.Hf3x(b, d.format);
return a.createDecryptor(c, d).finalize(b.ciphertext)
},
Hf3x: function(a, b) {
return "string" == typeof a ? b.parse(a, this) : a
}
})
, p = (p.kdf = {}).OpenSSL = {
execute: function(a, b, c, d) {
d || (d = s.random(8));
a = w.create({
keySize: b + c
}).compute(a, d);
c = s.create(a.words.slice(b), 4 * c);
a.sigBytes = 4 * b;
return n.create({
key: a,
iv: c,
salt: d
})
}
}
, c = d.PasswordBasedCipher = a.extend({
cfg: a.cfg.extend({
kdf: p
}),
encrypt: function(b, c, d, l) {
l = this.cfg.extend(l);
d = l.kdf.execute(d, b.keySize, b.ivSize);
l.iv = d.iv;
b = a.encrypt.call(this, b, c, d.key, l);
b.mixIn(d);
return b
},
decrypt: function(b, c, d, l) {
l = this.cfg.extend(l);
c = this.Hf3x(c, l.format);
d = l.kdf.execute(d, b.keySize, b.ivSize, c.salt);
l.iv = d.iv;
return a.decrypt.call(this, b, c, d.key, l)
}
})
}();
(function() {
for (var u = CryptoJS, p = u.lib.BlockCipher, d = u.algo, l = [], s = [], t = [], r = [], w = [], v = [], b = [], x = [], q = [], n = [], a = [], c = 0; 256 > c; c++)
a[c] = 128 > c ? c << 1 : c << 1 ^ 283;
for (var e = 0, j = 0, c = 0; 256 > c; c++) {
var k = j ^ j << 1 ^ j << 2 ^ j << 3 ^ j << 4
, k = k >>> 8 ^ k & 255 ^ 99;
l[e] = k;
s[k] = e;
var z = a[e]
, F = a[z]
, G = a[F]
, y = 257 * a[k] ^ 16843008 * k;
t[e] = y << 24 | y >>> 8;
r[e] = y << 16 | y >>> 16;
w[e] = y << 8 | y >>> 24;
v[e] = y;
y = 16843009 * G ^ 65537 * F ^ 257 * z ^ 16843008 * e;
b[k] = y << 24 | y >>> 8;
x[k] = y << 16 | y >>> 16;
q[k] = y << 8 | y >>> 24;
n[k] = y;
e ? (e = z ^ a[a[a[G ^ z]]],
j ^= a[a[j]]) : e = j = 1
}
var H = [0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54]
, d = d.AES = p.extend({
mj8b: function() {
for (var a = this.J5O, c = a.words, d = a.sigBytes / 4, a = 4 * ((this.bbn1x = d + 6) + 1), e = this.bsg4k = [], j = 0; j < a; j++)
if (j < d)
e[j] = c[j];
else {
var k = e[j - 1];
j % d ? 6 < d && 4 == j % d && (k = l[k >>> 24] << 24 | l[k >>> 16 & 255] << 16 | l[k >>> 8 & 255] << 8 | l[k & 255]) : (k = k << 8 | k >>> 24,
k = l[k >>> 24] << 24 | l[k >>> 16 & 255] << 16 | l[k >>> 8 & 255] << 8 | l[k & 255],
k ^= H[j / d | 0] << 24);
e[j] = e[j - d] ^ k
}
c = this.bsh4l = [];
for (d = 0; d < a; d++)
j = a - d,
k = d % 4 ? e[j] : e[j - 4],
c[d] = 4 > d || 4 >= j ? k : b[l[k >>> 24]] ^ x[l[k >>> 16 & 255]] ^ q[l[k >>> 8 & 255]] ^ n[l[k & 255]]
},
encryptBlock: function(a, b) {
this.DE2x(a, b, this.bsg4k, t, r, w, v, l)
},
decryptBlock: function(a, c) {
var d = a[c + 1];
a[c + 1] = a[c + 3];
a[c + 3] = d;
this.DE2x(a, c, this.bsh4l, b, x, q, n, s);
d = a[c + 1];
a[c + 1] = a[c + 3];
a[c + 3] = d
},
DE2x: function(a, b, c, d, e, j, l, f) {
for (var m = this.bbn1x, g = a[b] ^ c[0], h = a[b + 1] ^ c[1], k = a[b + 2] ^ c[2], n = a[b + 3] ^ c[3], p = 4, r = 1; r < m; r++)
var q = d[g >>> 24] ^ e[h >>> 16 & 255] ^ j[k >>> 8 & 255] ^ l[n & 255] ^ c[p++]
, s = d[h >>> 24] ^ e[k >>> 16 & 255] ^ j[n >>> 8 & 255] ^ l[g & 255] ^ c[p++]
, t = d[k >>> 24] ^ e[n >>> 16 & 255] ^ j[g >>> 8 & 255] ^ l[h & 255] ^ c[p++]
, n = d[n >>> 24] ^ e[g >>> 16 & 255] ^ j[h >>> 8 & 255] ^ l[k & 255] ^ c[p++]
, g = q
, h = s
, k = t;
q = (f[g >>> 24] << 24 | f[h >>> 16 & 255] << 16 | f[k >>> 8 & 255] << 8 | f[n & 255]) ^ c[p++];
s = (f[h >>> 24] << 24 | f[k >>> 16 & 255] << 16 | f[n >>> 8 & 255] << 8 | f[g & 255]) ^ c[p++];
t = (f[k >>> 24] << 24 | f[n >>> 16 & 255] << 16 | f[g >>> 8 & 255] << 8 | f[h & 255]) ^ c[p++];
n = (f[n >>> 24] << 24 | f[g >>> 16 & 255] << 16 | f[h >>> 8 & 255] << 8 | f[k & 255]) ^ c[p++];
a[b] = q;
a[b + 1] = s;
a[b + 2] = t;
a[b + 3] = n
},
keySize: 8
});
u.AES = p.mE8w(d)
}
)();
function RSAKeyPair(a, b, c) {
this.e = biFromHex(a),
this.d = biFromHex(b),
this.m = biFromHex(c),
this.chunkSize = 2 * biHighIndex(this.m),
this.radix = 16,
this.barrett = new BarrettMu(this.m)
}
function twoDigit(a) {
return (10 > a ? "0" : "") + String(a)
}
function encryptedString(a, b) {
for (var f, g, h, i, j, k, l, c = new Array, d = b.length, e = 0; d > e; )
c[e] = b.charCodeAt(e),
e++;
for (; 0 != c.length % a.chunkSize; )
c[e++] = 0;
for (f = c.length,
g = "",
e = 0; f > e; e += a.chunkSize) {
for (j = new BigInt,
h = 0,
i = e; i < e + a.chunkSize; ++h)
j.digits[h] = c[i++],
j.digits[h] += c[i++] << 8;
k = a.barrett.powMod(j, a.e),
l = 16 == a.radix ? biToHex(k) : biToString(k, a.radix),
g += l + " "
}
return g.substring(0, g.length - 1)
}
function decryptedString(a, b) {
var e, f, g, h, c = b.split(" "), d = "";
for (e = 0; e < c.length; ++e)
for (h = 16 == a.radix ? biFromHex(c[e]) : biFromString(c[e], a.radix),
g = a.barrett.powMod(h, a.d),
f = 0; f <= biHighIndex(g); ++f)
d += String.fromCharCode(255 & g.digits[f], g.digits[f] >> 8);
return 0 == d.charCodeAt(d.length - 1) && (d = d.substring(0, d.length - 1)),
d
}
function setMaxDigits(a) {
maxDigits = a,
ZERO_ARRAY = new Array(maxDigits);
for (var b = 0; b < ZERO_ARRAY.length; b++)
ZERO_ARRAY[b] = 0;
bigZero = new BigInt,
bigOne = new BigInt,
bigOne.digits[0] = 1
}
function BigInt(a) {
this.digits = "boolean" == typeof a && 1 == a ? null : ZERO_ARRAY.slice(0),
this.isNeg = !1
}
function biFromDecimal(a) {
for (var d, e, f, b = "-" == a.charAt(0), c = b ? 1 : 0; c < a.length && "0" == a.charAt(c); )
++c;
if (c == a.length)
d = new BigInt;
else {
for (e = a.length - c,
f = e % dpl10,
0 == f && (f = dpl10),
d = biFromNumber(Number(a.substr(c, f))),
c += f; c < a.length; )
d = biAdd(biMultiply(d, lr10), biFromNumber(Number(a.substr(c, dpl10)))),
c += dpl10;
d.isNeg = b
}
return d
}
function biCopy(a) {
var b = new BigInt(!0);
return b.digits = a.digits.slice(0),
b.isNeg = a.isNeg,
b
}
function biFromNumber(a) {
var c, b = new BigInt;
for (b.isNeg = 0 > a,
a = Math.abs(a),
c = 0; a > 0; )
b.digits[c++] = a & maxDigitVal,
a >>= biRadixBits;
return b
}
function reverseStr(a) {
var c, b = "";
for (c = a.length - 1; c > -1; --c)
b += a.charAt(c);
return b
}
function biToString(a, b) {
var d, e, c = new BigInt;
for (c.digits[0] = b,
d = biDivideModulo(a, c),
e = hexatrigesimalToChar[d[1].digits[0]]; 1 == biCompare(d[0], bigZero); )
d = biDivideModulo(d[0], c),
digit = d[1].digits[0],
e += hexatrigesimalToChar[d[1].digits[0]];
return (a.isNeg ? "-" : "") + reverseStr(e)
}
function biToDecimal(a) {
var c, d, b = new BigInt;
for (b.digits[0] = 10,
c = biDivideModulo(a, b),
d = String(c[1].digits[0]); 1 == biCompare(c[0], bigZero); )
c = biDivideModulo(c[0], b),
d += String(c[1].digits[0]);
return (a.isNeg ? "-" : "") + reverseStr(d)
}
function digitToHex(a) {
var b = 15
, c = "";
for (i = 0; 4 > i; ++i)
c += hexToChar[a & b],
a >>>= 4;
return reverseStr(c)
}
function biToHex(a) {
var d, b = "";
for (biHighIndex(a),
d = biHighIndex(a); d > -1; --d)
b += digitToHex(a.digits[d]);
return b
}
function charToHex(a) {
var h, b = 48, c = b + 9, d = 97, e = d + 25, f = 65, g = 90;
return h = a >= b && c >= a ? a - b : a >= f && g >= a ? 10 + a - f : a >= d && e >= a ? 10 + a - d : 0
}
function hexToDigit(a) {
var d, b = 0, c = Math.min(a.length, 4);
for (d = 0; c > d; ++d)
b <<= 4,
b |= charToHex(a.charCodeAt(d));
return b
}
function biFromHex(a) {
var d, e, b = new BigInt, c = a.length;
for (d = c,
e = 0; d > 0; d -= 4,
++e)
b.digits[e] = hexToDigit(a.substr(Math.max(d - 4, 0), Math.min(d, 4)));
return b
}
function biFromString(a, b) {
var g, h, i, j, c = "-" == a.charAt(0), d = c ? 1 : 0, e = new BigInt, f = new BigInt;
for (f.digits[0] = 1,
g = a.length - 1; g >= d; g--)
h = a.charCodeAt(g),
i = charToHex(h),
j = biMultiplyDigit(f, i),
e = biAdd(e, j),
f = biMultiplyDigit(f, b);
return e.isNeg = c,
e
}
function biDump(a) {
return (a.isNeg ? "-" : "") + a.digits.join(" ")
}
function biAdd(a, b) {
var c, d, e, f;
if (a.isNeg != b.isNeg)
b.isNeg = !b.isNeg,
c = biSubtract(a, b),
b.isNeg = !b.isNeg;
else {
for (c = new BigInt,
d = 0,
f = 0; f < a.digits.length; ++f)
e = a.digits[f] + b.digits[f] + d,
c.digits[f] = 65535 & e,
d = Number(e >= biRadix);
c.isNeg = a.isNeg
}
return c
}
function biSubtract(a, b) {
var c, d, e, f;
if (a.isNeg != b.isNeg)
b.isNeg = !b.isNeg,
c = biAdd(a, b),
b.isNeg = !b.isNeg;
else {
for (c = new BigInt,
e = 0,
f = 0; f < a.digits.length; ++f)
d = a.digits[f] - b.digits[f] + e,
c.digits[f] = 65535 & d,
c.digits[f] < 0 && (c.digits[f] += biRadix),
e = 0 - Number(0 > d);
if (-1 == e) {
for (e = 0,
f = 0; f < a.digits.length; ++f)
d = 0 - c.digits[f] + e,
c.digits[f] = 65535 & d,
c.digits[f] < 0 && (c.digits[f] += biRadix),
e = 0 - Number(0 > d);
c.isNeg = !a.isNeg
} else
c.isNeg = a.isNeg
}
return c
}
function biHighIndex(a) {
for (var b = a.digits.length - 1; b > 0 && 0 == a.digits[b]; )
--b;
return b
}
function biNumBits(a) {
var e, b = biHighIndex(a), c = a.digits[b], d = (b + 1) * bitsPerDigit;
for (e = d; e > d - bitsPerDigit && 0 == (32768 & c); --e)
c <<= 1;
return e
}
function biMultiply(a, b) {
var d, h, i, k, c = new BigInt, e = biHighIndex(a), f = biHighIndex(b);
for (k = 0; f >= k; ++k) {
for (d = 0,
i = k,
j = 0; e >= j; ++j,
++i)
h = c.digits[i] + a.digits[j] * b.digits[k] + d,
c.digits[i] = h & maxDigitVal,
d = h >>> biRadixBits;
c.digits[k + e + 1] = d
}
return c.isNeg = a.isNeg != b.isNeg,
c
}
function biMultiplyDigit(a, b) {
var c, d, e, f;
for (result = new BigInt,
c = biHighIndex(a),
d = 0,
f = 0; c >= f; ++f)
e = result.digits[f] + a.digits[f] * b + d,
result.digits[f] = e & maxDigitVal,
d = e >>> biRadixBits;
return result.digits[1 + c] = d,
result
}
function arrayCopy(a, b, c, d, e) {
var g, h, f = Math.min(b + e, a.length);
for (g = b,
h = d; f > g; ++g,
++h)
c[h] = a[g]
}
function biShiftLeft(a, b) {
var e, f, g, h, c = Math.floor(b / bitsPerDigit), d = new BigInt;
for (arrayCopy(a.digits, 0, d.digits, c, d.digits.length - c),
e = b % bitsPerDigit,
f = bitsPerDigit - e,
g = d.digits.length - 1,
h = g - 1; g > 0; --g,
--h)
d.digits[g] = d.digits[g] << e & maxDigitVal | (d.digits[h] & highBitMasks[e]) >>> f;
return d.digits[0] = d.digits[g] << e & maxDigitVal,
d.isNeg = a.isNeg,
d
}
function biShiftRight(a, b) {
var e, f, g, h, c = Math.floor(b / bitsPerDigit), d = new BigInt;
for (arrayCopy(a.digits, c, d.digits, 0, a.digits.length - c),
e = b % bitsPerDigit,
f = bitsPerDigit - e,
g = 0,
h = g + 1; g < d.digits.length - 1; ++g,
++h)
d.digits[g] = d.digits[g] >>> e | (d.digits[h] & lowBitMasks[e]) << f;
return d.digits[d.digits.length - 1] >>>= e,
d.isNeg = a.isNeg,
d
}
function biMultiplyByRadixPower(a, b) {
var c = new BigInt;
return arrayCopy(a.digits, 0, c.digits, b, c.digits.length - b),
c
}
function biDivideByRadixPower(a, b) {
var c = new BigInt;
return arrayCopy(a.digits, b, c.digits, 0, c.digits.length - b),
c
}
function biModuloByRadixPower(a, b) {
var c = new BigInt;
return arrayCopy(a.digits, 0, c.digits, 0, b),
c
}
function biCompare(a, b) {
if (a.isNeg != b.isNeg)
return 1 - 2 * Number(a.isNeg);
for (var c = a.digits.length - 1; c >= 0; --c)
if (a.digits[c] != b.digits[c])
return a.isNeg ? 1 - 2 * Number(a.digits[c] > b.digits[c]) : 1 - 2 * Number(a.digits[c] < b.digits[c]);
return 0
}
function biDivideModulo(a, b) {
var f, g, h, i, j, k, l, m, n, o, p, q, r, s, c = biNumBits(a), d = biNumBits(b), e = b.isNeg;
if (d > c)
return a.isNeg ? (f = biCopy(bigOne),
f.isNeg = !b.isNeg,
a.isNeg = !1,
b.isNeg = !1,
g = biSubtract(b, a),
a.isNeg = !0,
b.isNeg = e) : (f = new BigInt,
g = biCopy(a)),
new Array(f,g);
for (f = new BigInt,
g = a,
h = Math.ceil(d / bitsPerDigit) - 1,
i = 0; b.digits[h] < biHalfRadix; )
b = biShiftLeft(b, 1),
++i,
++d,
h = Math.ceil(d / bitsPerDigit) - 1;
for (g = biShiftLeft(g, i),
c += i,
j = Math.ceil(c / bitsPerDigit) - 1,
k = biMultiplyByRadixPower(b, j - h); -1 != biCompare(g, k); )
++f.digits[j - h],
g = biSubtract(g, k);
for (l = j; l > h; --l) {
for (m = l >= g.digits.length ? 0 : g.digits[l],
n = l - 1 >= g.digits.length ? 0 : g.digits[l - 1],
o = l - 2 >= g.digits.length ? 0 : g.digits[l - 2],
p = h >= b.digits.length ? 0 : b.digits[h],
q = h - 1 >= b.digits.length ? 0 : b.digits[h - 1],
f.digits[l - h - 1] = m == p ? maxDigitVal : Math.floor((m * biRadix + n) / p),
r = f.digits[l - h - 1] * (p * biRadix + q),
s = m * biRadixSquared + (n * biRadix + o); r > s; )
--f.digits[l - h - 1],
r = f.digits[l - h - 1] * (p * biRadix | q),
s = m * biRadix * biRadix + (n * biRadix + o);
k = biMultiplyByRadixPower(b, l - h - 1),
g = biSubtract(g, biMultiplyDigit(k, f.digits[l - h - 1])),
g.isNeg && (g = biAdd(g, k),
--f.digits[l - h - 1])
}
return g = biShiftRight(g, i),
f.isNeg = a.isNeg != e,
a.isNeg && (f = e ? biAdd(f, bigOne) : biSubtract(f, bigOne),
b = biShiftRight(b, i),
g = biSubtract(b, g)),
0 == g.digits[0] && 0 == biHighIndex(g) && (g.isNeg = !1),
new Array(f,g)
}
function biDivide(a, b) {
return biDivideModulo(a, b)[0]
}
function biModulo(a, b) {
return biDivideModulo(a, b)[1]
}
function biMultiplyMod(a, b, c) {
return biModulo(biMultiply(a, b), c)
}
function biPow(a, b) {
for (var c = bigOne, d = a; ; ) {
if (0 != (1 & b) && (c = biMultiply(c, d)),
b >>= 1,
0 == b)
break;
d = biMultiply(d, d)
}
return c
}
function biPowMod(a, b, c) {
for (var d = bigOne, e = a, f = b; ; ) {
if (0 != (1 & f.digits[0]) && (d = biMultiplyMod(d, e, c)),
f = biShiftRight(f, 1),
0 == f.digits[0] && 0 == biHighIndex(f))
break;
e = biMultiplyMod(e, e, c)
}
return d
}
function BarrettMu(a) {
this.modulus = biCopy(a),
this.k = biHighIndex(this.modulus) + 1;
var b = new BigInt;
b.digits[2 * this.k] = 1,
this.mu = biDivide(b, this.modulus),
this.bkplus1 = new BigInt,
this.bkplus1.digits[this.k + 1] = 1,
this.modulo = BarrettMu_modulo,
this.multiplyMod = BarrettMu_multiplyMod,
this.powMod = BarrettMu_powMod
}
function BarrettMu_modulo(a) {
var i, b = biDivideByRadixPower(a, this.k - 1), c = biMultiply(b, this.mu), d = biDivideByRadixPower(c, this.k + 1), e = biModuloByRadixPower(a, this.k + 1), f = biMultiply(d, this.modulus), g = biModuloByRadixPower(f, this.k + 1), h = biSubtract(e, g);
for (h.isNeg && (h = biAdd(h, this.bkplus1)),
i = biCompare(h, this.modulus) >= 0; i; )
h = biSubtract(h, this.modulus),
i = biCompare(h, this.modulus) >= 0;
return h
}
function BarrettMu_multiplyMod(a, b) {
var c = biMultiply(a, b);
return this.modulo(c)
}
function BarrettMu_powMod(a, b) {
var d, e, c = new BigInt;
for (c.digits[0] = 1,
d = a,
e = b; ; ) {
if (0 != (1 & e.digits[0]) && (c = this.multiplyMod(c, d)),
e = biShiftRight(e, 1),
0 == e.digits[0] && 0 == biHighIndex(e))
break;
d = this.multiplyMod(d, d)
}
return c
}
var maxDigits, ZERO_ARRAY, bigZero, bigOne, dpl10, lr10, hexatrigesimalToChar, hexToChar, highBitMasks, lowBitMasks, biRadixBase = 2, biRadixBits = 16, bitsPerDigit = biRadixBits, biRadix = 65536, biHalfRadix = biRadix >>> 1, biRadixSquared = biRadix * biRadix, maxDigitVal = biRadix - 1, maxInteger = 9999999999999998;
setMaxDigits(20),
dpl10 = 15,
lr10 = biFromNumber(1e15),
hexatrigesimalToChar = new Array("0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"),
hexToChar = new Array("0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"),
highBitMasks = new Array(0,32768,49152,57344,61440,63488,64512,65024,65280,65408,65472,65504,65520,65528,65532,65534,65535),
lowBitMasks = new Array(0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535);
!function() {
function a(a) {
var d, e, b = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", c = "";
for (d = 0; a > d; d += 1)
e = Math.random() * b.length,
e = Math.floor(e),
c += b.charAt(e);
return c
}
function b(a, b) {
var c = CryptoJS.enc.Utf8.parse(b)
, d = CryptoJS.enc.Utf8.parse("0102030405060708")
, e = CryptoJS.enc.Utf8.parse(a)
, f = CryptoJS.AES.encrypt(e, c, {
iv: d,
mode: CryptoJS.mode.CBC
});
return f.toString()
}
function c(a, b, c) {
var d, e;
return setMaxDigits(131),
d = new RSAKeyPair(b,"",c),
e = encryptedString(d, a)
}
function d(d, e, f, g) {
var h = {}
, i = a(16);
return h.encText = b(d, g),
h.encText = b(h.encText, i),
h.encSecKey = c(i, e, f),
h
}
function e(a, b, d, e) {
var f = {};
return f.encText = c(a + e, b, d),
f
}
window.asrsea = d,
window.ecnonasr = e
}();
(function() {
window.NEJ = window.NEJ || {};
NEJ.O = {};
NEJ.R = [];
NEJ.F = function() {
return !1
}
;
NEJ.P = function(GI3x) {
if (!GI3x || !GI3x.length)
return null;
var beE2x = window;
for (var a = GI3x.split("."), l = a.length, i = a[0] == "window" ? 1 : 0; i < l; beE2x = beE2x[a[i]] = beE2x[a[i]] || {},
i++)
;
return beE2x
}
;
NEJ.Q = function(bM6G, GI3x) {
bM6G = bM6G || NEJ.O;
var bx6r = GI3x.split(".");
for (var i = 0, l = bx6r.length; i < l; i++) {
bM6G = bM6G[bx6r[i]];
if (!bM6G)
break
}
return bM6G
}
;
NEJ.C = function() {
var bBJ7C = function() {
return NEJ.O.toString.call(arguments[0]) != "[object Function]"
};
var bBK7D = function(D5I, bD6x) {
for (var x in bD6x)
if (D5I == bD6x[x])
return x;
return null
};
var bxR7K = {
cy6s: 0,
bn5s: 1,
bC6w: 2,
bW6Q: 3,
bK6E: 4,
fu7n: 5,
kO8G: 6,
ez6t: 7
}
, xl1x = {
cC6w: 0,
bp5u: 1,
bH6B: 2,
cg6a: 3,
bT6N: 4,
gS7L: 5,
lZ8R: 6,
fV7O: 7
};
return function() {
var ga7T = function() {
this.bCn7g();
return this.cy6s.apply(this, arguments)
};
ga7T.prototype.bCn7g = NEJ.F;
ga7T.prototype.cy6s = NEJ.F;
ga7T.M5R = function(Fs3x, bDm7f) {
if (bBJ7C(Fs3x))
return;
if (bDm7f == null || !!bDm7f)
NEJ.X(this, Fs3x, bBJ7C);
this.cuF0x = Fs3x;
this.ct6n = Fs3x.prototype;
var bL6F = function() {};
bL6F.prototype = Fs3x.prototype;
this.prototype = new bL6F;
var Gb3x = this.prototype;
Gb3x.constructor = this;
var cl6f;
for (var x in bxR7K) {
cl6f = bBK7D(bxR7K[x], xl1x);
if (!cl6f || !this.ct6n[x])
continue;
Gb3x[x] = function(Z5e) {
return function() {
this[Z5e].apply(this, arguments)
}
}(cl6f)
}
var Il7e = {};
for (var x in xl1x) {
cl6f = bBK7D(xl1x[x], bxR7K);
if (!cl6f || !this.ct6n[cl6f])
continue;
Il7e[cl6f] = Fs3x;
Gb3x[x] = function(Z5e) {
return function() {
var m5r, bL6F = this.bpQ4U[Z5e], bij2x = bL6F.prototype[Z5e];
this.bpQ4U[Z5e] = bL6F.cuF0x || Fs3x;
if (!!bij2x)
m5r = bij2x.apply(this, arguments);
this.bpQ4U[Z5e] = Fs3x;
return m5r
}
}(cl6f)
}
Gb3x.bCn7g = function() {
this.bpQ4U = NEJ.X({}, Il7e)
}
;
Gb3x.cQm3x = Gb3x.cC6w;
return Gb3x
}
;
return ga7T
}
}();
NEJ.X = function(gG7z, bU6O, eh6b) {
if (!gG7z || !bU6O)
return gG7z;
eh6b = eh6b || NEJ.F;
for (var x in bU6O) {
if (bU6O.hasOwnProperty(x) && !eh6b(bU6O[x], x))
gG7z[x] = bU6O[x]
}
return gG7z
}
;
NEJ.EX = function(gG7z, bU6O) {
if (!gG7z || !bU6O)
return gG7z;
for (var x in gG7z) {
if (gG7z.hasOwnProperty(x) && bU6O[x] != null)
gG7z[x] = bU6O[x]
}
return gG7z
}
;
var NZ9Q = Function.prototype;
NZ9Q.eO7H = function(lF8x, vm1x) {
var f = NEJ.F
, vm1x = vm1x || f
, lF8x = lF8x || f
, dE6y = this;
return function() {
var d5i = {
args: NEJ.R.slice.call(arguments, 0)
};
lF8x(d5i);
if (!d5i.stopped) {
d5i.value = dE6y.apply(this, d5i.args);
vm1x(d5i)
}
return d5i.value
}
}
;
NZ9Q.f5k = function() {
var bm5r = arguments
, gG7z = arguments[0]
, bkM3x = this;
return function() {
var vl1x = NEJ.R.slice.call(bm5r, 1);
NEJ.R.push.apply(vl1x, arguments);
return bkM3x.apply(gG7z || window, vl1x)
}
}
;
NZ9Q.eP7I = function() {
var bm5r = arguments
, gG7z = NEJ.R.shift.call(bm5r)
, bkM3x = this;
return function() {
NEJ.R.push.apply(arguments, bm5r);
return bkM3x.apply(gG7z || window, arguments)
}
}
;
var NZ9Q = String.prototype;
if (!NZ9Q.trim) {
NZ9Q.trim = function() {
var do6i = /(?:^\s+)|(?:\s+$)/g;
return function() {
return this.replace(do6i, "")
}
}()
}
if (!window.MWF)
window.MWF = NEJ;
if (!window.mwf)
window.mwf = NEJ.P("nej");
if (!window.console) {
NEJ.P("console").log = NEJ.F;
NEJ.P("console").error = NEJ.F
}
var lt, gt, amp, nbsp, quot, apos, copy, reg
}
)();
(function() {
var c5h = NEJ.P
, bd5i = NEJ.O
, fD7w = NEJ.R
, bs5x = NEJ.F
, a5f = c5h("nej.e")
, bl5q = c5h("nej.h")
, j5o = c5h("nej.u");
var Hb3x = function(i5n, t5y) {
try {
t5y = t5y.toLowerCase();
if (i5n === null)
return t5y == "null";
if (i5n === undefined)
return t5y == "undefined";
return bd5i.toString.call(i5n).toLowerCase() == "[object " + t5y + "]"
} catch (e) {
return !1
}
};
j5o.gV7O = function(i5n) {
return Hb3x(i5n, "function")
}
;
j5o.fO7H = function(i5n) {
return Hb3x(i5n, "string")
}
;
j5o.tT0x = function(i5n) {
return Hb3x(i5n, "number")
}
;
j5o.cMi3x = function(i5n) {
return Hb3x(i5n, "boolean")
}
;
j5o.DK2x = function(i5n) {
return Hb3x(i5n, "date")
}
;
j5o.ec6W = function(i5n) {
return Hb3x(i5n, "array")
}
;
j5o.mi8a = function(i5n) {
return Hb3x(i5n, "object")
}
;
j5o.fS7L = function() {
var do6i = /[^\x00-\xfff]/g;
return function(bq5v) {
return ("" + (bq5v || "")).replace(do6i, "**").length
}
}();
j5o.dx6r = function(k5p, q5v) {
var eh6b = j5o.gV7O(q5v) ? q5v : function(D5I) {
return D5I === q5v
}
, r5w = j5o.eV7O(k5p, eh6b);
return r5w != null ? r5w : -1
}
;
j5o.cMh3x = function() {
var bUU7N;
var VE0x = function(k5p, pT9K, qe9V) {
if (pT9K > qe9V)
return -1;
var Is7l = Math.ceil((pT9K + qe9V) / 2)
, m5r = bUU7N(k5p[Is7l], Is7l, k5p);
if (m5r == 0)
return Is7l;
if (m5r < 0)
return VE0x(k5p, pT9K, Is7l - 1);
return VE0x(k5p, Is7l + 1, qe9V)
};
return function(k5p, Mo8g) {
bUU7N = Mo8g || bs5x;
return VE0x(k5p, 0, k5p.length - 1)
}
}();
j5o.ox9o = function(k5p, cH6B, O5T) {
if (!k5p || !k5p.length || !j5o.gV7O(cH6B))
return null;
for (var i = k5p.length - 1; i >= 0; i--)
if (!!cH6B.call(O5T, k5p[i], i, k5p))
return i;
return null
}
;
j5o.bg5l = function(k5p, cH6B, O5T) {
if (!k5p || !k5p.length || !j5o.gV7O(cH6B))
return this;
if (!!k5p.forEach) {
k5p.forEach(cH6B, O5T);
return this
}
for (var i = 0, l = k5p.length; i < l; i++)
cH6B.call(O5T, k5p[i], i, k5p);
return this
}
;
j5o.eV7O = function(k5p, cH6B, O5T) {
if (!k5p || !j5o.gV7O(cH6B))
return null;
if (k5p.length != null) {
if (k5p.length > 0)
for (var i = 0, l = k5p.length; i < l; i++)
if (!!cH6B.call(O5T, k5p[i], i, k5p))
return i
}
if (j5o.mi8a(k5p)) {
for (var x in k5p)
if (k5p.hasOwnProperty(x) && !!cH6B.call(O5T, k5p[x], x, k5p))
return x
}
return null
}
;
j5o.cxh1x = function(jI8A, cxi1x, e5j) {
jI8A = jI8A || [];
e5j = e5j || bd5i;
var bVt7m = !!e5j.union
, yJ1x = !!e5j.begin
, bbj1x = e5j.compare
, cyn1x = bVt7m && yJ1x ? j5o.ox9o : j5o.bg5l;
cyn1x(cxi1x, function(q5v) {
if (!!bbj1x)
bbj1x = bbj1x.eP7I(q5v);
var r5w = j5o.dx6r(jI8A, bbj1x || q5v);
if (r5w >= 0)
jI8A.splice(r5w, 1);
if (bVt7m)
jI8A[yJ1x ? "unshift" : "push"](q5v)
});
return jI8A
}
;
j5o.Dz2x = function(bD6x, bq5v) {
if (!bD6x || !bq5v || !bq5v.replace)
return bq5v || "";
return bq5v.replace(bD6x.r, function($1) {
var m5r = bD6x[!bD6x.i ? $1.toLowerCase() : $1];
return m5r != null ? m5r : $1
})
}
;
j5o.dN6H = function() {
var bD6x = {
r: /\<|\>|\<|\>|\&|\r|\n|\s|\'|\"/g,
"<": "<",
">": ">",
"&": "&",
" ": " ",
'"': """,
"'": "'",
"\n": "<br/>",
"\r": "",
"<": "<",
">": ">"
};
return function(bq5v) {
return j5o.Dz2x(bD6x, bq5v)
}
}();
j5o.AD2x = function() {
var bD6x = {
r: /\&(?:lt|gt|amp|nbsp|#39|quot)\;|\<br\/\>/gi,
"<": "<",
">": ">",
"&": "&",
" ": " ",
"'": "'",
""": '"',
"<br/>": "\n"
};
return function(bq5v) {
return j5o.Dz2x(bD6x, bq5v)
}
}();
j5o.id7W = function() {
var bD6x = {
i: !0,
r: /\byyyy|yy|MM|cM|eM|M|dd|d|HH|H|mm|ms|ss|m|s|w|ct|et\b/g
}
, czg1x = ["上午", "下午"]
, czm1x = ["A.M.", "P.M."]
, blr3x = ["日", "一", "二", "三", "四", "五", "六"]
, czs1x = ["一", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一", "十二"]
, czM1x = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sept", "Oct", "Nov", "Dec"];
var Vj0x = function(hq7j) {
hq7j = parseInt(hq7j) || 0;
return (hq7j < 10 ? "0" : "") + hq7j
};
var cAC1x = function(qJ0x) {
return qJ0x < 12 ? 0 : 1
};
return function(bz6t, KK8C, cAI1x) {
if (!bz6t || !KK8C)
return "";
bz6t = j5o.baI1x(bz6t);
bD6x.yyyy = bz6t.getFullYear();
bD6x.yy = ("" + bD6x.yyyy).substr(2);
bD6x.M = bz6t.getMonth() + 1;
bD6x.MM = Vj0x(bD6x.M);
bD6x.eM = czM1x[bD6x.M - 1];
bD6x.cM = czs1x[bD6x.M - 1];
bD6x.d = bz6t.getDate();
bD6x.dd = Vj0x(bD6x.d);
bD6x.H = bz6t.getHours();
bD6x.HH = Vj0x(bD6x.H);
bD6x.m = bz6t.getMinutes();
bD6x.mm = Vj0x(bD6x.m);
bD6x.s = bz6t.getSeconds();
bD6x.ss = Vj0x(bD6x.s);
bD6x.ms = bz6t.getMilliseconds();
bD6x.w = blr3x[bz6t.getDay()];
var bXe7X = cAC1x(bD6x.H);
bD6x.ct = czg1x[bXe7X];
bD6x.et = czm1x[bXe7X];
if (!!cAI1x) {
bD6x.H = bD6x.H % 12
}
return j5o.Dz2x(bD6x, KK8C)
}
}();
j5o.baI1x = function(bz6t) {
var dj6d = bz6t;
if (j5o.fO7H(bz6t))
dj6d = new Date(Date.parse(bz6t));
if (!j5o.DK2x(bz6t))
dj6d = new Date(bz6t);
return dj6d
}
;
j5o.Or9i = function(cCx1x, cDa1x) {
return (new Number(cCx1x)).toFixed(cDa1x)
}
;
j5o.bof4j = function() {
var he7X = /([^\/:])\/.*$/
, kG8y = /\/[^\/]+$/
, FC3x = /[#\?]/
, bos4w = location.href.split(/[?#]/)[0]
, uf0x = document.createElement("a");
var bow4A = function(jE8w) {
return (jE8w || "").indexOf("://") > 0
};
var bXw7p = function(jE8w) {
return (jE8w || "").split(FC3x)[0].replace(kG8y, "/")
};
var cDp2x = function(jE8w, gv7o) {
if (jE8w.indexOf("/") == 0)
return gv7o.replace(he7X, "$1") + jE8w;
return bXw7p(gv7o) + jE8w
};
bos4w = bXw7p(bos4w);
return function(jE8w, gv7o) {
jE8w = (jE8w || "").trim();
if (!bow4A(gv7o))
gv7o = bos4w;
if (!jE8w)
return gv7o;
if (bow4A(jE8w))
return jE8w;
jE8w = cDp2x(jE8w, gv7o);
uf0x.href = jE8w;
jE8w = uf0x.href;
return bow4A(jE8w) ? jE8w : uf0x.getAttribute("href", 4)
}
}();
j5o.cFo2x = function() {
var do6i = /^([\w]+?:\/\/.*?(?=\/|$))/i;
return function(Y5d) {
if (do6i.test(Y5d || ""))
return RegExp.$1.toLowerCase();
return ""
}
}();
j5o.bYP7I = function(K5P, iE7x) {
if (!K5P)
return iE7x;
var Z5e = K5P.tagName.toLowerCase()
, k5p = a5f.di6c(K5P);
if (!k5p || !k5p.length) {
iE7x[Z5e] = K5P.textContent || K5P.text || "";
return iE7x
}
var cl6f = {};
iE7x[Z5e] = cl6f;
j5o.bg5l(k5p, function(g5l) {
j5o.bYP7I(g5l, cl6f)
});
return iE7x
}
;
j5o.cLc3x = function(Fh3x) {
try {
return j5o.bYP7I(a5f.bSs6m(Fh3x), {})
} catch (ex) {
return null
}
}
;
j5o.UR0x = function(iu7n, UP0x) {
var iE7x = {};
j5o.bg5l((iu7n || "").split(UP0x), function(Z5e) {
var bad1x = Z5e.split("=");
if (!bad1x || !bad1x.length)
return;
var J5O = bad1x.shift();
if (!J5O)
return;
iE7x[decodeURIComponent(J5O)] = decodeURIComponent(bad1x.join("="))
});
return iE7x
}
;
j5o.wf1x = function(gG7z, UP0x, cKY3x) {
if (!gG7z)
return "";
var bx6r = [];
for (var x in gG7z) {
bx6r.push(encodeURIComponent(x) + "=" + (!!cKY3x ? encodeURIComponent(gG7z[x]) : gG7z[x]))
}
return bx6r.join(UP0x || ",")
}
;
j5o.hi7b = function(bv5A) {
return j5o.UR0x(bv5A, "&")
}
;
j5o.cr6l = function(gG7z) {
return j5o.wf1x(gG7z, "&", !0)
}
;
j5o.cLa3x = function(gG7z) {
return bl5q.KS8K(gG7z)
}
;
j5o.cNQ3x = function(k5p, eh6b) {
var m5r = {};
j5o.bg5l(k5p, function(q5v) {
var J5O = q5v;
if (!!eh6b) {
J5O = eh6b(q5v)
}
m5r[J5O] = q5v
});
return m5r
}
;
j5o.cLb3x = function(hq7j, gq7j) {
var cKT3x = ("" + hq7j).length
, cKQ3x = Math.max(1, parseInt(gq7j) || 0)
, dA6u = cKQ3x - cKT3x;
if (dA6u > 0) {
hq7j = (new Array(dA6u + 1)).join("0") + hq7j
}
return "" + hq7j
}
;
j5o.ZT1x = function(gG7z, Z5e) {
if (!j5o.ec6W(Z5e)) {
try {
delete gG7z[Z5e]
} catch (e) {
gG7z[Z5e] = undefined
}
return this
}
j5o.bg5l(Z5e, j5o.ZT1x.f5k(j5o, gG7z));
return this
}
;
j5o.WS0x = function() {
var cae7X = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
return function(bt5y) {
bt5y = bt5y || 10;
var m5r = [];
for (var i = 0, cad7W; i < bt5y; ++i) {
cad7W = Math.floor(Math.random() * cae7X.length);
m5r.push(cae7X.charAt(cad7W))
}
return m5r.join("")
}
}();
j5o.CV2x = function(fU7N, fB7u) {
return Math.floor(Math.random() * (fB7u - fU7N) + fU7N)
}
;
j5o.oQ9H = function(bt5y) {
bt5y = Math.max(0, Math.min(bt5y || 8, 30));
var fU7N = Math.pow(10, bt5y - 1)
, fB7u = fU7N * 10;
return j5o.CV2x(fU7N, fB7u).toString()
}
;
j5o.btH6B = function(bJ6D) {
return Object.assign(bJ6D, {
result: Object.assign(bJ6D.playlist, {
tracks: bJ6D.playlist.tracks.map(function(track) {
return Object.assign(track, {
album: track.al,
artists: track.ar,
position: track.no,
duration: track.dt,
disc: track.cd,
popularity: track.pop,
mvid: track.mv,
lMusic: track.l ? {
bitrate: track.l.br,
volumeDelta: track.l.vd,
size: track.l.size,
dfsId: track.l.fid
} : {},
mMusic: track.m ? {
bitrate: track.m.br,
volumeDelta: track.m.vd,
size: track.m.size,
dfsId: track.m.fid
} : {},
hMusic: track.h ? {
bitrate: track.h.br,
volumeDelta: track.h.vd,
size: track.h.size,
dfsId: track.h.fid
} : {}
})
})
})
})
}
;
j5o.ZK1x = function() {
var gX7Q = +(new Date);
return function() {
return "" + gX7Q++
}
}()
}
)();
(function() {
var c5h = NEJ.P
, ex6r = c5h("nej.g")
, u5z = c5h("nej.j")
, j5o = c5h("nej.u")
, Vx0x = c5h("nm.x.ek");
Vx0x.emj = {
"色": "00e0b",
"流感": "509f6",
"这边": "259df",
"弱": "8642d",
"嘴唇": "bc356",
"亲": "62901",
"开心": "477df",
"呲牙": "22677",
"憨笑": "ec152",
"猫": "b5ff6",
"皱眉": "8ace6",
"幽灵": "15bb7",
"蛋糕": "b7251",
"发怒": "52b3a",
"大哭": "b17a8",
"兔子": "76aea",
"星星": "8a5aa",
"钟情": "76d2e",
"牵手": "41762",
"公鸡": "9ec4e",
"爱意": "e341f",
"禁止": "56135",
"狗": "fccf6",
"亲亲": "95280",
"叉": "104e0",
"礼物": "312ec",
"晕": "bda92",
"呆": "557c9",
"生病": "38701",
"钻石": "14af6",
"拜": "c9d05",
"怒": "c4f7f",
"示爱": "0c368",
"汗": "5b7a4",
"小鸡": "6bee2",
"痛苦": "55932",
"撇嘴": "575cc",
"惶恐": "e10b4",
"口罩": "24d81",
"吐舌": "3cfe4",
"心碎": "875d3",
"生气": "e8204",
"可爱": "7b97d",
"鬼脸": "def52",
"跳舞": "741d5",
"男孩": "46b8e",
"奸笑": "289dc",
"猪": "6935b",
"圈": "3ece0",
"便便": "462db",
"外星": "0a22b",
"圣诞": "8e7",
"流泪": "01000",
"强": "1",
"爱心": "0CoJU",
"女孩": "m6Qyw",
"惊恐": "8W8ju",
"大笑": "d"
};
Vx0x.md = ["色", "流感", "这边", "弱", "嘴唇", "亲", "开心", "呲牙", "憨笑", "猫", "皱眉", "幽灵", "蛋糕", "发怒", "大哭", "兔子", "星星", "钟情", "牵手", "公鸡", "爱意", "禁止", "狗", "亲亲", "叉", "礼物", "晕", "呆", "生病", "钻石", "拜", "怒", "示爱", "汗", "小鸡", "痛苦", "撇嘴", "惶恐", "口罩", "吐舌", "心碎", "生气", "可爱", "鬼脸", "跳舞", "男孩", "奸笑", "猪", "圈", "便便", "外星", "圣诞"]
}
)();
function main(id=null){
var c5h = NEJ.P
, ex6r = c5h("nej.g")
, u5z = c5h("nej.j")
, j5o = c5h("nej.u")
, Vx0x = c5h("nm.x.ek")
, l5q = c5h("nm.x");
window.GEnc = true;
var bsk5p = function(cxN1x) {
var m5r = [];
j5o.bg5l(cxN1x, function(cxM1x) {
m5r.push(Vx0x.emj[cxM1x])
});
return m5r.join("")
};
if (id){
//如果要改歌曲id那么需要把location中的id也改掉
location.href = location.href.replace('id=\d+',id);
location.search = location.search.replace('id=\d+',id);
};
var i5n = {
"rid": "R_SO_4_1895330088",//歌曲id
"threadId": "R_SO_4_1895330088",
"pageNo": "2",//页面序号
"pageSize": "20",//页面大小
"cursor": Math.round(new Date())+"",
"offset": "0",
"orderType": "1",
"csrf_token": ""
}
// 搜索指定歌曲
// var i5n ={
// "hlpretag": "<span class=\"s-fc7\">",
// "hlposttag": "</span>",
// "s": "予你",
// "type": "1",
// "offset": "0",
// "total": "true",
// "limit": "30",
// "csrf_token": ""
// };
var result = window.asrsea(JSON.stringify(i5n), bsk5p(["流泪", "强"]), bsk5p(Vx0x.md), bsk5p(["爱心", "女孩", "惊恐", "大笑"]));
data = j5o.cr6l({
params: result.encText,
encSecKey: result.encSecKey
})
console.log(data);
return data;
};
// main(
// )
The corresponding python code is attached below:
import execjs
import js2py
import requests
from urllib.parse import quote
js_code = open('demo.js', encoding='utf-8').read()
content = js2py.EvalJs() # 实例化解析js对象
content.execute(js_code) # js转python代码
body = content.main()
print(body)
url = "https://music.163.com/weapi/cloudsearch/get/web?csrf_token= "
headers = {
'Host': 'music.163.com',
'Connection': 'keep-alive',
'Content-Length': '574',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36',
'Content-Type': 'application/x-www-form-urlencoded'
}
response = requests.request("POST", url, headers=headers, data=body)
print(response.text)
conclusion of issue:
When calling js, you can get the data by directly running the encryption result output by js, and through python
execjs called js but could not get the data. Finally, I completed it through the js2py library. What I initially understood here was environmental issues.
, if you guys have better insights, please give them an answer.