Ver código fonte

variableDeclaration obfuscator tests

sanex3339 8 anos atrás
pai
commit
2f8cf99346

+ 88 - 0
test/functional-tests/node-obfuscators/VariableDeclarationObfuscator.spec.ts

@@ -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\);/);
+        });
+    });
+});

+ 1 - 0
test/index.spec.ts

@@ -27,3 +27,4 @@ import './functional-tests/node-obfuscators/LiteralObfuscator.spec';
 import './functional-tests/node-obfuscators/MemberExpressionObfuscator.spec';
 import './functional-tests/node-obfuscators/MethodDefinitionObfuscator.spec';
 import './functional-tests/node-obfuscators/ObjectExpressionObfuscator.spec';
+import './functional-tests/node-obfuscators/VariableDeclarationObfuscator.spec';