mirror of
https://github.com/pysunday/rs-reverse.git
synced 2025-04-12 11:56:55 +08:00
feat: add encrypt function
This commit is contained in:
parent
0b38130533
commit
5abb5e456a
87
src/handler/parser/common/encrypt.js
Normal file
87
src/handler/parser/common/encrypt.js
Normal file
@ -0,0 +1,87 @@
|
||||
const gv = require('@src/handler/globalVarible');
|
||||
|
||||
function getTree() {
|
||||
let arr = [];
|
||||
for (let i = 1; i < gv.cp2[34]; i++) {
|
||||
arr.push({
|
||||
total: 1,
|
||||
idx: i
|
||||
});
|
||||
}
|
||||
arr.push({
|
||||
total: gv.cp2[55],
|
||||
idx: gv.cp2[34]
|
||||
}, {
|
||||
total: gv.cp2[49],
|
||||
idx: 0
|
||||
}
|
||||
);
|
||||
function parse(item) {
|
||||
for (let i = 0; i < arr.length; i++) {
|
||||
if (item.total <= arr[i].total) {
|
||||
arr.splice(i, 0, item);
|
||||
return;
|
||||
}
|
||||
}
|
||||
arr.push(item);
|
||||
}
|
||||
while (arr.length > 1) {
|
||||
const [one, two] = arr.slice(0, gv.cp2[56]);
|
||||
arr = arr.slice(gv.cp2[56]);
|
||||
parse({
|
||||
total: one.total + two.total,
|
||||
first: one,
|
||||
second: two
|
||||
});
|
||||
}
|
||||
return arr[0];
|
||||
}
|
||||
|
||||
function getKey(arr) {
|
||||
for (let idx in arr) {
|
||||
if (arr[idx].val >= gv.cp2[52]) {
|
||||
return arr[idx].key >> arr[idx].val - gv.cp2[52];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function getEncryptConfig(tree, config = {key: 0, val: 0}, arr = []) {
|
||||
// 返回用于加密的配置数组
|
||||
if (tree.idx === undefined) {
|
||||
getEncryptConfig(tree.first, {
|
||||
key: config.key << 1,
|
||||
val: config.val + 1
|
||||
}, arr);
|
||||
getEncryptConfig(tree.second, {
|
||||
key: (config.key << 1) + 1,
|
||||
val: config.val + 1
|
||||
}, arr)
|
||||
} else {
|
||||
arr[tree.idx] = config;
|
||||
}
|
||||
return [arr, getKey(arr)];
|
||||
}
|
||||
|
||||
let encryptConfig = undefined;
|
||||
|
||||
module.exports = function (numarr) {
|
||||
// 对数字数组加密并返回加密后数组
|
||||
if (!encryptConfig) encryptConfig = getEncryptConfig(getTree());
|
||||
const ans = [];
|
||||
const len = numarr.length;
|
||||
let one = 0, two = 0;
|
||||
for (let i = 0; i < len; i++) {
|
||||
const cfg = encryptConfig[0][numarr[i]];
|
||||
one = one << cfg.val | cfg.key;
|
||||
two += cfg.val;
|
||||
while (two >= gv.cp2[52]) {
|
||||
ans.push(one >> two - gv.cp2[52]);
|
||||
one &= ~(gv.cp2[34] << two - gv.cp2[52]);
|
||||
two -= gv.cp2[52];
|
||||
}
|
||||
}
|
||||
if (two > 0) {
|
||||
ans.push(one << gv.cp2[52] - two | encryptConfig[1] >> two);
|
||||
}
|
||||
return ans;
|
||||
}
|
@ -1,21 +1,23 @@
|
||||
const { execRandomByNumber, execNumberByTime } = require('./random');
|
||||
exports.execNumberByTime = execNumberByTime;
|
||||
exports.execRandomByNumber = execRandomByNumber;
|
||||
exports.main = require('./main');
|
||||
exports.swap = require('./swap');
|
||||
exports.hexnum = require('./hexnum');
|
||||
exports.combine4 = require('./combine4');
|
||||
exports.bitwiseTwoNumarr = require('./bitwiseTwoNumarr');
|
||||
exports.decrypt = require('./decrypt');
|
||||
exports.extrace = require('./extrace');
|
||||
exports.decode = require('./decode');
|
||||
exports.uuid = require('./uuid');
|
||||
exports.numToNumarr2 = require('./numToNumarr2');
|
||||
exports.numToNumarr4 = require('./numToNumarr4');
|
||||
exports.numToNumarr8 = require('./numToNumarr8');
|
||||
exports.string2ascii = require('./string2ascii');
|
||||
exports.ascii2string = require('./ascii2string');
|
||||
exports.getFixedNumber = require('./getFixedNumber');
|
||||
exports.numarrAddTime = require('./numarrAddTime');
|
||||
exports.stringEncrypt = require('./stringEncrypt');
|
||||
module.exports = {
|
||||
...require('./random'),
|
||||
...require('./tools'),
|
||||
...require('./swap'),
|
||||
main: require('./main'),
|
||||
hexnum: require('./hexnum'),
|
||||
combine4: require('./combine4'),
|
||||
bitwiseTwoNumarr: require('./bitwiseTwoNumarr'),
|
||||
decrypt: require('./decrypt'),
|
||||
extrace: require('./extrace'),
|
||||
decode: require('./decode'),
|
||||
uuid: require('./uuid'),
|
||||
numToNumarr2: require('./numToNumarr2'),
|
||||
numToNumarr4: require('./numToNumarr4'),
|
||||
numToNumarr8: require('./numToNumarr8'),
|
||||
string2ascii: require('./string2ascii'),
|
||||
ascii2string: require('./ascii2string'),
|
||||
getFixedNumber: require('./getFixedNumber'),
|
||||
numarrAddTime: require('./numarrAddTime'),
|
||||
stringEncrypt: require('./stringEncrypt'),
|
||||
encrypt: require('./encrypt'),
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
// 字符交换方式解码字符串
|
||||
module.exports = function (str) {
|
||||
// 字符每4位交换解码字符串
|
||||
exports.swap4 = function (str) {
|
||||
const arr = str.split('');
|
||||
for (let idx = str.length - 4; idx >= 0; idx -= 4) {
|
||||
[arr[idx], arr[idx + 1], arr[idx + 3], arr[idx + 2]] =
|
||||
@ -8,3 +8,12 @@ module.exports = function (str) {
|
||||
return arr.join('');
|
||||
}
|
||||
|
||||
// 字符每2位交换解码字符串
|
||||
exports.swap2 = function (str) {
|
||||
const arr = str.split('');
|
||||
for (let idx = str.length - 2; idx >= 0; idx -= 2) {
|
||||
[arr[idx], arr[idx + 1]] = [arr[idx + 1], arr[idx]]
|
||||
}
|
||||
return arr.join('');
|
||||
}
|
||||
|
||||
|
16
src/handler/parser/common/tools.js
Normal file
16
src/handler/parser/common/tools.js
Normal file
@ -0,0 +1,16 @@
|
||||
const gv = require('@src/handler/globalVarible');
|
||||
|
||||
exports.factorial = function (n) {
|
||||
// 阶乘
|
||||
let ans = 1;
|
||||
for (let i = 1; i <= n; i++) {
|
||||
ans *= i;
|
||||
}
|
||||
return ans;
|
||||
}
|
||||
|
||||
exports.fibonacci = function (n) {
|
||||
// 斐波那契
|
||||
if (n <= 1) return n;
|
||||
return exports.fibonacci(n - 1) + exports.fibonacci(n - 2);
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
const paths = require('@utils/paths');
|
||||
const fs = require('fs');
|
||||
const { main, swap, hexnum, init } = require('../src/handler/parser/');
|
||||
const { main, swap4, swap2, hexnum, init } = 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');
|
||||
@ -23,11 +23,12 @@ const gv = require('@src/handler/globalVarible');
|
||||
|
||||
const valueMap = {
|
||||
'visibilityState': main(gv.cp0_96(6, 69)).join(),
|
||||
'parseFloat': swap(gv.cp0_96(5, 18)) + hexnum(gv.cp0_96(8, 30)),
|
||||
'parseFloat': swap4(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)),
|
||||
'1.234': swap4(gv.cp0_96(8, 36)),
|
||||
'captureStackTrace': main(gv.cp0_96(7, 63))[0],
|
||||
'16777216': hexnum(gv.cp0_96(6, 76)),
|
||||
'avigator': swap2(gv.cp0_96(10, 63)),
|
||||
}
|
||||
|
||||
test('test cp0_96', () => {
|
||||
|
@ -3,7 +3,8 @@ const fs = require('fs');
|
||||
const {
|
||||
init,
|
||||
main,
|
||||
swap,
|
||||
swap4,
|
||||
swap2,
|
||||
hexnum,
|
||||
combine4,
|
||||
decrypt,
|
||||
@ -17,6 +18,7 @@ const {
|
||||
getFixedNumber,
|
||||
numarrAddTime,
|
||||
stringEncrypt,
|
||||
encrypt,
|
||||
} = require('../src/handler/parser/');
|
||||
const tsFullPath = paths.exampleResolve('codes', '1-$_ts-full.json');
|
||||
init(JSON.parse(fs.readFileSync(tsFullPath, 'utf8')));
|
||||
@ -27,7 +29,8 @@ describe('test parser common', () => {
|
||||
expect(main('inakaxadalqKlwl{')[0]).toBe('visibilityState');
|
||||
});
|
||||
test('test swap', () => {
|
||||
expect(swap('rpsa')).toBe('pars');
|
||||
expect(swap4('rpsa')).toBe('pars');
|
||||
expect(swap2('nvagitaro')).toBe('navigator');
|
||||
});
|
||||
test('test hexnum', () => {
|
||||
expect(hexnum('65466c6f6174')).toBe('eFloat');
|
||||
|
@ -14,6 +14,10 @@ const valueMap = {
|
||||
'4': ascii2string(gv.keys[gv.cp2[4]]),
|
||||
'47': ascii2string(gv.keys[gv.cp2[35]]),
|
||||
'52': ascii2string(gv.keys[gv.cp2[81]]),
|
||||
'_$dV': ascii2string(gv.keys[gv.cp2[146]]),
|
||||
'_$_i': ascii2string(gv.keys[gv.cp2[70]]),
|
||||
'_$hv': ascii2string(gv.keys[gv.cp2[1]]),
|
||||
'_$go': ascii2string(gv.keys[gv.cp2[48]]),
|
||||
}
|
||||
|
||||
test('test r2mka', () => {
|
||||
|
Loading…
x
Reference in New Issue
Block a user