|
@@ -0,0 +1,88 @@
|
|
|
+import { IObfuscationResult } from "../../../src/interfaces/IObfuscationResult";
|
|
|
+
|
|
|
+import { NO_CUSTOM_NODES_PRESET } from "../../../src/preset-options/NoCustomNodesPreset";
|
|
|
+
|
|
|
+import { JavaScriptObfuscator } from "../../../src/JavaScriptObfuscator";
|
|
|
+
|
|
|
+const assert: Chai.AssertStatic = require('chai').assert;
|
|
|
+
|
|
|
+describe('VariableDeclarationObfuscator', () => {
|
|
|
+ it('should obfuscate `variableDeclaration` node', () => {
|
|
|
+ let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate(
|
|
|
+ `
|
|
|
+ function foo () {
|
|
|
+ var test = 'abc';
|
|
|
+ console.log(test);
|
|
|
+ }
|
|
|
+ `,
|
|
|
+ Object.assign({}, NO_CUSTOM_NODES_PRESET)
|
|
|
+ );
|
|
|
+
|
|
|
+ assert.match(obfuscationResult.getObfuscatedCode(), /var *_0x([a-z0-9]){6} *= *'\\x61\\x62\\x63';/);
|
|
|
+ assert.match(obfuscationResult.getObfuscatedCode(), /console\['\\x6c\\x6f\\x67'\]\(_0x([a-z0-9]){6}\);/);
|
|
|
+ });
|
|
|
+
|
|
|
+ it('should obfuscate variable call (`identifier` node) outside of block scope of node in which this variable was declared with `var` kind', () => {
|
|
|
+ let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate(
|
|
|
+ `
|
|
|
+ if (true)
|
|
|
+ {
|
|
|
+ var test = 10;
|
|
|
+ }
|
|
|
+
|
|
|
+ console.log(test);
|
|
|
+ `,
|
|
|
+ Object.assign({}, NO_CUSTOM_NODES_PRESET)
|
|
|
+ );
|
|
|
+
|
|
|
+ assert.match(obfuscationResult.getObfuscatedCode(), /console\['\\x6c\\x6f\\x67'\]\(_0x([a-z0-9]){6}\);/);
|
|
|
+ });
|
|
|
+
|
|
|
+ it('should not obfuscate variable call (`identifier` node) outside of block scope of node in which this variable was declared with `let` kind', () => {
|
|
|
+ let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate(
|
|
|
+ `
|
|
|
+ if (true)
|
|
|
+ {
|
|
|
+ let test = 10;
|
|
|
+ }
|
|
|
+
|
|
|
+ console.log(test);
|
|
|
+ `,
|
|
|
+ Object.assign({}, NO_CUSTOM_NODES_PRESET)
|
|
|
+ );
|
|
|
+
|
|
|
+ assert.match(obfuscationResult.getObfuscatedCode(), /console\['\\x6c\\x6f\\x67'\]\(test\);/);
|
|
|
+ });
|
|
|
+
|
|
|
+ describe(`variable calls before variable declaration`, () => {
|
|
|
+ let obfuscationResult: IObfuscationResult;
|
|
|
+
|
|
|
+ beforeEach(() => {
|
|
|
+ obfuscationResult = JavaScriptObfuscator.obfuscate(
|
|
|
+ `
|
|
|
+ function foo () {
|
|
|
+ function bar () {
|
|
|
+ console.log(abc.item);
|
|
|
+ }
|
|
|
+
|
|
|
+ console.log(abc);
|
|
|
+
|
|
|
+ var abc = {};
|
|
|
+
|
|
|
+ abc.item = 15;
|
|
|
+ bar();
|
|
|
+ }
|
|
|
+ `,
|
|
|
+ Object.assign({}, NO_CUSTOM_NODES_PRESET)
|
|
|
+ );
|
|
|
+ });
|
|
|
+
|
|
|
+ it('should obfuscate variable call (`identifier` node) before variable declaration if this call is inside function body', () => {
|
|
|
+ assert.match(obfuscationResult.getObfuscatedCode(), /console\['\\x6c\\x6f\\x67'\]\(_0x([a-z0-9]){6}\['\\x69\\x74\\x65\\x6d'\]\);/);
|
|
|
+ });
|
|
|
+
|
|
|
+ it('should not obfuscate variable call (`identifier` node) before variable declaration', () => {
|
|
|
+ assert.match(obfuscationResult.getObfuscatedCode(), /console\['\\x6c\\x6f\\x67'\]\(abc\);/);
|
|
|
+ });
|
|
|
+ });
|
|
|
+});
|