Changed evaluationWorker helper

This commit is contained in:
sanex3339
2020-02-19 10:12:39 +03:00
parent 5e61885f93
commit a5139779f9
4 changed files with 127 additions and 190 deletions
@@ -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', () => {
@@ -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', () => {
+21 -23
View File
@@ -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', () => {