mirror of
https://github.com/pysunday/rs-reverse.git
synced 2025-04-20 23:25:08 +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');
|
module.exports = {
|
||||||
exports.execNumberByTime = execNumberByTime;
|
...require('./random'),
|
||||||
exports.execRandomByNumber = execRandomByNumber;
|
...require('./tools'),
|
||||||
exports.main = require('./main');
|
...require('./swap'),
|
||||||
exports.swap = require('./swap');
|
main: require('./main'),
|
||||||
exports.hexnum = require('./hexnum');
|
hexnum: require('./hexnum'),
|
||||||
exports.combine4 = require('./combine4');
|
combine4: require('./combine4'),
|
||||||
exports.bitwiseTwoNumarr = require('./bitwiseTwoNumarr');
|
bitwiseTwoNumarr: require('./bitwiseTwoNumarr'),
|
||||||
exports.decrypt = require('./decrypt');
|
decrypt: require('./decrypt'),
|
||||||
exports.extrace = require('./extrace');
|
extrace: require('./extrace'),
|
||||||
exports.decode = require('./decode');
|
decode: require('./decode'),
|
||||||
exports.uuid = require('./uuid');
|
uuid: require('./uuid'),
|
||||||
exports.numToNumarr2 = require('./numToNumarr2');
|
numToNumarr2: require('./numToNumarr2'),
|
||||||
exports.numToNumarr4 = require('./numToNumarr4');
|
numToNumarr4: require('./numToNumarr4'),
|
||||||
exports.numToNumarr8 = require('./numToNumarr8');
|
numToNumarr8: require('./numToNumarr8'),
|
||||||
exports.string2ascii = require('./string2ascii');
|
string2ascii: require('./string2ascii'),
|
||||||
exports.ascii2string = require('./ascii2string');
|
ascii2string: require('./ascii2string'),
|
||||||
exports.getFixedNumber = require('./getFixedNumber');
|
getFixedNumber: require('./getFixedNumber'),
|
||||||
exports.numarrAddTime = require('./numarrAddTime');
|
numarrAddTime: require('./numarrAddTime'),
|
||||||
exports.stringEncrypt = require('./stringEncrypt');
|
stringEncrypt: require('./stringEncrypt'),
|
||||||
|
encrypt: require('./encrypt'),
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// 字符交换方式解码字符串
|
// 字符每4位交换解码字符串
|
||||||
module.exports = function (str) {
|
exports.swap4 = function (str) {
|
||||||
const arr = str.split('');
|
const arr = str.split('');
|
||||||
for (let idx = str.length - 4; idx >= 0; idx -= 4) {
|
for (let idx = str.length - 4; idx >= 0; idx -= 4) {
|
||||||
[arr[idx], arr[idx + 1], arr[idx + 3], arr[idx + 2]] =
|
[arr[idx], arr[idx + 1], arr[idx + 3], arr[idx + 2]] =
|
||||||
@ -8,3 +8,12 @@ module.exports = function (str) {
|
|||||||
return arr.join('');
|
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 paths = require('@utils/paths');
|
||||||
const fs = require('fs');
|
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');
|
const tsFullPath = paths.exampleResolve('codes', '1-$_ts-full.json');
|
||||||
init(JSON.parse(fs.readFileSync(tsFullPath, 'utf8')));
|
init(JSON.parse(fs.readFileSync(tsFullPath, 'utf8')));
|
||||||
const gv = require('@src/handler/globalVarible');
|
const gv = require('@src/handler/globalVarible');
|
||||||
@ -23,11 +23,12 @@ const gv = require('@src/handler/globalVarible');
|
|||||||
|
|
||||||
const valueMap = {
|
const valueMap = {
|
||||||
'visibilityState': main(gv.cp0_96(6, 69)).join(),
|
'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)),
|
'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],
|
'captureStackTrace': main(gv.cp0_96(7, 63))[0],
|
||||||
'16777216': hexnum(gv.cp0_96(6, 76)),
|
'16777216': hexnum(gv.cp0_96(6, 76)),
|
||||||
|
'avigator': swap2(gv.cp0_96(10, 63)),
|
||||||
}
|
}
|
||||||
|
|
||||||
test('test cp0_96', () => {
|
test('test cp0_96', () => {
|
||||||
|
@ -3,7 +3,8 @@ const fs = require('fs');
|
|||||||
const {
|
const {
|
||||||
init,
|
init,
|
||||||
main,
|
main,
|
||||||
swap,
|
swap4,
|
||||||
|
swap2,
|
||||||
hexnum,
|
hexnum,
|
||||||
combine4,
|
combine4,
|
||||||
decrypt,
|
decrypt,
|
||||||
@ -17,6 +18,7 @@ const {
|
|||||||
getFixedNumber,
|
getFixedNumber,
|
||||||
numarrAddTime,
|
numarrAddTime,
|
||||||
stringEncrypt,
|
stringEncrypt,
|
||||||
|
encrypt,
|
||||||
} = require('../src/handler/parser/');
|
} = require('../src/handler/parser/');
|
||||||
const tsFullPath = paths.exampleResolve('codes', '1-$_ts-full.json');
|
const tsFullPath = paths.exampleResolve('codes', '1-$_ts-full.json');
|
||||||
init(JSON.parse(fs.readFileSync(tsFullPath, 'utf8')));
|
init(JSON.parse(fs.readFileSync(tsFullPath, 'utf8')));
|
||||||
@ -27,7 +29,8 @@ describe('test parser common', () => {
|
|||||||
expect(main('inakaxadalqKlwl{')[0]).toBe('visibilityState');
|
expect(main('inakaxadalqKlwl{')[0]).toBe('visibilityState');
|
||||||
});
|
});
|
||||||
test('test swap', () => {
|
test('test swap', () => {
|
||||||
expect(swap('rpsa')).toBe('pars');
|
expect(swap4('rpsa')).toBe('pars');
|
||||||
|
expect(swap2('nvagitaro')).toBe('navigator');
|
||||||
});
|
});
|
||||||
test('test hexnum', () => {
|
test('test hexnum', () => {
|
||||||
expect(hexnum('65466c6f6174')).toBe('eFloat');
|
expect(hexnum('65466c6f6174')).toBe('eFloat');
|
||||||
|
@ -14,6 +14,10 @@ const valueMap = {
|
|||||||
'4': ascii2string(gv.keys[gv.cp2[4]]),
|
'4': ascii2string(gv.keys[gv.cp2[4]]),
|
||||||
'47': ascii2string(gv.keys[gv.cp2[35]]),
|
'47': ascii2string(gv.keys[gv.cp2[35]]),
|
||||||
'52': ascii2string(gv.keys[gv.cp2[81]]),
|
'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', () => {
|
test('test r2mka', () => {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user