this.login = function(t) {
if (t.data.pwencode) {
if ("" == o || 0 == n || "" == s) return t.error(), t.complete(), this.preLogin(), void 0;
var e = C(o + " " + n + " " + t.data.password);//这里就是密码的加密了
t.data.password = window.btoa(e)//加密后结果赋值给密码,然后提交了具体为什么每次密码都不一样,你可以看下上面的C方法
}
return g = t.data, g.referer = window.location.protocol + "//" + window.location.hostname, i = {
success: t.success,
error: t.error,
complete: t.complete
}, w() ? !0 : (g.returntype = "html", y(), void 0)
}
打完收工 这里就是加密分析过程,具体算法是什么可以自己看下
下面是C
var C = function(t) {
function i(t) {
R = t, q = new Array(R);
for (var i = 0; i < q.length; i++) q[i] = 0;
B = new e, D = new e, D.digits[0] = 1
}
function e(t) {
this.digits = "boolean" == typeof t && 1 == t ? null : q.slice(0), this.isNeg = !1
}
function r(t) {
var i = new e(!0);
return i.digits = t.digits.slice(0), i.isNeg = t.isNeg, i
}
function o(t) {
var i = new e;
i.isNeg = 0 > t, t = Math.abs(t);
for (var r = 0; t > 0;) i.digits[r++] = t & U, t >>= H;
return i
}
function n(t) {
var i, e = 48,
r = e + 9,
s = 97,
o = s + 25,
n = 65,
a = 90;
return i = t >= e && r >= t ? t - e : t >= n && a >= t ? 10 + t - n : t >= s && o >= t ? 10 + t - s : 0
}
function a(t) {
for (var i = 0, e = Math.min(t.length, 4), r = 0; e > r; ++r) i <<= 4, i |= n(t.charCodeAt(r));
return i
}
function u(t) {
for (var i = new e, r = t.length, s = r, o = 0; s > 0; s -= 4, ++o) i.digits[o] = a(t.substr(Math.max(s - 4, 0), Math.min(s, 4)));
return i
}
function c(t) {
for (var i = "", e = f(t); e > -1; --e) i += d(t.digits[e]);
return i
}
function d(t) {
var i = String.fromCharCode(255 & t);
t >>>= 8;
var e = String.fromCharCode(255 & t);
return e + i
}
function g(t, i) {
var r;
if (t.isNeg != i.isNeg) i.isNeg = !i.isNeg, r = l(t, i), i.isNeg = !i.isNeg;
else {
r = new e;
for (var s, o = 0, n = 0; n < t.digits.length; ++n) s = t.digits[n] + i.digits[n] + o, r.digits[n] = 65535 & s, o = Number(s >= X);
r.isNeg = t.isNeg
}
return r
}
function l(t, i) {
var r;
if (t.isNeg != i.isNeg) i.isNeg = !i.isNeg, r = g(t, i), i.isNeg = !i.isNeg;
else {
r = new e;
var s, o;
o = 0;
for (var n = 0; n < t.digits.length; ++n) s = t.digits[n] - i.digits[n] + o, r.digits[n] = 65535 & s, r.digits[n] < 0 && (r.digits[n] += X), o = 0 - Number(0 > s);
if (-1 == o) {
o = 0;
for (var n = 0; n < t.digits.length; ++n) s = 0 - r.digits[n] + o, r.digits[n] = 65535 & s, r.digits[n] < 0 && (r.digits[n] += X), o = 0 - Number(0 > s);
r.isNeg = !t.isNeg
} else r.isNeg = t.isNeg
}
return r
}
function f(t) {
for (var i = t.digits.length - 1; i > 0 && 0 == t.digits[i];)--i;
return i
}
function h(t) {
var i, e = f(t),
r = t.digits[e],
s = (e + 1) * O;
for (i = s; i > s - O && 0 == (32768 & r); --i) r <<= 1;
return i
}
function m(t, i) {
for (var r, s, o, n = new e, a = f(t), u = f(i), c = 0; u >= c; ++c) {
for (r = 0, o = c, j = 0; a >= j; ++j, ++o) s = n.digits[o] + t.digits[j] * i.digits[c] + r, n.digits[o] = s & U, r = s >>> H;
n.digits[c + a + 1] = r
}
return n.isNeg = t.isNeg != i.isNeg, n
}
function p(t, i) {
var r, s, o;
result = new e, r = f(t), s = 0;
for (var n = 0; r >= n; ++n) o = result.digits[n] + t.digits[n] * i + s, result.digits[n] = o & U, s = o >>> H;
return result.digits[1 + r] = s, result
}
function v(t, i, e, r, s) {
for (var o = Math.min(i + s, t.length), n = i, a = r; o > n; ++n, ++a) e[a] = t[n]
}
function w(t, i) {
var r = Math.floor(i / O),
s = new e;
v(t.digits, 0, s.digits, r, s.digits.length - r);
for (var o = i % O, n = O - o, a = s.digits.length - 1, u = a - 1; a > 0; --a, --u) s.digits[a] = s.digits[a] << o & U | (s.digits[u] & E[o]) >>> n;
return s.digits[0] = s.digits[a] << o & U, s.isNeg = t.isNeg, s
}
function N(t, i) {
var r = Math.floor(i / O),
s = new e;
v(t.digits, r, s.digits, 0, t.digits.length - r);
for (var o = i % O, n = O - o, a = 0, u = a + 1; a < s.digits.length - 1; ++a, ++u) s.digits[a] = s.digits[a] >>> o | (s.digits[u] & V[o]) << n;
return s.digits[s.digits.length - 1] >>>= o, s.isNeg = t.isNeg, s
}
function y(t, i) {
var r = new e;
return v(t.digits, 0, r.digits, i, r.digits.length - i), r
}
function k(t, i) {
var r = new e;
return v(t.digits, i, r.digits, 0, r.digits.length - i), r
}
function b(t, i) {
var r = new e;
return v(t.digits, 0, r.digits, 0, i), r
}
function $(t, i) {
if (t.isNeg != i.isNeg) return 1 - 2 * Number(t.isNeg);
for (var e = t.digits.length - 1; e >= 0; --e) if (t.digits[e] != i.digits[e]) return t.isNeg ? 1 - 2 * Number(t.digits[e] > i.digits[e]) : 1 - 2 * Number(t.digits[e] < i.digits[e]);
return 0
}
function C(t, i) {
var s, o, n = h(t),
a = h(i),
u = i.isNeg;
if (a > n) return t.isNeg ? (s = r(D), s.isNeg = !i.isNeg, t.isNeg = !1, i.isNeg = !1, o = l(i, t), t.isNeg = !0, i.isNeg = u) : (s = new e, o = r(t)), new Array(s, o);
s = new e, o = t;
for (var c = Math.ceil(a / O) - 1, d = 0; i.digits[c] < F;) i = w(i, 1), ++d, ++a, c = Math.ceil(a / O) - 1;
o = w(o, d), n += d;
for (var m = Math.ceil(n / O) - 1, v = y(i, m - c); - 1 != $(o, v);)++s.digits[m - c], o = l(o, v);
for (var k = m; k > c; --k) {
var b = k >= o.digits.length ? 0 : o.digits[k],
C = k - 1 >= o.digits.length ? 0 : o.digits[k - 1],
M = k - 2 >= o.digits.length ? 0 : o.digits[k - 2],
S = c >= i.digits.length ? 0 : i.digits[c],
j = c - 1 >= i.digits.length ? 0 : i.digits[c - 1];
s.digits[k - c - 1] = b == S ? U : Math.floor((b * X + C) / S);
for (var x = s.digits[k - c - 1] * (S * X + j), A = b * I + (C * X + M); x > A;)--s.digits[k - c - 1], x = s.digits[k - c - 1] * (S * X | j), A = b * X * X + (C * X + M);
v = y(i, k - c - 1), o = l(o, p(v, s.digits[k - c - 1])), o.isNeg && (o = g(o, v), --s.digits[k - c - 1])
}
return o = N(o, d), s.isNeg = t.isNeg != u, t.isNeg && (s = u ? g(s, D) : l(s, D), i = N(i, d), o = l(i, o)), 0 == o.digits[0] && 0 == f(o) && (o.isNeg = !1), new Array(s, o)
}
function M(t, i) {
return C(t, i)[0]
}
function S(t) {
this.modulus = r(t), this.k = f(this.modulus) + 1;
var i = new e;
i.digits[2 * this.k] = 1, this.mu = M(i, this.modulus), this.bkplus1 = new e, this.bkplus1.digits[this.k + 1] = 1, this.modulo = x, this.multiplyMod = A, this.powMod = L
}
function x(t) {
var i = k(t, this.k - 1),
e = m(i, this.mu),
r = k(e, this.k + 1),
s = b(t, this.k + 1),
o = m(r, this.modulus),
n = b(o, this.k + 1),
a = l(s, n);
a.isNeg && (a = g(a, this.bkplus1));
for (var u = $(a, this.modulus) >= 0; u;) a = l(a, this.modulus), u = $(a, this.modulus) >= 0;
return a
}
function A(t, i) {
var e = m(t, i);
return this.modulo(e)
}
function L(t, i) {
var r = new e;
r.digits[0] = 1;
for (var s = t, o = i;;) {
if (0 != (1 & o.digits[0]) && (r = this.multiplyMod(r, s)), o = N(o, 1), 0 == o.digits[0] && 0 == f(o)) break;
s = this.multiplyMod(s, s)
}
return r
}
function z(t) {
var i = 1024;
this.e = u("10001"), this.d = u(""), this.m = u(t), this.chunkSize = "number" != typeof i ? 2 * f(this.m) : i / 8, this.radix = 16, this.barrett = new S(this.m)
}
function T(t) {
var i, r, o, n, a, u, d, g, l = new Array,
f = t.length,
h = "",
m = new z(s);
for (f > m.chunkSize - 11 && (f = m.chunkSize - 11), i = 0, r = f - 1; f > i;) l[r] = t.charCodeAt(i), i++, r--;
for (r = m.chunkSize - f % m.chunkSize; r > 0;) {
for (n = Math.floor(256 * Math.random()); !n;) n = Math.floor(256 * Math.random());
l[i] = n, i++, r--
}
for (l[f] = 0, l[m.chunkSize - 2] = 2, l[m.chunkSize - 1] = 0, a = l.length, i = 0; a > i; i += m.chunkSize) {
for (u = new e, r = 0, o = i; o < i + m.chunkSize; ++r) u.digits[r] = l[o++], u.digits[r] += l[o++] << 8;
d = m.barrett.powMod(u, m.e), g = c(d), h += g
}
return h
}
var R, q, B, D, H = 16,
O = H,
X = 65536,
F = X >>> 1,
I = X * X,
U = X - 1;
i(20), o(1e15), 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"), new Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f");
var E = new Array(0, 32768, 49152, 57344, 61440, 63488, 64512, 65024, 65280, 65408, 65472, 65504, 65520, 65528, 65532, 65534, 65535),
V = new Array(0, 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095, 8191, 16383, 32767, 65535);
return i(131), T(t)
}
如果可以记得采纳哦
需要查看JS,分析加密。一般密码每次都不一样,应该是加了时间戳在加密
首先,查看都加载了哪些JS,是否混淆,混淆也没事,只是读起来麻烦一些,只要用心还是可以的
首先看到这个JS,从文件名分析来看这个应该是单点登录所需要的js,所以应该最终登陆会在这里实现
继续往下看
发现这个JS,从文件名分析应该是登陆的,打开一看,发现是个配置文件性质的JS,这里配置了所需要加载的js
从该文件分析猜测,这个项目前端是MVC结构,最终这个页面的控制器应该是login-view.js,查找这个文件
查看这个文件的代码之后,发现这个确实是控制器,这里如果登陆都写了,可以查看上面我加的注释
发现最重要的登陆函数是imoocSSO.login,那么搜索单点登陆里的login
打完收工 这里就是加密分析过程,具体算法是什么可以自己看下
下面是C