feat: add uuid、numToNumber4 function, add bignum list

This commit is contained in:
rnet 2023-12-27 00:38:53 +08:00
parent cc899698f8
commit 852a6478b5
8 changed files with 72 additions and 2 deletions

View File

@ -5,6 +5,12 @@ const _get = require('lodash/get');
const cache = {};
class GlobalVarible {
get bignum() {
return cache.bignum;
}
get utils() {
return cache.utils;
}
get cp0() {
return cache.cp0;
}

View File

@ -0,0 +1,13 @@
const gv = require('@src/handler/globalVarible');
exports.init = function() {
const arr = [];
for (let i = 0; i < gv.cp2[30]; i++) {
let item = i;
for (_$iv = 0; _$iv < gv.cp2[52]; _$iv++) {
item = item & 1 ? gv.cp2[167] ^ item >>> 1 : item >>> 1;
}
arr[i] = item;
}
gv.setAttr('bignum', arr);
}

View File

@ -6,4 +6,6 @@ exports.encrypt = require('./encrypt');
exports.decrypt = require('./decrypt');
exports.extrace = require('./extrace');
exports.decode = require('./decode');
exports.uuid = require('./uuid');
exports.numToNumarr4 = require('./numToNumarr4');

View File

@ -0,0 +1,12 @@
// 将数字转换为4位数字数组
const gv = require('@src/handler/globalVarible');
module.exports = function (num) {
if (typeof num !== 'number') num = 0;
return [
num >> gv.cp2[4] & gv.cp2[34],
num >> gv.cp2[2] & gv.cp2[34],
num >> gv.cp2[52] & gv.cp2[34],
num & gv.cp2[34]
];
}

View File

@ -0,0 +1,16 @@
// 处理字符串或者数字数字返回唯一标识
const gv = require('@src/handler/globalVarible');
function str2code(str) {
str = unescape(encodeURIComponent(str));
return str.split('').map(it => it.charCodeAt())
}
module.exports = function (numarr) {
if (typeof numarr === 'string') numarr = str2code(numarr);
let val = 0 ^ gv.cp2[41];
for (let i = 0; i < numarr.length; ) {
val = val >>> gv.cp2[52] ^ gv.bignum[(val ^ numarr[i++]) & gv.cp2[34]];
}
return (val ^ gv.cp2[41]) >>> 0;
}

View File

@ -2,10 +2,12 @@ const gv = require('../globalVarible');
const common = require('./common');
function init(ts) {
gv.setAttr('utils', common);
gv.setAttr('ts', ts);
require('./r2mka').init();
require('./tscp').init();
require('./tscd').init();
require('./bignum').init();
}
module.exports = {

View File

@ -26,6 +26,7 @@ const valueMap = {
'parseFloat': swap(gv.cp0_96(5, 18)) + hexnum(gv.cp0_96(8, 30)),
'11.678': hexnum(gv.cp0_96(7, 17)),
'1.234': swap(gv.cp0_96(8, 36)),
'captureStackTrace': main(gv.cp0_96(7, 63))[0],
}
test('test cp0_96', () => {

View File

@ -1,6 +1,18 @@
const paths = require('@utils/paths');
const fs = require('fs');
const { main, swap, hexnum, combine4, decrypt, encrypt, extrace, init, decode } = require('../src/handler/parser/');
const {
init,
main,
swap,
hexnum,
combine4,
decrypt,
encrypt,
extrace,
decode,
uuid,
numToNumarr4,
} = require('../src/handler/parser/');
const tsFullPath = paths.exampleResolve('codes', '1-$_ts-full.json');
init(JSON.parse(fs.readFileSync(tsFullPath, 'utf8')));
const gv = require('@src/handler/globalVarible');
@ -28,8 +40,14 @@ describe('test parser common', () => {
const arr = encrypt(decrypt('GGZGPQnkMJBUeWs2sLstGIr6oLYDI3AX'), gv.keys[17]);
expect(extrace(arr)).toEqual([[], [], [47, 115, 103, 116, 109, 105], [], [], [], []]);
});
test('test extrace', () => {
test('test decode', () => {
const arr = extrace(encrypt(decrypt('GGZGPQnkMJBUeWs2sLstGIr6oLYDI3AX'), gv.keys[17]));
expect(decode(arr[2])).toBe('/sgtmi');
});
test('test uuid', () => {
expect(uuid("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36")).toBe(2290443310);
});
test('test uuid', () => {
expect(numToNumarr4(uuid("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36"))).toEqual([136, 133, 100, 46]);
});
});