瀏覽代碼

Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/98

sanex3339 7 年之前
父節點
當前提交
2a171ae9a0

+ 4 - 0
CHANGELOG.md

@@ -5,6 +5,10 @@ v0.12.0
 * Added ability to disable and enable obfuscation for specific parts of the code by adding conditional comments. 
 * Added obfuscation of `es2015` class names.
 
+v0.11.2
+---
+* Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/98
+
 v0.11.1
 ---
 * Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/94

文件差異過大導致無法顯示
+ 0 - 0
dist/index.js


+ 4 - 0
src/node-transformers/obfuscating-transformers/ObjectExpressionTransformer.ts

@@ -65,6 +65,10 @@ export class ObjectExpressionTransformer extends AbstractNodeTransformer {
     public transformNode (objectExpressionNode: ESTree.ObjectExpression, parentNode: ESTree.Node): ESTree.Node {
         objectExpressionNode.properties
             .forEach((property: ESTree.Property) => {
+                if (property.computed) {
+                    return;
+                }
+
                 if (property.shorthand) {
                     property.shorthand = false;
                 }

+ 3 - 1
src/node/NodeGuards.ts

@@ -212,7 +212,9 @@ export class NodeGuards {
             return false;
         }
 
-        const parentNodeIsPropertyNode: boolean = NodeGuards.isPropertyNode(parentNode) && parentNode.key === node;
+        const parentNodeIsPropertyNode: boolean = NodeGuards.isPropertyNode(parentNode)
+            && !parentNode.computed
+            && parentNode.key === node;
         const parentNodeIsMemberExpressionNode: boolean = (
             NodeGuards.isMemberExpressionNode(parentNode) &&
             parentNode.computed === false &&

+ 22 - 0
test/functional-tests/node-transformers/obfuscating-transformers/object-expression-transformer/ObjectExpressionTransformer.spec.ts

@@ -52,4 +52,26 @@ describe('ObjectExpressionTransformer', () => {
             assert.match(obfuscatedCode, regExp);
         });
     });
+
+    describe('computed property name', () => {
+        const regExp: RegExp = /var *_0x[a-f0-9]{4,6} *= *\{\[_0x[a-f0-9]{4,6}\]: *0x1\};/;
+
+        let obfuscatedCode: string;
+
+        before(() => {
+            const code: string = readFileAsString(__dirname + '/fixtures/computed-property-name.js');
+            const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate(
+                code,
+                {
+                    ...NO_CUSTOM_NODES_PRESET
+                }
+            );
+
+            obfuscatedCode = obfuscationResult.getObfuscatedCode();
+        });
+
+        it('should ignore computed property identifier', () => {
+            assert.match(obfuscatedCode, regExp);
+        });
+    });
 });

+ 6 - 0
test/functional-tests/node-transformers/obfuscating-transformers/object-expression-transformer/fixtures/computed-property-name.js

@@ -0,0 +1,6 @@
+(function () {
+    var key = 'foo';
+    var test = {
+        [key]: 1
+    };
+})();

+ 22 - 0
test/functional-tests/node-transformers/obfuscating-transformers/variable-declaration-transformer/VariableDeclarationTransformer.spec.ts

@@ -391,4 +391,26 @@ describe('VariableDeclarationTransformer', () => {
             assert.equal(objectPatternIdentifierName2, identifierName2);
         });
     });
+
+    describe('variant #11: computed object expression identifier', () => {
+        const computedObjectExpressionRegExp: RegExp = /var *_0x[a-f0-9]{4,6} *= *\{\[_0x[a-f0-9]{4,6}\]: *0x1\};/;
+
+        let obfuscatedCode: string;
+
+        before(() => {
+            const code: string = readFileAsString(__dirname + '/fixtures/computed-object-expression-identifier.js');
+            const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate(
+                code,
+                {
+                    ...NO_CUSTOM_NODES_PRESET
+                }
+            );
+
+            obfuscatedCode = obfuscationResult.getObfuscatedCode();
+        });
+
+        it('should transform computed object expression identifier', () => {
+            assert.match(obfuscatedCode, computedObjectExpressionRegExp);
+        });
+    });
 });

+ 10 - 0
test/functional-tests/node-transformers/obfuscating-transformers/variable-declaration-transformer/fixtures/computed-object-expression-identifier.js

@@ -0,0 +1,10 @@
+function foo () {
+    var test = 'abc';
+
+    var object = {
+        [test]: 1
+    };
+
+    console.log(test);
+    console.log(object.abc);
+}

部分文件因文件數量過多而無法顯示