js逆向方法api调用(快手、抖音、wx、hnw、xhs)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

267 lines
6.0 KiB

var w = 4294967296; // 先固定
var M = r2(0,0,false);
function mul_(v0, v1, v2, v3){
let i32_v0 = new Int32Array(8);
i32_v0[0] = v0;
let i64_v0 = new BigInt64Array(i32_v0.buffer)[0];
// console.log(i64_v0)
let i32_v1 = new Int32Array(8);
i32_v1[0] = v1;
let i64_v1 = new BigInt64Array(i32_v1.buffer)[0];
let i32_v2 = new Int32Array(8);
i32_v2[0] = v2;
let i64_v2 = new BigInt64Array(i32_v2.buffer)[0];
let i32_v3 = new Int32Array(8);
i32_v3[0] = v3;
let i64_v3 = new BigInt64Array(i32_v3.buffer)[0];
let i64_const = 32n;
// shl、or、mul操作
let tmp = (i64_v0 | (i64_v1 << i64_const)) * (i64_v2 | (i64_v3 << i64_const));
// console.log(Number(tmp), tmp)
// global0 shr_s
let get_length = Number(tmp >> i64_const);
let res = Number(tmp) >> 32;
// console.log(res, get_length);
return {mul: res, get_length: get_length}
}
function div_u_(v0, v1, v2, v3){
let i32_v0 = new Int32Array(8);
i32_v0[0] = v0;
let i64_v0 = new BigInt64Array(i32_v0.buffer)[0];
// console.log(i64_v0)
let i32_v1 = new Int32Array(8);
i32_v1[0] = v1;
let i64_v1 = new BigInt64Array(i32_v1.buffer)[0];
// console.log(i64_v1)
let i32_v2 = new Int32Array(8);
i32_v2[0] = v2;
let i64_v2 = new BigInt64Array(i32_v2.buffer)[0];
let i32_v3 = new Int32Array(8);
i32_v3[0] = v3;
let i64_v3 = new BigInt64Array(i32_v3.buffer)[0];
let i64_const = 32n;
// let u32_max = 0xFFFFFFFF;
// shl、or、div操作
let tmp = ((i64_v0 | (i64_v1 << i64_const)) / (i64_v2 | (i64_v3 << i64_const)))
// console.log(Number(tmp))
// global0 shr_s
let get_length = Number(tmp >> i64_const);
let res = Number(tmp) >> 32;
// console.log(res, get_length);
return {div_u: res, get_length: get_length}
}
function randomInt (e, t) {
return Math.floor(Math.random() * (t - e + 1) + e)
}
function o(t) {
return !0 === (t && t.__isLong__)
}
function m(t, e) {
return "number" == typeof t ? l(t, e) : "string" == typeof t ? y(t, e) : d(t.low, t.high, "boolean" == typeof e ? e : t.unsigned)
}
function toUnsigned(obj) {
return obj.unsigned ? obj : d(obj.low, obj.high, !0)
}
function isZero(obj) {
return 0 === obj.high && 0 === obj.low
}
function r2(t, e, n) {
return {low:0 | t, high:0 | e, unsigned:!!n}
}
function d(t, e, n) {
return r2(t,e,n)
}
function eq(t, obj) {
return o(t) || (t = m(t)),
(obj.unsigned === t.unsigned || obj.high >>> 31 != 1 || t.high >>> 31 != 1) && (obj.high === t.high && obj.low === t.low)
}
function not(obj){
return d(~obj.low, ~obj.high, obj.unsigned);
}
function neg(obj) {
let k = {
"low": 1,
"high": 0,
"unsigned": false
}
return add(k, not(obj));
}
function l(t, e) {
return t < 0 ? l(-t, e).neg() : d(t % w | 0, t / w | 0, e)
}
function isNegative(obj){
return !obj.unsigned && obj.high < 0
}
function isOdd(obj) {
return 1 == (1 & obj.low)
}
function mul(t, obj) {
if (isZero(obj))
return M;
if (o(t) || (t = m(t))){
let mul$ = mul_(obj.low, obj.high, t.low, t.high);
return d(mul$["mul"], mul$["get_length"], obj.unsigned);
}
if (isZero(t))
return M;
if (eq(j, obj))
return t.isOdd() ? j : M;
if (eq(j, t))
return isOdd(obj) ? j : M;
if (isNegative(obj))
return t.isNegative() ? this.neg().mul(t.neg()) : this.neg().mul(t).neg();
if (t.isNegative())
return this.mul(t.neg()).neg();
if (this.lt(x) && t.lt(x))
return l(this.toNumber() * t.toNumber(), this.unsigned);
var e = obj.high >>> 16
, r = 65535 & obj.high
, f = obj.low >>> 16
, c = 65535 & obj.low
, h = t.high >>> 16
, v = 65535 & t.high
, y = t.low >>> 16
, w = 65535 & t.low
, _ = 0
, S = 0
, E = 0
, k = 0;
return E += (k += c * w) >>> 16,
S += (E += f * w) >>> 16,
E &= 65535,
S += (E += c * y) >>> 16,
_ += (S += r * w) >>> 16,
S &= 65535,
_ += (S += f * y) >>> 16,
S &= 65535,
_ += (S += c * v) >>> 16,
_ += e * w + r * y + f * v + c * h,
d((E &= 65535) << 16 | (k &= 65535), (_ &= 65535) << 16 | (S &= 65535), obj.unsigned)
}
function div(t, o){
let div_ = div_u_(o.low, o.high, t.low, t.high);
return o.unsigned || -2147483648 !== o.high || -1 !== t.low || -1 !== t.high ? d(div_["div_u"], div_["get_length"], o.unsigned) : o;
}
function sub(t, obj) {
return o(t) || (t = m(t)),
add(neg(t), obj)
}
function toInt(obj) {
return obj.unsigned ? obj.low >>> 0 : obj.low
}
function toS(t, obj){
for (var r = l(Math.pow(t, 6), obj.unsigned), o = obj, f = ""; ; ) {
var c = div(r, o)
h = (toInt(sub(mul(r, c), o)) >>> 0).toString(t),
h = (toInt(sub(mul(r, c), o)) >>> 0).toString(t);
if (isZero(o = c))
return h + f;
for (; h.length < 6; )
h = "0" + h;
f = "" + h + f
}
}
function add(t, obj) {
o(t) || (t = m(t));
var e = obj.high >>> 16
, n = 65535 & obj.high
, r = obj.low >>> 16
, f = 65535 & obj.low
, c = t.high >>> 16
, h = 65535 & t.high
, l = t.low >>> 16
, v = 0
, y = 0
, w = 0
, _ = 0;
return w += (_ += f + (65535 & t.low)) >>> 16,
y += (w += r + l) >>> 16,
v += (y += n + h) >>> 16,
v += e + c,
d((w &= 65535) << 16 | (_ &= 65535), (v &= 65535) << 16 | (y &= 65535), obj.unsigned)
}
function y(t, e, n) {
var p;
for (var r = l(Math.pow(n, 8)), o = M, i = 0; i < t.length; i += 8) {
var f = Math.min(8, t.length - i)
, c = parseInt(t.substring(i, i + f), n);
if (f < 8) {
var h = l(Math.pow(n, f));
o = add(l(c), mul(h, o));
} else{
o = add(l(c), mul(r, o));
}
}
return o.unsigned = e,
o
}
function getS(key){
return toS(10, toUnsigned(y(key, !0, 16)));
}
module.exports = {
getS
}