mirror of
https://github.com/javascript-obfuscator/javascript-obfuscator
synced 2026-08-09 12:42:29 +00:00
Changed evaluationWorker helper
This commit is contained in:
+54
-90
@@ -22,7 +22,7 @@ describe('DebugProtectionFunctionCallTemplate', function () {
|
||||
let obfuscatedCode: string,
|
||||
evaluationResult: number = 0;
|
||||
|
||||
beforeEach((done) => {
|
||||
beforeEach(() => {
|
||||
const code: string = readFileAsString(__dirname + '/fixtures/input.js');
|
||||
|
||||
obfuscatedCode = JavaScriptObfuscator.obfuscate(
|
||||
@@ -34,20 +34,14 @@ describe('DebugProtectionFunctionCallTemplate', function () {
|
||||
}
|
||||
).getObfuscatedCode();
|
||||
|
||||
evaluateInWorker(
|
||||
obfuscatedCode,
|
||||
(response: number) => {
|
||||
evaluationResult = response;
|
||||
done();
|
||||
},
|
||||
() => {
|
||||
done();
|
||||
},
|
||||
() => {
|
||||
done();
|
||||
},
|
||||
evaluationTimeout
|
||||
);
|
||||
return evaluateInWorker(obfuscatedCode, evaluationTimeout)
|
||||
.then((result: string | null) => {
|
||||
if (!result) {
|
||||
return;
|
||||
}
|
||||
|
||||
evaluationResult = parseInt(result, 10);
|
||||
});
|
||||
});
|
||||
|
||||
it('should correctly evaluate code with enabled debug protection', () => {
|
||||
@@ -61,7 +55,7 @@ describe('DebugProtectionFunctionCallTemplate', function () {
|
||||
let obfuscatedCode: string,
|
||||
evaluationResult: number = 0;
|
||||
|
||||
beforeEach((done) => {
|
||||
beforeEach(() => {
|
||||
const code: string = readFileAsString(__dirname + '/fixtures/input.js');
|
||||
|
||||
obfuscatedCode = JavaScriptObfuscator.obfuscate(
|
||||
@@ -73,20 +67,14 @@ describe('DebugProtectionFunctionCallTemplate', function () {
|
||||
}
|
||||
).getObfuscatedCode();
|
||||
|
||||
evaluateInWorker(
|
||||
obfuscatedCode,
|
||||
(response: number) => {
|
||||
evaluationResult = response;
|
||||
done();
|
||||
},
|
||||
() => {
|
||||
done();
|
||||
},
|
||||
() => {
|
||||
done();
|
||||
},
|
||||
evaluationTimeout
|
||||
);
|
||||
return evaluateInWorker(obfuscatedCode, evaluationTimeout)
|
||||
.then((result: string | null) => {
|
||||
if (!result) {
|
||||
return;
|
||||
}
|
||||
|
||||
evaluationResult = parseInt(result, 10);
|
||||
});
|
||||
});
|
||||
|
||||
it('should correctly evaluate code with enabled debug protection', () => {
|
||||
@@ -100,7 +88,7 @@ describe('DebugProtectionFunctionCallTemplate', function () {
|
||||
let obfuscatedCode: string,
|
||||
evaluationResult: number = 0;
|
||||
|
||||
beforeEach((done) => {
|
||||
beforeEach(() => {
|
||||
const code: string = readFileAsString(__dirname + '/fixtures/input.js');
|
||||
|
||||
obfuscatedCode = JavaScriptObfuscator.obfuscate(
|
||||
@@ -113,20 +101,14 @@ describe('DebugProtectionFunctionCallTemplate', function () {
|
||||
}
|
||||
).getObfuscatedCode();
|
||||
|
||||
evaluateInWorker(
|
||||
obfuscatedCode,
|
||||
(response: number) => {
|
||||
evaluationResult = response;
|
||||
done();
|
||||
},
|
||||
() => {
|
||||
done();
|
||||
},
|
||||
() => {
|
||||
done();
|
||||
},
|
||||
evaluationTimeout
|
||||
);
|
||||
return evaluateInWorker(obfuscatedCode, evaluationTimeout)
|
||||
.then((result: string | null) => {
|
||||
if (!result) {
|
||||
return;
|
||||
}
|
||||
|
||||
evaluationResult = parseInt(result, 10);
|
||||
});
|
||||
});
|
||||
|
||||
it('should correctly evaluate code with enabled debug protection', () => {
|
||||
@@ -140,7 +122,7 @@ describe('DebugProtectionFunctionCallTemplate', function () {
|
||||
let obfuscatedCode: string,
|
||||
evaluationResult: number = 0;
|
||||
|
||||
beforeEach((done) => {
|
||||
beforeEach(() => {
|
||||
const code: string = readFileAsString(__dirname + '/fixtures/input.js');
|
||||
|
||||
obfuscatedCode = JavaScriptObfuscator.obfuscate(
|
||||
@@ -152,20 +134,14 @@ describe('DebugProtectionFunctionCallTemplate', function () {
|
||||
}
|
||||
).getObfuscatedCode();
|
||||
|
||||
evaluateInWorker(
|
||||
obfuscatedCode,
|
||||
(response: number) => {
|
||||
evaluationResult = response;
|
||||
done();
|
||||
},
|
||||
() => {
|
||||
done();
|
||||
},
|
||||
() => {
|
||||
done();
|
||||
},
|
||||
evaluationTimeout
|
||||
);
|
||||
return evaluateInWorker(obfuscatedCode, evaluationTimeout)
|
||||
.then((result: string | null) => {
|
||||
if (!result) {
|
||||
return;
|
||||
}
|
||||
|
||||
evaluationResult = parseInt(result, 10);
|
||||
});
|
||||
});
|
||||
|
||||
it('should correctly evaluate code with enabled debug protection', () => {
|
||||
@@ -179,7 +155,7 @@ describe('DebugProtectionFunctionCallTemplate', function () {
|
||||
let obfuscatedCode: string,
|
||||
evaluationResult: number = 0;
|
||||
|
||||
beforeEach((done) => {
|
||||
beforeEach(() => {
|
||||
const code: string = readFileAsString(__dirname + '/fixtures/input.js');
|
||||
|
||||
obfuscatedCode = JavaScriptObfuscator.obfuscate(
|
||||
@@ -191,20 +167,14 @@ describe('DebugProtectionFunctionCallTemplate', function () {
|
||||
).getObfuscatedCode();
|
||||
obfuscatedCode = obfuscatedCode.replace(/\+\+ *_0x([a-f0-9]){4,6}/, '');
|
||||
|
||||
evaluateInWorker(
|
||||
obfuscatedCode,
|
||||
(response: number) => {
|
||||
evaluationResult = response;
|
||||
done();
|
||||
},
|
||||
() => {
|
||||
done();
|
||||
},
|
||||
() => {
|
||||
done();
|
||||
},
|
||||
evaluationTimeout
|
||||
);
|
||||
return evaluateInWorker(obfuscatedCode, evaluationTimeout)
|
||||
.then((result: string | null) => {
|
||||
if (!result) {
|
||||
return;
|
||||
}
|
||||
|
||||
evaluationResult = parseInt(result, 10);
|
||||
});
|
||||
});
|
||||
|
||||
it('should enter code in infinity loop', () => {
|
||||
@@ -218,7 +188,7 @@ describe('DebugProtectionFunctionCallTemplate', function () {
|
||||
let obfuscatedCode: string,
|
||||
evaluationResult: number = 0;
|
||||
|
||||
beforeEach((done) => {
|
||||
beforeEach(() => {
|
||||
const code: string = readFileAsString(__dirname + '/fixtures/single-call.js');
|
||||
|
||||
obfuscatedCode = JavaScriptObfuscator.obfuscate(
|
||||
@@ -229,20 +199,14 @@ describe('DebugProtectionFunctionCallTemplate', function () {
|
||||
}
|
||||
).getObfuscatedCode();
|
||||
|
||||
evaluateInWorker(
|
||||
obfuscatedCode,
|
||||
(response: number) => {
|
||||
evaluationResult = response;
|
||||
done();
|
||||
},
|
||||
() => {
|
||||
done();
|
||||
},
|
||||
() => {
|
||||
done();
|
||||
},
|
||||
evaluationTimeout
|
||||
);
|
||||
return evaluateInWorker(obfuscatedCode, evaluationTimeout)
|
||||
.then((result: string | null) => {
|
||||
if (!result) {
|
||||
return;
|
||||
}
|
||||
|
||||
evaluationResult = parseInt(result, 10);
|
||||
});
|
||||
});
|
||||
|
||||
it('should correctly evaluate code with enabled debug protection', () => {
|
||||
|
||||
+36
-60
@@ -21,7 +21,7 @@ describe('SelfDefendingTemplate', function () {
|
||||
let obfuscatedCode: string,
|
||||
evaluationResult: number = 0;
|
||||
|
||||
before((done) => {
|
||||
before(() => {
|
||||
const code: string = readFileAsString(__dirname + '/fixtures/input.js');
|
||||
|
||||
obfuscatedCode = JavaScriptObfuscator.obfuscate(
|
||||
@@ -33,20 +33,14 @@ describe('SelfDefendingTemplate', function () {
|
||||
}
|
||||
).getObfuscatedCode();
|
||||
|
||||
evaluateInWorker(
|
||||
obfuscatedCode,
|
||||
(response: number) => {
|
||||
evaluationResult = response;
|
||||
done();
|
||||
},
|
||||
() => {
|
||||
done();
|
||||
},
|
||||
() => {
|
||||
done();
|
||||
},
|
||||
evaluationTimeout
|
||||
);
|
||||
return evaluateInWorker(obfuscatedCode, evaluationTimeout)
|
||||
.then((result: string | null) => {
|
||||
if (!result) {
|
||||
return;
|
||||
}
|
||||
|
||||
evaluationResult = parseInt(result, 10);
|
||||
});
|
||||
});
|
||||
|
||||
it('should correctly evaluate code with enabled self defending', () => {
|
||||
@@ -60,7 +54,7 @@ describe('SelfDefendingTemplate', function () {
|
||||
let obfuscatedCode: string,
|
||||
evaluationResult: number = 0;
|
||||
|
||||
before((done) => {
|
||||
before(() => {
|
||||
const code: string = readFileAsString(__dirname + '/fixtures/input.js');
|
||||
|
||||
obfuscatedCode = JavaScriptObfuscator.obfuscate(
|
||||
@@ -72,20 +66,14 @@ describe('SelfDefendingTemplate', function () {
|
||||
}
|
||||
).getObfuscatedCode();
|
||||
|
||||
evaluateInWorker(
|
||||
obfuscatedCode,
|
||||
(response: number) => {
|
||||
evaluationResult = response;
|
||||
done();
|
||||
},
|
||||
() => {
|
||||
done();
|
||||
},
|
||||
() => {
|
||||
done();
|
||||
},
|
||||
evaluationTimeout
|
||||
);
|
||||
return evaluateInWorker(obfuscatedCode, evaluationTimeout)
|
||||
.then((result: string | null) => {
|
||||
if (!result) {
|
||||
return;
|
||||
}
|
||||
|
||||
evaluationResult = parseInt(result, 10);
|
||||
});
|
||||
});
|
||||
|
||||
it('should correctly evaluate code with enabled self defending', () => {
|
||||
@@ -99,7 +87,7 @@ describe('SelfDefendingTemplate', function () {
|
||||
let obfuscatedCode: string,
|
||||
evaluationResult: number = 0;
|
||||
|
||||
before((done) => {
|
||||
before(() => {
|
||||
const code: string = readFileAsString(__dirname + '/fixtures/input.js');
|
||||
|
||||
obfuscatedCode = JavaScriptObfuscator.obfuscate(
|
||||
@@ -112,20 +100,14 @@ describe('SelfDefendingTemplate', function () {
|
||||
}
|
||||
).getObfuscatedCode();
|
||||
|
||||
evaluateInWorker(
|
||||
obfuscatedCode,
|
||||
(response: number) => {
|
||||
evaluationResult = response;
|
||||
done();
|
||||
},
|
||||
() => {
|
||||
done();
|
||||
},
|
||||
() => {
|
||||
done();
|
||||
},
|
||||
evaluationTimeout
|
||||
);
|
||||
return evaluateInWorker(obfuscatedCode, evaluationTimeout)
|
||||
.then((result: string | null) => {
|
||||
if (!result) {
|
||||
return;
|
||||
}
|
||||
|
||||
evaluationResult = parseInt(result, 10);
|
||||
});
|
||||
});
|
||||
|
||||
it('should correctly evaluate code with enabled self defending', () => {
|
||||
@@ -139,7 +121,7 @@ describe('SelfDefendingTemplate', function () {
|
||||
let obfuscatedCode: string,
|
||||
evaluationResult: number = 0;
|
||||
|
||||
before((done) => {
|
||||
before(() => {
|
||||
const code: string = readFileAsString(__dirname + '/fixtures/input.js');
|
||||
|
||||
obfuscatedCode = JavaScriptObfuscator.obfuscate(
|
||||
@@ -155,20 +137,14 @@ describe('SelfDefendingTemplate', function () {
|
||||
.replace(/,/g, ', ')
|
||||
.replace(/;/g, '; ');
|
||||
|
||||
evaluateInWorker(
|
||||
obfuscatedCode,
|
||||
(response: number) => {
|
||||
evaluationResult = response;
|
||||
done();
|
||||
},
|
||||
() => {
|
||||
done();
|
||||
},
|
||||
() => {
|
||||
done();
|
||||
},
|
||||
evaluationTimeout
|
||||
);
|
||||
return evaluateInWorker(obfuscatedCode, evaluationTimeout)
|
||||
.then((result: string | null) => {
|
||||
if (!result) {
|
||||
return;
|
||||
}
|
||||
|
||||
evaluationResult = parseInt(result, 10);
|
||||
});
|
||||
});
|
||||
|
||||
it('should enter code in infinity loop', () => {
|
||||
|
||||
@@ -2,34 +2,32 @@ import { spawn, Thread, Worker } from 'threads/dist';
|
||||
|
||||
/**
|
||||
* @param {string} code
|
||||
* @param {(result: any, code: string) => void} resultCallback
|
||||
* @param {(error: Error, code: string) => void} errorCallback
|
||||
* @param {() => void} timeoutCallback
|
||||
* @param {number} waitTimeout
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
export async function evaluateInWorker(
|
||||
export function evaluateInWorker(
|
||||
code: string,
|
||||
resultCallback: (result: any, code: string) => void,
|
||||
errorCallback: (error: Error, code: string) => void,
|
||||
timeoutCallback: () => void,
|
||||
waitTimeout: number
|
||||
): Promise<void> {
|
||||
const evaluationWorker = await spawn(new Worker('./workers/evaluation-worker'));
|
||||
): Promise<string | null> {
|
||||
return new Promise(async (resolve, reject) => {
|
||||
const evaluationWorker = await spawn(new Worker('./workers/evaluation-worker'));
|
||||
|
||||
const timeout = setTimeout(async () => {
|
||||
await Thread.terminate(evaluationWorker);
|
||||
timeoutCallback();
|
||||
}, waitTimeout);
|
||||
const timeout = setTimeout(async () => {
|
||||
await Thread.terminate(evaluationWorker);
|
||||
resolve(null);
|
||||
}, waitTimeout);
|
||||
|
||||
try {
|
||||
const result: string = await evaluationWorker.evaluate(code);
|
||||
try {
|
||||
const result: string = await evaluationWorker.evaluate(code);
|
||||
|
||||
resultCallback(result, code);
|
||||
} catch (error) {
|
||||
errorCallback(error, code);
|
||||
} finally {
|
||||
clearTimeout(timeout);
|
||||
await Thread.terminate(evaluationWorker);
|
||||
}
|
||||
clearTimeout(timeout);
|
||||
await Thread.terminate(evaluationWorker);
|
||||
|
||||
resolve(result);
|
||||
} catch (error) {
|
||||
clearTimeout(timeout);
|
||||
await Thread.terminate(evaluationWorker);
|
||||
|
||||
reject(error);
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -185,25 +185,24 @@ describe('JavaScriptObfuscator runtime eval', function () {
|
||||
}
|
||||
).getObfuscatedCode();
|
||||
|
||||
evaluateInWorker(
|
||||
return evaluateInWorker(
|
||||
`
|
||||
${getEnvironmentCode()}
|
||||
${obfuscatedCode}
|
||||
module.exports.obfuscate('var foo = 1;').getObfuscatedCode();
|
||||
`,
|
||||
(response: string) => {
|
||||
evaluationResult = response;
|
||||
done();
|
||||
},
|
||||
(error: Error) => {
|
||||
evaluationResult = error.message;
|
||||
done();
|
||||
},
|
||||
() => {
|
||||
done();
|
||||
},
|
||||
${getEnvironmentCode()}
|
||||
${obfuscatedCode}
|
||||
module.exports.obfuscate('var foo = 1;').getObfuscatedCode();
|
||||
`,
|
||||
evaluationTimeout
|
||||
);
|
||||
)
|
||||
.then((result: string | null) => {
|
||||
if (!result) {
|
||||
return;
|
||||
}
|
||||
|
||||
evaluationResult = result;
|
||||
})
|
||||
.catch((error) => {
|
||||
evaluationResult = error.message;
|
||||
});
|
||||
});
|
||||
|
||||
it('should obfuscate code without any runtime errors after obfuscation: Variant #3 obfuscator', () => {
|
||||
|
||||
Reference in New Issue
Block a user