فهرست منبع

Fix of https://github.com/javascript-obfuscator/javascript-obfuscator/issues/319

sanex3339 6 سال پیش
والد
کامیت
2720218ec8

+ 1 - 0
CHANGELOG.md

@@ -3,6 +3,7 @@ Change Log
 v0.18.2
 v0.18.2
 ---
 ---
 * Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/320
 * Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/320
+* Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/319
 
 
 v0.18.1
 v0.18.1
 ---
 ---

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
dist/index.browser.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
dist/index.cli.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
dist/index.js


+ 11 - 1
src/node-transformers/obfuscating-transformers/obfuscating-replacers/literal-obfuscating-replacers/StringLiteralObfuscatingReplacer.ts

@@ -134,7 +134,7 @@ export class StringLiteralObfuscatingReplacer extends AbstractObfuscatingReplace
      */
      */
     public replace (nodeValue: string): ESTree.Node {
     public replace (nodeValue: string): ESTree.Node {
         if (this.isReservedString(nodeValue)) {
         if (this.isReservedString(nodeValue)) {
-            return NodeFactory.literalNode(nodeValue);
+            return this.replaceWithReservedLiteralNode(nodeValue);
         }
         }
 
 
         const useStringArray: boolean = this.canUseStringArray(nodeValue);
         const useStringArray: boolean = this.canUseStringArray(nodeValue);
@@ -227,6 +227,16 @@ export class StringLiteralObfuscatingReplacer extends AbstractObfuscatingReplace
         );
         );
     }
     }
 
 
+    /**
+     * @param {string} value
+     * @returns {Node}
+     */
+    private replaceWithReservedLiteralNode (value: string): ESTree.Node {
+        return NodeFactory.literalNode(
+            this.escapeSequenceEncoder.encode(value, false)
+        );
+    }
+
     /**
     /**
      * @param {string} value
      * @param {string} value
      * @returns {Node}
      * @returns {Node}

+ 27 - 5
test/functional-tests/node-transformers/obfuscating-transformers/literal-transformer/LiteralTransformer.spec.ts

@@ -313,7 +313,7 @@ describe('LiteralTransformer', () => {
                     let obfuscatedCode: string;
                     let obfuscatedCode: string;
 
 
                     before(() => {
                     before(() => {
-                        const code: string = readFileAsString(__dirname + '/fixtures/reserved-strings-option.js');
+                        const code: string = readFileAsString(__dirname + '/fixtures/reserved-strings-option-1.js');
 
 
                         obfuscatedCode = JavaScriptObfuscator.obfuscate(
                         obfuscatedCode = JavaScriptObfuscator.obfuscate(
                             code,
                             code,
@@ -342,7 +342,7 @@ describe('LiteralTransformer', () => {
                     let obfuscatedCode: string;
                     let obfuscatedCode: string;
 
 
                     before(() => {
                     before(() => {
-                        const code: string = readFileAsString(__dirname + '/fixtures/reserved-strings-option.js');
+                        const code: string = readFileAsString(__dirname + '/fixtures/reserved-strings-option-1.js');
 
 
                         obfuscatedCode = JavaScriptObfuscator.obfuscate(
                         obfuscatedCode = JavaScriptObfuscator.obfuscate(
                             code,
                             code,
@@ -373,7 +373,7 @@ describe('LiteralTransformer', () => {
                     let obfuscatedCode: string;
                     let obfuscatedCode: string;
 
 
                     before(() => {
                     before(() => {
-                        const code: string = readFileAsString(__dirname + '/fixtures/reserved-strings-option.js');
+                        const code: string = readFileAsString(__dirname + '/fixtures/reserved-strings-option-1.js');
 
 
                         obfuscatedCode = JavaScriptObfuscator.obfuscate(
                         obfuscatedCode = JavaScriptObfuscator.obfuscate(
                             code,
                             code,
@@ -402,7 +402,7 @@ describe('LiteralTransformer', () => {
                     let obfuscatedCode: string;
                     let obfuscatedCode: string;
 
 
                     before(() => {
                     before(() => {
-                        const code: string = readFileAsString(__dirname + '/fixtures/reserved-strings-option.js');
+                        const code: string = readFileAsString(__dirname + '/fixtures/reserved-strings-option-1.js');
 
 
                         obfuscatedCode = JavaScriptObfuscator.obfuscate(
                         obfuscatedCode = JavaScriptObfuscator.obfuscate(
                             code,
                             code,
@@ -432,7 +432,7 @@ describe('LiteralTransformer', () => {
                 let obfuscatedCode: string;
                 let obfuscatedCode: string;
 
 
                 before(() => {
                 before(() => {
-                    const code: string = readFileAsString(__dirname + '/fixtures/reserved-strings-option.js');
+                    const code: string = readFileAsString(__dirname + '/fixtures/reserved-strings-option-1.js');
 
 
                     obfuscatedCode = JavaScriptObfuscator.obfuscate(
                     obfuscatedCode = JavaScriptObfuscator.obfuscate(
                         code,
                         code,
@@ -452,6 +452,28 @@ describe('LiteralTransformer', () => {
                     assert.match(obfuscatedCode, stringLiteralRegExp2);
                     assert.match(obfuscatedCode, stringLiteralRegExp2);
                 });
                 });
             });
             });
+
+            describe('Variant #4: correct escape of special characters', () => {
+                const stringLiteralRegExp: RegExp = /var baz *= *'Cannot\\x20find\\x20module\\x20\\x27' *\+ *foo *\+ *'\\x27';/;
+
+                let obfuscatedCode: string;
+
+                before(() => {
+                    const code: string = readFileAsString(__dirname + '/fixtures/reserved-strings-option-2.js');
+
+                    obfuscatedCode = JavaScriptObfuscator.obfuscate(
+                        code,
+                        {
+                            ...NO_ADDITIONAL_NODES_PRESET,
+                            reservedStrings: ['a']
+                        }
+                    ).getObfuscatedCode();
+                });
+
+                it('match #1: should ignore reserved strings', () => {
+                    assert.match(obfuscatedCode, stringLiteralRegExp);
+                });
+            });
         });
         });
     });
     });
 
 

+ 0 - 0
test/functional-tests/node-transformers/obfuscating-transformers/literal-transformer/fixtures/reserved-strings-option.js → test/functional-tests/node-transformers/obfuscating-transformers/literal-transformer/fixtures/reserved-strings-option-1.js


+ 2 - 0
test/functional-tests/node-transformers/obfuscating-transformers/literal-transformer/fixtures/reserved-strings-option-2.js

@@ -0,0 +1,2 @@
+var foo = 'bar';
+var baz = 'Cannot find module \'' + foo + '\'';

برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است