赞
踩
案例网址:https://www.migu.cn/video.html
我们省略js逆向时定位的过程,直接看RSA加密部分的代码:
define("lib/rsa/rsa", [], function(a, b, c) { function d(a, b, c) { null != a && ("number" == typeof a ? this.fromNumber(a, b, c) : null == b && "string" != typeof a ? this.fromString(a, 256) : this.fromString(a, b)) } function e() { return new d(null) } function f(a, b, c, d, e, f) { for (; --f >= 0; ) { var g = b * this[a++] + c[d] + e; e = Math.floor(g / 67108864), c[d++] = 67108863 & g } return e } function g(a, b, c, d, e, f) { for (var g = 32767 & b, h = b >> 15; --f >= 0; ) { var i = 32767 & this[a] , j = this[a++] >> 15 , k = h * i + j * g; i = g * i + ((32767 & k) << 15) + c[d] + (1073741823 & e), e = (i >>> 30) + (k >>> 15) + h * j + (e >>> 30), c[d++] = 1073741823 & i } return e } function h(a, b, c, d, e, f) { for (var g = 16383 & b, h = b >> 14; --f >= 0; ) { var i = 16383 & this[a] , j = this[a++] >> 14 , k = h * i + j * g; i = g * i + ((16383 & k) << 14) + c[d] + e, e = (i >> 28) + (k >> 14) + h * j, c[d++] = 268435455 & i } return e } function i(a) { return nb.charAt(a) } function j(a, b) { var c = ob[a.charCodeAt(b)]; return null == c ? -1 : c } function k(a) { for (var b = this.t - 1; b >= 0; --b) a[b] = this[b]; a.t = this.t, a.s = this.s } function l(a) { this.t = 1, this.s = 0 > a ? -1 : 0, a > 0 ? this[0] = a : -1 > a ? this[0] = a + this.DV : this.t = 0 } function m(a) { var b = e(); return b.fromInt(a), b } function n(a, b) { var c; if (16 == b) c = 4; else if (8 == b) c = 3; else if (256 == b) c = 8; else if (2 == b) c = 1; else if (32 == b) c = 5; else { if (4 != b) return void this.fromRadix(a, b); c = 2 } this.t = 0, this.s = 0; for (var e = a.length, f = !1, g = 0; --e >= 0; ) { var h = 8 == c ? 255 & a[e] : j(a, e); 0 > h ? "-" == a.charAt(e) && (f = !0) : (f = !1, 0 == g ? this[this.t++] = h : g + c > this.DB ? (this[this.t - 1] |= (h & (1 << this.DB - g) - 1) << g, this[this.t++] = h >> this.DB - g) : this[this.t - 1] |= h << g, g += c, g >= this.DB && (g -= this.DB)) } 8 == c && 0 != (128 & a[0]) && (this.s = -1, g > 0 && (this[this.t - 1] |= (1 << this.DB - g) - 1 << g)), this.clamp(), f && d.ZERO.subTo(this, this) } function o() { for (var a = this.s & this.DM; this.t > 0 && this[this.t - 1] == a; ) --this.t } function p(a) { if (this.s < 0) return "-" + this.negate().toString(a); var b; if (16 == a) b = 4; else if (8 == a) b = 3; else if (2 == a) b = 1; else if (32 == a) b = 5; else { if (4 != a) return this.toRadix(a); b = 2 } var c, d = (1 << b) - 1, e = !1, f = "", g = this.t, h = this.DB - g * this.DB % b; if (g-- > 0) for (h < this.DB && (c = this[g] >> h) > 0 && (e = !0, f = i(c)); g >= 0; ) b > h ? (c = (this[g] & (1 << h) - 1) << b - h, c |= this[--g] >> (h += this.DB - b)) : (c = this[g] >> (h -= b) & d, 0 >= h && (h += this.DB, --g)), c > 0 && (e = !0), e && (f += i(c)); return e ? f : "0" } function q() { var a = e(); return d.ZERO.subTo(this, a), a } function r() { return this.s < 0 ? this.negate() : this } function s(a) { var b = this.s - a.s; if (0 != b) return b; var c = this.t; if (b = c - a.t, 0 != b) return this.s < 0 ? -b : b; for (; --c >= 0; ) if (0 != (b = this[c] - a[c])) return b; return 0 } function t(a) { var b, c = 1; return 0 != (b = a >>> 16) && (a = b, c += 16), 0 != (b = a >> 8) && (a = b, c += 8), 0 != (b = a >> 4) && (a = b, c += 4), 0 != (b = a >> 2) && (a = b, c += 2), 0 != (b = a >> 1) && (a = b, c += 1), c } function u() { return this.t <= 0 ? 0 : this.DB * (this.t - 1) + t(this[this.t - 1] ^ this.s & this.DM) } function v(a, b) { var c; for (c = this.t - 1; c >= 0; --c) b[c + a] = this[c]; for (c = a - 1; c >= 0; --c) b[c] = 0; b.t = this.t + a, b.s = this.s } function w(a, b) { for (var c = a; c < this.t; ++c) b[c - a] = this[c]; b.t = Math.max(this.t - a, 0), b.s = this.s } function x(a, b) { var c, d = a % this.DB, e = this.DB - d, f = (1 << e) - 1, g = Math.floor(a / this.DB), h = this.s << d & this.DM; for (c = this.t - 1; c >= 0; --c) b[c + g + 1] = this[c] >> e | h, h = (this[c] & f) << d; for (c = g - 1; c >= 0; --c) b[c] = 0; b[g] = h, b.t = this.t + g + 1, b.s = this.s, b.clamp() } function y(a, b) { b.s = this.s; var c = Math.floor(a / this.DB); if (c >= this.t) return void (b.t = 0); var d = a % this.DB , e = this.DB - d , f = (1 << d) - 1; b[0] = this[c] >> d; for (var g = c + 1; g < this.t; ++g) b[g - c - 1] |= (this[g] & f) << e, b[g - c] = this[g] >> d; d > 0 && (b[this.t - c - 1] |= (this.s & f) << e), b.t = this.t - c, b.clamp() } function z(a, b) { for (var c = 0, d = 0, e = Math.min(a.t, this.t); e > c; ) d += this[c] - a[c], b[c++] = d & this.DM, d >>= this.DB; if (a.t < this.t) { for (d -= a.s; c < this.t; ) d += this[c], b[c++] = d & this.DM, d >>= this.DB; d += this.s } else { for (d += this.s; c < a.t; ) d -= a[c], b[c++] = d & this.DM, d >>= this.DB; d -= a.s } b.s = 0 > d ? -1 : 0, -1 > d ? b[c++] = this.DV + d : d > 0 && (b[c++] = d), b.t = c, b.clamp() } function A(a, b) { var c = this.abs() , e = a.abs() , f = c.t; for (b.t = f + e.t; --f >= 0; ) b[f] = 0; for (f = 0; f < e.t; ++f) b[f + c.t] = c.am(0, e[f], b, f, 0, c.t); b.s = 0, b.clamp(), this.s != a.s && d.ZERO.subTo(b, b) } function B(a) { for (var b = this.abs(), c = a.t = 2 * b.t; --c >= 0; ) a[c] = 0; for (c = 0; c < b.t - 1; ++c) { var d = b.am(c, b[c], a, 2 * c, 0, 1); (a[c + b.t] += b.am(c + 1, 2 * b[c], a, 2 * c + 1, d, b.t - c - 1)) >= b.DV && (a[c + b.t] -= b.DV, a[c + b.t + 1] = 1) } a.t > 0 && (a[a.t - 1] += b.am(c, b[c], a, 2 * c, 0, 1)), a.s = 0, a.clamp() } function C(a, b, c) { var f = a.abs(); if (!(f.t <= 0)) { var g = this.abs(); if (g.t < f.t) return null != b && b.fromInt(0), void (null != c && this.copyTo(c)); null == c && (c = e()); var h = e() , i = this.s , j = a.s , k = this.DB - t(f[f.t - 1]); k > 0 ? (f.lShiftTo(k, h), g.lShiftTo(k, c)) : (f.copyTo(h), g.copyTo(c)); var l = h.t , m = h[l - 1]; if (0 != m) { var n = m * (1 << this.F1) + (l > 1 ? h[l - 2] >> this.F2 : 0) , o = this.FV / n , p = (1 << this.F1) / n , q = 1 << this.F2 , r = c.t , s = r - l , u = null == b ? e() : b; for (h.dlShiftTo(s, u), c.compareTo(u) >= 0 && (c[c.t++] = 1, c.subTo(u, c)), d.ONE.dlShiftTo(l, u), u.subTo(h, h); h.t < l; ) h[h.t++] = 0; for (; --s >= 0; ) { var v = c[--r] == m ? this.DM : Math.floor(c[r] * o + (c[r - 1] + q) * p); if ((c[r] += h.am(0, v, c, s, 0, l)) < v) for (h.dlShiftTo(s, u), c.subTo(u, c); c[r] < --v; ) c.subTo(u, c) } null != b && (c.drShiftTo(l, b), i != j && d.ZERO.subTo(b, b)), c.t = l, c.clamp(), k > 0 && c.rShiftTo(k, c), 0 > i && d.ZERO.subTo(c, c) } } } function D(a) { var b = e(); return this.abs().divRemTo(a, null, b), this.s < 0 && b.compareTo(d.ZERO) > 0 && a.subTo(b, b), b } function E(a) { this.m = a } function F(a) { return a.s < 0 || a.compareTo(this.m) >= 0 ? a.mod(this.m) : a } function G(a) { return a } function H(a) { a.divRemTo(this.m, null, a) } function I(a, b, c) { a.multiplyTo(b, c), this.reduce(c) } function J(a, b) { a.squareTo(b), this.reduce(b) } function K() { if (this.t < 1) return 0; var a = this[0]; if (0 == (1 & a)) return 0; var b = 3 & a; return b = b * (2 - (15 & a) * b) & 15, b = b * (2 - (255 & a) * b) & 255, b = b * (2 - ((65535 & a) * b & 65535)) & 65535, b = b * (2 - a * b % this.DV) % this.DV, b > 0 ? this.DV - b : -b } function L(a) { this.m = a, this.mp = a.invDigit(), this.mpl = 32767 & this.mp, this.mph = this.mp >> 15, this.um = (1 << a.DB - 15) - 1, this.mt2 = 2 * a.t } function M(a) { var b = e(); return a.abs().dlShiftTo(this.m.t, b), b.divRemTo(this.m, null, b), a.s < 0 && b.compareTo(d.ZERO) > 0 && this.m.subTo(b, b), b } function N(a) { var b = e(); return a.copyTo(b), this.reduce(b), b } function O(a) { for (; a.t <= this.mt2; ) a[a.t++] = 0; for (var b = 0; b < this.m.t; ++b) { var c = 32767 & a[b] , d = c * this.mpl + ((c * this.mph + (a[b] >> 15) * this.mpl & this.um) << 15) & a.DM; for (c = b + this.m.t, a[c] += this.m.am(0, d, a, b, 0, this.m.t); a[c] >= a.DV; ) a[c] -= a.DV, a[++c]++ } a.clamp(), a.drShiftTo(this.m.t, a), a.compareTo(this.m) >= 0 && a.subTo(this.m, a) } function P(a, b) { a.squareTo(b), this.reduce(b) } function Q(a, b, c) { a.multiplyTo(b, c), this.reduce(c) } function R() { return 0 == (this.t > 0 ? 1 & this[0] : this.s) } function S(a, b) { if (a > 4294967295 || 1 > a) return d.ONE; var c = e() , f = e() , g = b.convert(this) , h = t(a) - 1; for (g.copyTo(c); --h >= 0; ) if (b.sqrTo(c, f), (a & 1 << h) > 0) b.mulTo(f, g, c); else { var i = c; c = f, f = i } return b.revert(c) } function T(a, b) { var c; return c = 256 > a || b.isEven() ? new E(b) : new L(b), this.exp(a, c) } function U() { this.i = 0, this.j = 0, this.S = new Array } function V(a) { var b, c, d; for (b = 0; 256 > b; ++b) this.S[b] = b; for (c = 0, b = 0; 256 > b; ++b) c = c + this.S[b] + a[b % a.length] & 255, d = this.S[b], this.S[b] = this.S[c], this.S[c] = d; this.i = 0, this.j = 0 } function W() { var a; return this.i = this.i + 1 & 255, this.j = this.j + this.S[this.i] & 255, a = this.S[this.i], this.S[this.i] = this.S[this.j], this.S[this.j] = a, this.S[a + this.S[this.i] & 255] } function X() { return new U } function Y(a) { qb[rb++] ^= 255 & a, qb[rb++] ^= a >> 8 & 255, qb[rb++] ^= a >> 16 & 255, qb[rb++] ^= a >> 24 & 255, rb >= sb && (rb -= sb) } function Z() { Y((new Date).getTime()) } function $() { if (null == pb) { for (Z(), pb = X(), pb.init(qb), rb = 0; rb < qb.length; ++rb) qb[rb] = 0; rb = 0 } return pb.next() } function _(a) { var b; for (b = 0; b < a.length; ++b) a[b] = $() } function ab() {} function bb(a, b) { return new d(a,b) } function cb(a, b) { if (b < a.length + 11) return alert("Message too long for RSA"), null; for (var c = new Array, e = a.length - 1; e >= 0 && b > 0; ) { var f = a.charCodeAt(e--); 128 > f ? c[--b] = f : f > 127 && 2048 > f ? (c[--b] = 63 & f | 128, c[--b] = f >> 6 | 192) : (c[--b] = 63 & f | 128, c[--b] = f >> 6 & 63 | 128, c[--b] = f >> 12 | 224) } c[--b] = 0; for (var g = new ab, h = new Array; b > 2; ) { for (h[0] = 0; 0 == h[0]; ) g.nextBytes(h); c[--b] = h[0] } return c[--b] = 2, c[--b] = 0, new d(c) } function db() { this.n = null, this.e = 0, this.d = null, this.p = null, this.q = null, this.dmp1 = null, this.dmq1 = null, this.coeff = null } function eb(a, b) { null != a && null != b && a.length > 0 && b.length > 0 ? (this.n = bb(a, 16), this.e = parseInt(b, 16)) : alert("网络异常,请点击登录重试") } function fb(a) { return a.modPowInt(this.e, this.n) } function gb(a) { var b = cb(a, this.n.bitLength() + 7 >> 3); if (null == b) return null; var c = this.doPublic(b); if (null == c) return null; var d = c.toString(16); return 0 == (1 & d.length) ? d : "0" + d } var hb, ib = 0xdeadbeefcafe, jb = 15715070 == (16777215 & ib); jb && "Microsoft Internet Explorer" == navigator.appName ? (d.prototype.am = g, hb = 30) : jb && "Netscape" != navigator.appName ? (d.prototype.am = f, hb = 26) : (d.prototype.am = h, hb = 28), d.prototype.DB = hb, d.prototype.DM = (1 << hb) - 1, d.prototype.DV = 1 << hb; var kb = 52; d.prototype.FV = Math.pow(2, kb), d.prototype.F1 = kb - hb, d.prototype.F2 = 2 * hb - kb; var lb, mb, nb = "0123456789abcdefghijklmnopqrstuvwxyz", ob = new Array; for (lb = "0".charCodeAt(0), mb = 0; 9 >= mb; ++mb) ob[lb++] = mb; for (lb = "a".charCodeAt(0), mb = 10; 36 > mb; ++mb) ob[lb++] = mb; for (lb = "A".charCodeAt(0), mb = 10; 36 > mb; ++mb) ob[lb++] = mb; E.prototype.convert = F, E.prototype.revert = G, E.prototype.reduce = H, E.prototype.mulTo = I, E.prototype.sqrTo = J, L.prototype.convert = M, L.prototype.revert = N, L.prototype.reduce = O, L.prototype.mulTo = Q, L.prototype.sqrTo = P, d.prototype.copyTo = k, d.prototype.fromInt = l, d.prototype.fromString = n, d.prototype.clamp = o, d.prototype.dlShiftTo = v, d.prototype.drShiftTo = w, d.prototype.lShiftTo = x, d.prototype.rShiftTo = y, d.prototype.subTo = z, d.prototype.multiplyTo = A, d.prototype.squareTo = B, d.prototype.divRemTo = C, d.prototype.invDigit = K, d.prototype.isEven = R, d.prototype.exp = S, d.prototype.toString = p, d.prototype.negate = q, d.prototype.abs = r, d.prototype.compareTo = s, d.prototype.bitLength = u, d.prototype.mod = D, d.prototype.modPowInt = T, d.ZERO = m(0), d.ONE = m(1), U.prototype.init = V, U.prototype.next = W; var pb, qb, rb, sb = 256; if (null == qb) { qb = new Array, rb = 0; var tb; if (window.crypto && window.crypto.getRandomValues) { var ub = new Uint8Array(32); for (window.crypto.getRandomValues(ub), tb = 0; 32 > tb; ++tb) qb[rb++] = ub[tb] } if ("Netscape" == navigator.appName && navigator.appVersion < "5" && window.crypto) { var vb = window.crypto.random(32); for (tb = 0; tb < vb.length; ++tb) qb[rb++] = 255 & vb.charCodeAt(tb) } for (; sb > rb; ) tb = Math.floor(65536 * Math.random()), qb[rb++] = tb >>> 8, qb[rb++] = 255 & tb; rb = 0, Z() } ab.prototype.nextBytes = _, db.prototype.doPublic = fb, db.prototype.setPublic = eb, db.prototype.encrypt = gb, c.exports = { RSAKey: db } }),
和案例1如出一辙,也是一个模块 不过不同的是,在调用RSAKey的时候,不是一个函数,而是一个构造函数,我们酱紫进行改造:
1.去掉首尾大括号,暴露内部函数
2.去掉export及其里面的部分
3.不调用RSAKey,而是调用db
改造好的代码如下:
function d(a, b, c) { null != a && ("number" == typeof a ? this.fromNumber(a, b, c) : null == b && "string" != typeof a ? this.fromString(a, 256) : this.fromString(a, b)) } function e() { return new d(null) } function f(a, b, c, d, e, f) { for (; --f >= 0; ) { var g = b * this[a++] + c[d] + e; e = Math.floor(g / 67108864), c[d++] = 67108863 & g } return e } function g(a, b, c, d, e, f) { for (var g = 32767 & b, h = b >> 15; --f >= 0; ) { var i = 32767 & this[a] , j = this[a++] >> 15 , k = h * i + j * g; i = g * i + ((32767 & k) << 15) + c[d] + (1073741823 & e), e = (i >>> 30) + (k >>> 15) + h * j + (e >>> 30), c[d++] = 1073741823 & i } return e } function h(a, b, c, d, e, f) { for (var g = 16383 & b, h = b >> 14; --f >= 0; ) { var i = 16383 & this[a] , j = this[a++] >> 14 , k = h * i + j * g; i = g * i + ((16383 & k) << 14) + c[d] + e, e = (i >> 28) + (k >> 14) + h * j, c[d++] = 268435455 & i } return e } function i(a) { return nb.charAt(a) } function j(a, b) { var c = ob[a.charCodeAt(b)]; return null == c ? -1 : c } function k(a) { for (var b = this.t - 1; b >= 0; --b) a[b] = this[b]; a.t = this.t, a.s = this.s } function l(a) { this.t = 1, this.s = 0 > a ? -1 : 0, a > 0 ? this[0] = a : -1 > a ? this[0] = a + this.DV : this.t = 0 } function m(a) { var b = e(); return b.fromInt(a), b } function n(a, b) { var c; if (16 == b) c = 4; else if (8 == b) c = 3; else if (256 == b) c = 8; else if (2 == b) c = 1; else if (32 == b) c = 5; else { if (4 != b) return void this.fromRadix(a, b); c = 2 } this.t = 0, this.s = 0; for (var e = a.length, f = !1, g = 0; --e >= 0; ) { var h = 8 == c ? 255 & a[e] : j(a, e); 0 > h ? "-" == a.charAt(e) && (f = !0) : (f = !1, 0 == g ? this[this.t++] = h : g + c > this.DB ? (this[this.t - 1] |= (h & (1 << this.DB - g) - 1) << g, this[this.t++] = h >> this.DB - g) : this[this.t - 1] |= h << g, g += c, g >= this.DB && (g -= this.DB)) } 8 == c && 0 != (128 & a[0]) && (this.s = -1, g > 0 && (this[this.t - 1] |= (1 << this.DB - g) - 1 << g)), this.clamp(), f && d.ZERO.subTo(this, this) } function o() { for (var a = this.s & this.DM; this.t > 0 && this[this.t - 1] == a; ) --this.t } function p(a) { if (this.s < 0) return "-" + this.negate().toString(a); var b; if (16 == a) b = 4; else if (8 == a) b = 3; else if (2 == a) b = 1; else if (32 == a) b = 5; else { if (4 != a) return this.toRadix(a); b = 2 } var c, d = (1 << b) - 1, e = !1, f = "", g = this.t, h = this.DB - g * this.DB % b; if (g-- > 0) for (h < this.DB && (c = this[g] >> h) > 0 && (e = !0, f = i(c)); g >= 0; ) b > h ? (c = (this[g] & (1 << h) - 1) << b - h, c |= this[--g] >> (h += this.DB - b)) : (c = this[g] >> (h -= b) & d, 0 >= h && (h += this.DB, --g)), c > 0 && (e = !0), e && (f += i(c)); return e ? f : "0" } function q() { var a = e(); return d.ZERO.subTo(this, a), a } function r() { return this.s < 0 ? this.negate() : this } function s(a) { var b = this.s - a.s; if (0 != b) return b; var c = this.t; if (b = c - a.t, 0 != b) return this.s < 0 ? -b : b; for (; --c >= 0; ) if (0 != (b = this[c] - a[c])) return b; return 0 } function t(a) { var b, c = 1; return 0 != (b = a >>> 16) && (a = b, c += 16), 0 != (b = a >> 8) && (a = b, c += 8), 0 != (b = a >> 4) && (a = b, c += 4), 0 != (b = a >> 2) && (a = b, c += 2), 0 != (b = a >> 1) && (a = b, c += 1), c } function u() { return this.t <= 0 ? 0 : this.DB * (this.t - 1) + t(this[this.t - 1] ^ this.s & this.DM) } function v(a, b) { var c; for (c = this.t - 1; c >= 0; --c) b[c + a] = this[c]; for (c = a - 1; c >= 0; --c) b[c] = 0; b.t = this.t + a, b.s = this.s } function w(a, b) { for (var c = a; c < this.t; ++c) b[c - a] = this[c]; b.t = Math.max(this.t - a, 0), b.s = this.s } function x(a, b) { var c, d = a % this.DB, e = this.DB - d, f = (1 << e) - 1, g = Math.floor(a / this.DB), h = this.s << d & this.DM; for (c = this.t - 1; c >= 0; --c) b[c + g + 1] = this[c] >> e | h, h = (this[c] & f) << d; for (c = g - 1; c >= 0; --c) b[c] = 0; b[g] = h, b.t = this.t + g + 1, b.s = this.s, b.clamp() } function y(a, b) { b.s = this.s; var c = Math.floor(a / this.DB); if (c >= this.t) return void (b.t = 0); var d = a % this.DB , e = this.DB - d , f = (1 << d) - 1; b[0] = this[c] >> d; for (var g = c + 1; g < this.t; ++g) b[g - c - 1] |= (this[g] & f) << e, b[g - c] = this[g] >> d; d > 0 && (b[this.t - c - 1] |= (this.s & f) << e), b.t = this.t - c, b.clamp() } function z(a, b) { for (var c = 0, d = 0, e = Math.min(a.t, this.t); e > c; ) d += this[c] - a[c], b[c++] = d & this.DM, d >>= this.DB; if (a.t < this.t) { for (d -= a.s; c < this.t; ) d += this[c], b[c++] = d & this.DM, d >>= this.DB; d += this.s } else { for (d += this.s; c < a.t; ) d -= a[c], b[c++] = d & this.DM, d >>= this.DB; d -= a.s } b.s = 0 > d ? -1 : 0, -1 > d ? b[c++] = this.DV + d : d > 0 && (b[c++] = d), b.t = c, b.clamp() } function A(a, b) { var c = this.abs() , e = a.abs() , f = c.t; for (b.t = f + e.t; --f >= 0; ) b[f] = 0; for (f = 0; f < e.t; ++f) b[f + c.t] = c.am(0, e[f], b, f, 0, c.t); b.s = 0, b.clamp(), this.s != a.s && d.ZERO.subTo(b, b) } function B(a) { for (var b = this.abs(), c = a.t = 2 * b.t; --c >= 0; ) a[c] = 0; for (c = 0; c < b.t - 1; ++c) { var d = b.am(c, b[c], a, 2 * c, 0, 1); (a[c + b.t] += b.am(c + 1, 2 * b[c], a, 2 * c + 1, d, b.t - c - 1)) >= b.DV && (a[c + b.t] -= b.DV, a[c + b.t + 1] = 1) } a.t > 0 && (a[a.t - 1] += b.am(c, b[c], a, 2 * c, 0, 1)), a.s = 0, a.clamp() } function C(a, b, c) { var f = a.abs(); if (!(f.t <= 0)) { var g = this.abs(); if (g.t < f.t) return null != b && b.fromInt(0), void (null != c && this.copyTo(c)); null == c && (c = e()); var h = e() , i = this.s , j = a.s , k = this.DB - t(f[f.t - 1]); k > 0 ? (f.lShiftTo(k, h), g.lShiftTo(k, c)) : (f.copyTo(h), g.copyTo(c)); var l = h.t , m = h[l - 1]; if (0 != m) { var n = m * (1 << this.F1) + (l > 1 ? h[l - 2] >> this.F2 : 0) , o = this.FV / n , p = (1 << this.F1) / n , q = 1 << this.F2 , r = c.t , s = r - l , u = null == b ? e() : b; for (h.dlShiftTo(s, u), c.compareTo(u) >= 0 && (c[c.t++] = 1, c.subTo(u, c)), d.ONE.dlShiftTo(l, u), u.subTo(h, h); h.t < l; ) h[h.t++] = 0; for (; --s >= 0; ) { var v = c[--r] == m ? this.DM : Math.floor(c[r] * o + (c[r - 1] + q) * p); if ((c[r] += h.am(0, v, c, s, 0, l)) < v) for (h.dlShiftTo(s, u), c.subTo(u, c); c[r] < --v; ) c.subTo(u, c) } null != b && (c.drShiftTo(l, b), i != j && d.ZERO.subTo(b, b)), c.t = l, c.clamp(), k > 0 && c.rShiftTo(k, c), 0 > i && d.ZERO.subTo(c, c) } } } function D(a) { var b = e(); return this.abs().divRemTo(a, null, b), this.s < 0 && b.compareTo(d.ZERO) > 0 && a.subTo(b, b), b } function E(a) { this.m = a } function F(a) { return a.s < 0 || a.compareTo(this.m) >= 0 ? a.mod(this.m) : a } function G(a) { return a } function H(a) { a.divRemTo(this.m, null, a) } function I(a, b, c) { a.multiplyTo(b, c), this.reduce(c) } function J(a, b) { a.squareTo(b), this.reduce(b) } function K() { if (this.t < 1) return 0; var a = this[0]; if (0 == (1 & a)) return 0; var b = 3 & a; return b = b * (2 - (15 & a) * b) & 15, b = b * (2 - (255 & a) * b) & 255, b = b * (2 - ((65535 & a) * b & 65535)) & 65535, b = b * (2 - a * b % this.DV) % this.DV, b > 0 ? this.DV - b : -b } function L(a) { this.m = a, this.mp = a.invDigit(), this.mpl = 32767 & this.mp, this.mph = this.mp >> 15, this.um = (1 << a.DB - 15) - 1, this.mt2 = 2 * a.t } function M(a) { var b = e(); return a.abs().dlShiftTo(this.m.t, b), b.divRemTo(this.m, null, b), a.s < 0 && b.compareTo(d.ZERO) > 0 && this.m.subTo(b, b), b } function N(a) { var b = e(); return a.copyTo(b), this.reduce(b), b } function O(a) { for (; a.t <= this.mt2; ) a[a.t++] = 0; for (var b = 0; b < this.m.t; ++b) { var c = 32767 & a[b] , d = c * this.mpl + ((c * this.mph + (a[b] >> 15) * this.mpl & this.um) << 15) & a.DM; for (c = b + this.m.t, a[c] += this.m.am(0, d, a, b, 0, this.m.t); a[c] >= a.DV; ) a[c] -= a.DV, a[++c]++ } a.clamp(), a.drShiftTo(this.m.t, a), a.compareTo(this.m) >= 0 && a.subTo(this.m, a) } function P(a, b) { a.squareTo(b), this.reduce(b) } function Q(a, b, c) { a.multiplyTo(b, c), this.reduce(c) } function R() { return 0 == (this.t > 0 ? 1 & this[0] : this.s) } function S(a, b) { if (a > 4294967295 || 1 > a) return d.ONE; var c = e() , f = e() , g = b.convert(this) , h = t(a) - 1; for (g.copyTo(c); --h >= 0; ) if (b.sqrTo(c, f), (a & 1 << h) > 0) b.mulTo(f, g, c); else { var i = c; c = f, f = i } return b.revert(c) } function T(a, b) { var c; return c = 256 > a || b.isEven() ? new E(b) : new L(b), this.exp(a, c) } function U() { this.i = 0, this.j = 0, this.S = new Array } function V(a) { var b, c, d; for (b = 0; 256 > b; ++b) this.S[b] = b; for (c = 0, b = 0; 256 > b; ++b) c = c + this.S[b] + a[b % a.length] & 255, d = this.S[b], this.S[b] = this.S[c], this.S[c] = d; this.i = 0, this.j = 0 } function W() { var a; return this.i = this.i + 1 & 255, this.j = this.j + this.S[this.i] & 255, a = this.S[this.i], this.S[this.i] = this.S[this.j], this.S[this.j] = a, this.S[a + this.S[this.i] & 255] } function X() { return new U } function Y(a) { qb[rb++] ^= 255 & a, qb[rb++] ^= a >> 8 & 255, qb[rb++] ^= a >> 16 & 255, qb[rb++] ^= a >> 24 & 255, rb >= sb && (rb -= sb) } function Z() { Y((new Date).getTime()) } function $() { if (null == pb) { for (Z(), pb = X(), pb.init(qb), rb = 0; rb < qb.length; ++rb) qb[rb] = 0; rb = 0 } return pb.next() } function _(a) { var b; for (b = 0; b < a.length; ++b) a[b] = $() } function ab() {} function bb(a, b) { return new d(a,b) } function cb(a, b) { if (b < a.length + 11) return alert("Message too long for RSA"), null; for (var c = new Array, e = a.length - 1; e >= 0 && b > 0; ) { var f = a.charCodeAt(e--); 128 > f ? c[--b] = f : f > 127 && 2048 > f ? (c[--b] = 63 & f | 128, c[--b] = f >> 6 | 192) : (c[--b] = 63 & f | 128, c[--b] = f >> 6 & 63 | 128, c[--b] = f >> 12 | 224) } c[--b] = 0; for (var g = new ab, h = new Array; b > 2; ) { for (h[0] = 0; 0 == h[0]; ) g.nextBytes(h); c[--b] = h[0] } return c[--b] = 2, c[--b] = 0, new d(c) } function db() { this.n = null, this.e = 0, this.d = null, this.p = null, this.q = null, this.dmp1 = null, this.dmq1 = null, this.coeff = null } function eb(a, b) { null != a && null != b && a.length > 0 && b.length > 0 ? (this.n = bb(a, 16), this.e = parseInt(b, 16)) : alert("网络异常,请点击登录重试") } function fb(a) { return a.modPowInt(this.e, this.n) } function gb(a) { var b = cb(a, this.n.bitLength() + 7 >> 3); if (null == b) return null; var c = this.doPublic(b); if (null == c) return null; var d = c.toString(16); return 0 == (1 & d.length) ? d : "0" + d } var hb, ib = 0xdeadbeefcafe, jb = 15715070 == (16777215 & ib); jb && "Microsoft Internet Explorer" == navigator.appName ? (d.prototype.am = g, hb = 30) : jb && "Netscape" != navigator.appName ? (d.prototype.am = f, hb = 26) : (d.prototype.am = h, hb = 28), d.prototype.DB = hb, d.prototype.DM = (1 << hb) - 1, d.prototype.DV = 1 << hb; var kb = 52; d.prototype.FV = Math.pow(2, kb), d.prototype.F1 = kb - hb, d.prototype.F2 = 2 * hb - kb; var lb, mb, nb = "0123456789abcdefghijklmnopqrstuvwxyz", ob = new Array; for (lb = "0".charCodeAt(0), mb = 0; 9 >= mb; ++mb) ob[lb++] = mb; for (lb = "a".charCodeAt(0), mb = 10; 36 > mb; ++mb) ob[lb++] = mb; for (lb = "A".charCodeAt(0), mb = 10; 36 > mb; ++mb) ob[lb++] = mb; E.prototype.convert = F, E.prototype.revert = G, E.prototype.reduce = H, E.prototype.mulTo = I, E.prototype.sqrTo = J, L.prototype.convert = M, L.prototype.revert = N, L.prototype.reduce = O, L.prototype.mulTo = Q, L.prototype.sqrTo = P, d.prototype.copyTo = k, d.prototype.fromInt = l, d.prototype.fromString = n, d.prototype.clamp = o, d.prototype.dlShiftTo = v, d.prototype.drShiftTo = w, d.prototype.lShiftTo = x, d.prototype.rShiftTo = y, d.prototype.subTo = z, d.prototype.multiplyTo = A, d.prototype.squareTo = B, d.prototype.divRemTo = C, d.prototype.invDigit = K, d.prototype.isEven = R, d.prototype.exp = S, d.prototype.toString = p, d.prototype.negate = q, d.prototype.abs = r, d.prototype.compareTo = s, d.prototype.bitLength = u, d.prototype.mod = D, d.prototype.modPowInt = T, d.ZERO = m(0), d.ONE = m(1), U.prototype.init = V, U.prototype.next = W; var pb, qb, rb, sb = 256; if (null == qb) { qb = new Array, rb = 0; var tb; if (window.crypto && window.crypto.getRandomValues) { var ub = new Uint8Array(32); for (window.crypto.getRandomValues(ub), tb = 0; 32 > tb; ++tb) qb[rb++] = ub[tb] } if ("Netscape" == navigator.appName && navigator.appVersion < "5" && window.crypto) { var vb = window.crypto.random(32); for (tb = 0; tb < vb.length; ++tb) qb[rb++] = 255 & vb.charCodeAt(tb) } for (; sb > rb; ) tb = Math.floor(65536 * Math.random()), qb[rb++] = tb >>> 8, qb[rb++] = 255 & tb; rb = 0, Z() } ab.prototype.nextBytes = _, db.prototype.doPublic = fb, db.prototype.setPublic = eb, db.prototype.encrypt = gb
解决了改写的问题,还有浏览器DOM BOM(window navigator等)对象的改写问题,有想了解的朋友私聊我。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。