This commit is contained in:
eric
2025-09-13 08:13:47 +08:00
parent 2f1b57eb2c
commit 9c09960431
90 changed files with 8597 additions and 0 deletions

425
javascript/liveme.js Normal file
View File

@@ -0,0 +1,425 @@
/**
* @author Hmily
* @createTime 2024-10-10
*/
const id = 1;
const r = `${new Date().getTime()}${id}`
const Am = "LM6000101139961122666757";
const rl = "undefined"
function createRandom(length = 32) {
let result = "";
const characters = "ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678";
for (let i = 0; i < length; ++i) {
const randomIndex = Math.floor(Math.random() * characters.length);
result += characters.charAt(randomIndex);
}
return result;
}
function createSignature(input = "4l4m5") {
let signature = "";
let number = 0;
for (let i = 0; i < input.length; ++i) {
const charCode = input.charCodeAt(i);
if (charCode >= 48 && charCode <= 57) {
number = number * 10 + (charCode - 48);
} else {
if (number !== 0) {
signature += createRandom(number);
number = 0;
}
signature += String.fromCharCode(charCode);
}
}
if (number !== 0) {
signature += createRandom(number);
}
return signature;
}
function oC(e) {
return e && e.__esModule && Object.prototype.hasOwnProperty.call(e, "default") ? e.default : e
}
var Tm = {
exports: {}
}
, Sm = {
exports: {}
};
(function() {
var e = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
, t = {
rotl: function(n, r) {
return n << r | n >>> 32 - r
},
rotr: function(n, r) {
return n << 32 - r | n >>> r
},
endian: function(n) {
if (n.constructor == Number)
return t.rotl(n, 8) & 16711935 | t.rotl(n, 24) & 4278255360;
for (var r = 0; r < n.length; r++)
n[r] = t.endian(n[r]);
return n
},
randomBytes: function(n) {
for (var r = []; n > 0; n--)
r.push(Math.floor(Math.random() * 256));
return r
},
bytesToWords: function(n) {
for (var r = [], s = 0, o = 0; s < n.length; s++,
o += 8)
r[o >>> 5] |= n[s] << 24 - o % 32;
return r
},
wordsToBytes: function(n) {
for (var r = [], s = 0; s < n.length * 32; s += 8)
r.push(n[s >>> 5] >>> 24 - s % 32 & 255);
return r
},
bytesToHex: function(n) {
for (var r = [], s = 0; s < n.length; s++)
r.push((n[s] >>> 4).toString(16)),
r.push((n[s] & 15).toString(16));
return r.join("")
},
hexToBytes: function(n) {
for (var r = [], s = 0; s < n.length; s += 2)
r.push(parseInt(n.substr(s, 2), 16));
return r
},
bytesToBase64: function(n) {
for (var r = [], s = 0; s < n.length; s += 3)
for (var o = n[s] << 16 | n[s + 1] << 8 | n[s + 2], i = 0; i < 4; i++)
s * 8 + i * 6 <= n.length * 8 ? r.push(e.charAt(o >>> 6 * (3 - i) & 63)) : r.push("=");
return r.join("")
},
base64ToBytes: function(n) {
n = n.replace(/[^A-Z0-9+\/]/ig, "");
for (var r = [], s = 0, o = 0; s < n.length; o = ++s % 4)
o != 0 && r.push((e.indexOf(n.charAt(s - 1)) & Math.pow(2, -2 * o + 8) - 1) << o * 2 | e.indexOf(n.charAt(s)) >>> 6 - o * 2);
return r
}
};
Sm.exports = t
}
)();
var iC = Sm.exports
, nl = {
utf8: {
stringToBytes: function(e) {
return nl.bin.stringToBytes(unescape(encodeURIComponent(e)))
},
bytesToString: function(e) {
return decodeURIComponent(escape(nl.bin.bytesToString(e)))
}
},
bin: {
stringToBytes: function(e) {
for (var t = [], n = 0; n < e.length; n++)
t.push(e.charCodeAt(n) & 255);
return t
},
bytesToString: function(e) {
for (var t = [], n = 0; n < e.length; n++)
t.push(String.fromCharCode(e[n]));
return t.join("")
}
}
}, sd = nl;
var aC = function(e) {
return e != null && (Cm(e) || lC(e) || !!e._isBuffer)
};
function Cm(e) {
return !!e.constructor && typeof e.constructor.isBuffer == "function" && e.constructor.isBuffer(e)
}
function lC(e) {
return typeof e.readFloatLE == "function" && typeof e.slice == "function" && Cm(e.slice(0, 0))
}
(function() {
var e = iC
, t = sd.utf8
, n = aC
, r = sd.bin
, s = function(o, i) {
o.constructor == String ? i && i.encoding === "binary" ? o = r.stringToBytes(o) : o = t.stringToBytes(o) : n(o) ? o = Array.prototype.slice.call(o, 0) : !Array.isArray(o) && o.constructor !== Uint8Array && (o = o.toString());
for (var a = e.bytesToWords(o), l = o.length * 8, c = 1732584193, u = -271733879, f = -1732584194, d = 271733878, m = 0; m < a.length; m++)
a[m] = (a[m] << 8 | a[m] >>> 24) & 16711935 | (a[m] << 24 | a[m] >>> 8) & 4278255360;
a[l >>> 5] |= 128 << l % 32,
a[(l + 64 >>> 9 << 4) + 14] = l;
for (var v = s._ff, w = s._gg, R = s._hh, y = s._ii, m = 0; m < a.length; m += 16) {
var b = c
, _ = u
, g = f
, C = d;
c = v(c, u, f, d, a[m + 0], 7, -680876936),
d = v(d, c, u, f, a[m + 1], 12, -389564586),
f = v(f, d, c, u, a[m + 2], 17, 606105819),
u = v(u, f, d, c, a[m + 3], 22, -1044525330),
c = v(c, u, f, d, a[m + 4], 7, -176418897),
d = v(d, c, u, f, a[m + 5], 12, 1200080426),
f = v(f, d, c, u, a[m + 6], 17, -1473231341),
u = v(u, f, d, c, a[m + 7], 22, -45705983),
c = v(c, u, f, d, a[m + 8], 7, 1770035416),
d = v(d, c, u, f, a[m + 9], 12, -1958414417),
f = v(f, d, c, u, a[m + 10], 17, -42063),
u = v(u, f, d, c, a[m + 11], 22, -1990404162),
c = v(c, u, f, d, a[m + 12], 7, 1804603682),
d = v(d, c, u, f, a[m + 13], 12, -40341101),
f = v(f, d, c, u, a[m + 14], 17, -1502002290),
u = v(u, f, d, c, a[m + 15], 22, 1236535329),
c = w(c, u, f, d, a[m + 1], 5, -165796510),
d = w(d, c, u, f, a[m + 6], 9, -1069501632),
f = w(f, d, c, u, a[m + 11], 14, 643717713),
u = w(u, f, d, c, a[m + 0], 20, -373897302),
c = w(c, u, f, d, a[m + 5], 5, -701558691),
d = w(d, c, u, f, a[m + 10], 9, 38016083),
f = w(f, d, c, u, a[m + 15], 14, -660478335),
u = w(u, f, d, c, a[m + 4], 20, -405537848),
c = w(c, u, f, d, a[m + 9], 5, 568446438),
d = w(d, c, u, f, a[m + 14], 9, -1019803690),
f = w(f, d, c, u, a[m + 3], 14, -187363961),
u = w(u, f, d, c, a[m + 8], 20, 1163531501),
c = w(c, u, f, d, a[m + 13], 5, -1444681467),
d = w(d, c, u, f, a[m + 2], 9, -51403784),
f = w(f, d, c, u, a[m + 7], 14, 1735328473),
u = w(u, f, d, c, a[m + 12], 20, -1926607734),
c = R(c, u, f, d, a[m + 5], 4, -378558),
d = R(d, c, u, f, a[m + 8], 11, -2022574463),
f = R(f, d, c, u, a[m + 11], 16, 1839030562),
u = R(u, f, d, c, a[m + 14], 23, -35309556),
c = R(c, u, f, d, a[m + 1], 4, -1530992060),
d = R(d, c, u, f, a[m + 4], 11, 1272893353),
f = R(f, d, c, u, a[m + 7], 16, -155497632),
u = R(u, f, d, c, a[m + 10], 23, -1094730640),
c = R(c, u, f, d, a[m + 13], 4, 681279174),
d = R(d, c, u, f, a[m + 0], 11, -358537222),
f = R(f, d, c, u, a[m + 3], 16, -722521979),
u = R(u, f, d, c, a[m + 6], 23, 76029189),
c = R(c, u, f, d, a[m + 9], 4, -640364487),
d = R(d, c, u, f, a[m + 12], 11, -421815835),
f = R(f, d, c, u, a[m + 15], 16, 530742520),
u = R(u, f, d, c, a[m + 2], 23, -995338651),
c = y(c, u, f, d, a[m + 0], 6, -198630844),
d = y(d, c, u, f, a[m + 7], 10, 1126891415),
f = y(f, d, c, u, a[m + 14], 15, -1416354905),
u = y(u, f, d, c, a[m + 5], 21, -57434055),
c = y(c, u, f, d, a[m + 12], 6, 1700485571),
d = y(d, c, u, f, a[m + 3], 10, -1894986606),
f = y(f, d, c, u, a[m + 10], 15, -1051523),
u = y(u, f, d, c, a[m + 1], 21, -2054922799),
c = y(c, u, f, d, a[m + 8], 6, 1873313359),
d = y(d, c, u, f, a[m + 15], 10, -30611744),
f = y(f, d, c, u, a[m + 6], 15, -1560198380),
u = y(u, f, d, c, a[m + 13], 21, 1309151649),
c = y(c, u, f, d, a[m + 4], 6, -145523070),
d = y(d, c, u, f, a[m + 11], 10, -1120210379),
f = y(f, d, c, u, a[m + 2], 15, 718787259),
u = y(u, f, d, c, a[m + 9], 21, -343485551),
c = c + b >>> 0,
u = u + _ >>> 0,
f = f + g >>> 0,
d = d + C >>> 0
}
return e.endian([c, u, f, d])
};
s._ff = function(o, i, a, l, c, u, f) {
var d = o + (i & a | ~i & l) + (c >>> 0) + f;
return (d << u | d >>> 32 - u) + i
}
,
s._gg = function(o, i, a, l, c, u, f) {
var d = o + (i & l | a & ~l) + (c >>> 0) + f;
return (d << u | d >>> 32 - u) + i
}
,
s._hh = function(o, i, a, l, c, u, f) {
var d = o + (i ^ a ^ l) + (c >>> 0) + f;
return (d << u | d >>> 32 - u) + i
}
,
s._ii = function(o, i, a, l, c, u, f) {
var d = o + (a ^ (i | ~l)) + (c >>> 0) + f;
return (d << u | d >>> 32 - u) + i
}
,
s._blocksize = 16,
s._digestsize = 16,
Tm.exports = function(o, i) {
if (o == null)
throw new Error("Illegal argument " + o);
var a = e.wordsToBytes(s(o, i));
return i && i.asBytes ? a : i && i.asString ? r.bytesToString(a) : e.bytesToHex(a)
}
}
)();
var cC = Tm.exports;
var t = {
utf8: {
stringToBytes: function(e) {
return nl.bin.stringToBytes(unescape(encodeURIComponent(e)))
},
bytesToString: function(e) {
return decodeURIComponent(escape(nl.bin.bytesToString(e)))
}
},
bin: {
stringToBytes: function(e) {
for (var t = [], n = 0; n < e.length; n++)
t.push(e.charCodeAt(n) & 255);
return t
},
bytesToString: function(e) {
for (var t = [], n = 0; n < e.length; n++)
t.push(String.fromCharCode(e[n]));
return t.join("")
}
}
};
const hC = (e, t, n=!1) => {
if (t.params) {
const o = {};
Object.keys(t.params).forEach(i => {
t.params[i] !== void 0 && t.params[i] !== null && (o[i] = t.params[i])
}
),
t.params = o
}
let r = {};
const s = t.method.toLowerCase();
if (s === "get")
t.params = Object.assign({}, e, t.params || {});
else if (s === "post")
if (typeof t.data == "string") {
let o;
t.data.split("&").forEach(i => {
o = i.split("="),
r[o[0]] = o[1]
}
),
r = Object.assign({}, e, r),
t.data = Object.keys(r).map(i => `${i}=${r[i]}`).join("&")
} else
r = Object.assign(r, e, t.data || {}),
t.data = r;
return n ? t : (r = Object.assign({}, t.params, r),
r)
}
const Rm = oC(cC);
const s = Rm(r);
pC = e => {
let t = Object.keys(e).sort().map(n => {
function r(s) {
return Array.isArray(s) ? s.join(",") : typeof s === "object" ? JSON.stringify(s) : s
}
return n + r(e[n])
}
).join("");
return t += Am + e.lm_s_ts + rl,
Rm(t)
}
// final encryption function
let CryptoJS = null;
lm_s_key = atob('ZGQ0NmRiYjQ0MmI2ZTRiYTgxN2Q2MzQ3ZDJkZGY0OTM=');
function requestSign(signParams, cryptoJSPath) {
let sKey = Object.keys(signParams).sort().map(key => {
function getValue(val) {
if (Array.isArray(val)) {
return val.join(',');
}
if (typeof val === 'object') {
return JSON.stringify(val);
}
return val;
}
return key + getValue(signParams[key]);
}).join('');
sKey += signParams.lm_s_id + signParams.lm_s_ts + lm_s_key;
console.log(`sKey: ${sKey}`);
CryptoJS = require(cryptoJSPath);
return CryptoJS.MD5(sKey).toString();
}
function sign(videoid, cryptoJSPath, platform='web'){
const vali = createSignature();
const data_e = {
lm_s_id: Am,
lm_s_ts: r,
lm_s_str: s,
lm_s_ver: 1,
h5: 1
};
/* data_e example value
const data_e = {
lm_s_id: Am,
lm_s_ts: "17284909009151",
lm_s_str: "88f9777231dc2d6ac462a1d7ebf5f54e",
lm_s_ver: 1,
h5: 1
};
*/
console.log("data_e:",data_e);
data_i = {
...data_e,
_time: new Date().valueOf(),
thirdchannel: 6,
videoid: videoid,
area: 'zh',
vali: vali
}
console.log("data_i:",data_i);
// fake lm_s_sign param value
let lm_s_sign = pC(data_i);
console.log(`fake lm_s_sign: ${lm_s_sign}`);
//finnal request params
/*
signParams = {
"alias": "liveme",
"tongdun_black_box": "iWPU21728483558afruvSVo6x0",
"os": "android",
"lm_s_id": "LM6000101139961122666757",
"lm_s_ts": "17284909009151",
"lm_s_str": "88f9777231dc2d6ac462a1d7ebf5f54e",
"lm_s_ver": 1,
"h5": 1,
"_time": 1728490664651,
"thirdchannel": 6,
"videoid": "17284844223282059697",
"area": "zh",
"vali": "zH8SlBwnCm4AZWp"
}#
//result: 4eaf71a1ec19b49b7267e4d16e007105
*/
signParams = {
"alias": "liveme",
"tongdun_black_box": "",
"os": platform,
...data_i
}
console.log("signParams: ", signParams);
lm_s_sign = requestSign(signParams, cryptoJSPath);
console.log(`\x1b[32mfinal lm_s_sign: \x1b[0m${lm_s_sign}\n`);
data = {
...signParams,
lm_s_sign
}
return data;
}
module.exports = {
sign
};