浏览代码

0.11.1 release

sanex3339 7 年之前
父节点
当前提交
0b160a80f9

+ 4 - 0
CHANGELOG.md

@@ -1,5 +1,9 @@
 Change Log
 ===
+v0.11.1
+---
+* Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/94
+
 v0.11.0
 ---
 * **New option:** `log` enables logging of the information to the console.

文件差异内容过多而无法显示
+ 0 - 0
dist/index.js


+ 22 - 22
package.json

@@ -1,6 +1,6 @@
 {
   "name": "javascript-obfuscator",
-  "version": "0.11.0",
+  "version": "0.11.1",
   "description": "JavaScript obfuscator",
   "keywords": [
     "obfuscator",
@@ -19,8 +19,8 @@
     "javascript-obfuscator": "./bin/javascript-obfuscator.js"
   },
   "dependencies": {
-    "chalk": "2.0.1",
-    "chance": "1.0.10",
+    "chalk": "2.1.0",
+    "chance": "1.0.11",
     "class-validator": "0.7.2",
     "commander": "2.11.0",
     "escodegen-wallaby": "1.6.12",
@@ -32,43 +32,43 @@
     "mkdirp": "0.5.1",
     "opencollective": "1.0.3",
     "reflect-metadata": "0.1.10",
-    "source-map-support": "0.4.15",
+    "source-map-support": "0.4.18",
     "string-template": "1.0.0",
     "tslib": "1.7.1"
   },
   "devDependencies": {
-    "@types/chai": "4.0.2",
+    "@types/chai": "4.0.4",
     "@types/chalk": "0.4.31",
-    "@types/chance": "0.7.34",
-    "@types/commander": "2.9.1",
+    "@types/chance": "0.7.35",
+    "@types/commander": "2.9.2",
     "@types/escodegen": "0.0.6",
-    "@types/esprima": "2.1.34",
+    "@types/esprima": "4.0.0",
     "@types/estraverse": "0.0.6",
     "@types/estree": "0.0.37",
     "@types/md5": "2.1.32",
-    "@types/mkdirp": "0.5.0",
-    "@types/mocha": "2.2.41",
-    "@types/node": "8.0.19",
-    "@types/sinon": "2.3.3",
+    "@types/mkdirp": "0.5.1",
+    "@types/mocha": "2.2.43",
+    "@types/node": "8.0.28",
+    "@types/sinon": "2.3.4",
     "@types/string-template": "1.0.2",
-    "@types/webpack-env": "1.13.0",
-    "awesome-typescript-loader": "3.2.2",
-    "babel-cli": "6.24.1",
-    "babel-loader": "7.1.1",
+    "@types/webpack-env": "1.13.1",
+    "awesome-typescript-loader": "3.2.3",
+    "babel-cli": "6.26.0",
+    "babel-loader": "7.1.2",
     "babel-plugin-array-includes": "2.0.3",
     "babel-preset-es2015": "6.24.1",
-    "chai": "4.1.1",
+    "chai": "4.1.2",
     "coveralls": "2.13.1",
     "istanbul": "1.1.0-alpha.1",
-    "mocha": "3.5.0",
+    "mocha": "3.5.3",
     "pre-commit": "1.2.2",
-    "sinon": "3.0.0",
+    "sinon": "3.2.1",
     "ts-node": "3.3.0",
-    "tslint": "5.5.0",
+    "tslint": "5.7.0",
     "tslint-eslint-rules": "4.1.1",
     "tslint-loader": "3.5.3",
-    "typescript": "2.4.2",
-    "webpack": "3.4.1",
+    "typescript": "2.5.2",
+    "webpack": "3.5.6",
     "webpack-node-externals": "1.6.0"
   },
   "repository": {

+ 1 - 1
src/JavaScriptObfuscatorInternal.ts

@@ -102,7 +102,7 @@ export class JavaScriptObfuscatorInternal implements IJavaScriptObfuscator {
      * @returns {Program}
      */
     private parseCode (sourceCode: string): ESTree.Program {
-        return esprima.parse(sourceCode, {
+        return esprima.parseScript(sourceCode, {
             loc: this.options.sourceMap
         });
     }

+ 11 - 0
src/node-transformers/dead-code-injection-transformers/DeadCodeInjectionTransformer.ts

@@ -4,10 +4,14 @@ import { ServiceIdentifiers } from '../../container/ServiceIdentifiers';
 import * as estraverse from 'estraverse';
 import * as ESTree from 'estree';
 
+import { TNodeWithBlockStatement } from '../../types/node/TNodeWithBlockStatement';
+
 import { IOptions } from '../../interfaces/options/IOptions';
 import { IRandomGenerator } from '../../interfaces/utils/IRandomGenerator';
 import { IVisitor } from '../../interfaces/IVisitor';
 
+import { NodeType } from '../../enums/NodeType';
+
 import { AbstractNodeTransformer } from '../AbstractNodeTransformer';
 import { Node } from '../../node/Node';
 import { Nodes } from '../../node/Nodes';
@@ -195,6 +199,13 @@ export class DeadCodeInjectionTransformer extends AbstractNodeTransformer {
                     return node;
                 }
 
+                const blockScopeOfBlockStatementNode: TNodeWithBlockStatement = NodeUtils
+                    .getBlockScopesOfNode(node)[0];
+
+                if (blockScopeOfBlockStatementNode.type === NodeType.Program) {
+                    return node;
+                }
+
                 const minInteger: number = 0;
                 const maxInteger: number = this.collectedBlockStatements.length - 1;
                 const randomIndex: number = this.randomGenerator.getRandomInteger(minInteger, maxInteger);

+ 1 - 1
src/node/NodeUtils.ts

@@ -88,7 +88,7 @@ export class NodeUtils {
      * @returns {TStatement[]}
      */
     public static convertCodeToStructure (code: string): TStatement[] {
-        let structure: ESTree.Program = esprima.parse(code);
+        let structure: ESTree.Program = esprima.parseScript(code);
 
         structure = NodeUtils.addXVerbatimPropertyToLiterals(structure);
         structure = NodeUtils.parentize(structure);

+ 30 - 0
test/functional-tests/node-transformers/dead-code-injection-transformers/DeadCodeInjectionTransformer.spec.ts

@@ -279,5 +279,35 @@ describe('DeadCodeInjectionTransformer', () => {
                 assert.closeTo(distribution4, expectedDistribution, delta);
             });
         });
+
+        describe('variant #6 - block scope of block statement is `ProgramNode`', () => {
+            const regExp: RegExp = new RegExp(
+                `if *\\(!!\\[\\]\\) *{` +
+                    `console\\[${variableMatch}\\('${hexMatch}'\\)\\]\\(${variableMatch}\\('${hexMatch}'\\)\\);` +
+                `\\}`
+            );
+
+            let obfuscatedCode: string;
+
+            before(() => {
+                const code: string = readFileAsString(__dirname + '/fixtures/block-scope-is-program-node.js');
+                const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate(
+                    code,
+                    {
+                        ...NO_CUSTOM_NODES_PRESET,
+                        stringArray: true,
+                        stringArrayThreshold: 1,
+                        deadCodeInjection: true,
+                        deadCodeInjectionThreshold: 1
+                    }
+                );
+
+                obfuscatedCode = obfuscationResult.getObfuscatedCode();
+            });
+
+            it('shouldn\'t add dead code in block statements with `ProgramNode` block scope', () => {
+                assert.match(obfuscatedCode, regExp);
+            });
+        });
     });
 });

+ 27 - 0
test/functional-tests/node-transformers/dead-code-injection-transformers/fixtures/block-scope-is-program-node.js

@@ -0,0 +1,27 @@
+if (true) {
+    console.log('foo');
+}
+
+(function(){
+    var foo = function () {
+        return true;
+    };
+    var bar = function () {
+        return true;
+    };
+    var baz = function () {
+        return true;
+    };
+    var bark = function () {
+        return true;
+    };
+    var hawk = function () {
+        return true;
+    };
+
+    foo();
+    bar();
+    baz();
+    bark();
+    hawk();
+})();

文件差异内容过多而无法显示
+ 320 - 235
yarn.lock


部分文件因为文件数量过多而无法显示