Przeglądaj źródła

fixed incorrect custom nodes name if they appended into root block statement

sanex3339 8 lat temu
rodzic
commit
c1ad897ab8

+ 15 - 12
dist/index.js

@@ -2549,10 +2549,11 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen
 
 function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
 
-var AbstractNodesGroup_1 = __webpack_require__(11);
 var ConsoleOutputDisableExpressionNode_1 = __webpack_require__(33);
-var NodeAppender_1 = __webpack_require__(4);
 var NodeCallsControllerFunctionNode_1 = __webpack_require__(17);
+var AbstractNodesGroup_1 = __webpack_require__(11);
+var NodeAppender_1 = __webpack_require__(4);
+var Utils_1 = __webpack_require__(0);
 
 var ConsoleOutputNodesGroup = function (_AbstractNodesGroup_) {
     _inherits(ConsoleOutputNodesGroup, _AbstractNodesGroup_);
@@ -2569,7 +2570,7 @@ var ConsoleOutputNodesGroup = function (_AbstractNodesGroup_) {
             if (!this.options.disableConsoleOutput) {
                 return;
             }
-            var callsControllerFunctionName = 'consoleOutputNodeCallsControllerFunction';
+            var callsControllerFunctionName = Utils_1.Utils.getRandomVariableName();
             var randomStackTraceIndex = NodeAppender_1.NodeAppender.getRandomStackTraceIndex(this.stackTraceData.length);
             return this.syncCustomNodesWithNodesGroup(new Map([['consoleOutputDisableExpressionNode', new ConsoleOutputDisableExpressionNode_1.ConsoleOutputDisableExpressionNode(this.stackTraceData, callsControllerFunctionName, randomStackTraceIndex, this.options)], ['ConsoleOutputNodeCallsControllerFunctionNode', new NodeCallsControllerFunctionNode_1.NodeCallsControllerFunctionNode(this.stackTraceData, callsControllerFunctionName, randomStackTraceIndex, this.options)]]));
         }
@@ -2599,6 +2600,7 @@ var DebugProtectionFunctionCallNode_1 = __webpack_require__(34);
 var DebugProtectionFunctionIntervalNode_1 = __webpack_require__(35);
 var DebugProtectionFunctionNode_1 = __webpack_require__(36);
 var AbstractNodesGroup_1 = __webpack_require__(11);
+var Utils_1 = __webpack_require__(0);
 
 var DebugProtectionNodesGroup = function (_AbstractNodesGroup_) {
     _inherits(DebugProtectionNodesGroup, _AbstractNodesGroup_);
@@ -2615,7 +2617,7 @@ var DebugProtectionNodesGroup = function (_AbstractNodesGroup_) {
             if (!this.options.debugProtection) {
                 return;
             }
-            var debugProtectionFunctionName = 'debugProtectionFunction';
+            var debugProtectionFunctionName = Utils_1.Utils.getRandomVariableName();
             var customNodes = new Map([['debugProtectionFunctionNode', new DebugProtectionFunctionNode_1.DebugProtectionFunctionNode(debugProtectionFunctionName, this.options)], ['debugProtectionFunctionCallNode', new DebugProtectionFunctionCallNode_1.DebugProtectionFunctionCallNode(debugProtectionFunctionName, this.options)]]);
             if (this.options.debugProtectionInterval) {
                 customNodes.set('debugProtectionFunctionIntervalNode', new DebugProtectionFunctionIntervalNode_1.DebugProtectionFunctionIntervalNode(debugProtectionFunctionName, this.options));
@@ -2644,10 +2646,11 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen
 
 function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
 
-var AbstractNodesGroup_1 = __webpack_require__(11);
-var NodeAppender_1 = __webpack_require__(4);
 var DomainLockNode_1 = __webpack_require__(37);
 var NodeCallsControllerFunctionNode_1 = __webpack_require__(17);
+var AbstractNodesGroup_1 = __webpack_require__(11);
+var NodeAppender_1 = __webpack_require__(4);
+var Utils_1 = __webpack_require__(0);
 
 var DomainLockNodesGroup = function (_AbstractNodesGroup_) {
     _inherits(DomainLockNodesGroup, _AbstractNodesGroup_);
@@ -2664,7 +2667,7 @@ var DomainLockNodesGroup = function (_AbstractNodesGroup_) {
             if (!this.options.domainLock.length) {
                 return;
             }
-            var callsControllerFunctionName = 'domainLockCallsControllerFunction';
+            var callsControllerFunctionName = Utils_1.Utils.getRandomVariableName();
             var randomStackTraceIndex = NodeAppender_1.NodeAppender.getRandomStackTraceIndex(this.stackTraceData.length);
             return this.syncCustomNodesWithNodesGroup(new Map([['DomainLockNode', new DomainLockNode_1.DomainLockNode(this.stackTraceData, callsControllerFunctionName, randomStackTraceIndex, this.options)], ['DomainLockNodeCallsControllerFunctionNode', new NodeCallsControllerFunctionNode_1.NodeCallsControllerFunctionNode(this.stackTraceData, callsControllerFunctionName, randomStackTraceIndex, this.options)]]));
         }
@@ -2691,10 +2694,10 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen
 function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
 
 var AppendState_1 = __webpack_require__(3);
-var AbstractNodesGroup_1 = __webpack_require__(11);
-var NodeAppender_1 = __webpack_require__(4);
 var NodeCallsControllerFunctionNode_1 = __webpack_require__(17);
 var SelfDefendingUnicodeNode_1 = __webpack_require__(38);
+var AbstractNodesGroup_1 = __webpack_require__(11);
+var NodeAppender_1 = __webpack_require__(4);
 var Utils_1 = __webpack_require__(0);
 
 var SelfDefendingNodesGroup = function (_AbstractNodesGroup_) {
@@ -2742,11 +2745,11 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen
 function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
 
 var AppendState_1 = __webpack_require__(3);
-var AbstractNodesGroup_1 = __webpack_require__(11);
-var UnicodeArray_1 = __webpack_require__(30);
 var UnicodeArrayCallsWrapper_1 = __webpack_require__(39);
 var UnicodeArrayNode_1 = __webpack_require__(40);
 var UnicodeArrayRotateFunctionNode_1 = __webpack_require__(41);
+var AbstractNodesGroup_1 = __webpack_require__(11);
+var UnicodeArray_1 = __webpack_require__(30);
 var Utils_1 = __webpack_require__(0);
 
 var UnicodeArrayNodesGroup = function (_AbstractNodesGroup_) {
@@ -3493,7 +3496,7 @@ __decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)],
 __decorate([class_validator_1.IsString(), class_validator_1.ValidateIf(function (options) {
     return Boolean(options.sourceMapBaseUrl);
 }), class_validator_1.IsUrl({
-    require_protocol: false,
+    require_protocol: true,
     require_valid_protocol: true
 }), __metadata('design:type', String)], Options.prototype, "sourceMapBaseUrl", void 0);
 __decorate([class_validator_1.IsString(), __metadata('design:type', String)], Options.prototype, "sourceMapFileName", void 0);

+ 5 - 3
src/node-groups/ConsoleOutputNodesGroup.ts

@@ -1,10 +1,12 @@
 import { ICustomNode } from '../interfaces/custom-nodes/ICustomNode';
 
-import { AbstractNodesGroup } from './AbstractNodesGroup';
 import { ConsoleOutputDisableExpressionNode } from '../custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode';
-import { NodeAppender } from '../NodeAppender';
 import { NodeCallsControllerFunctionNode } from '../custom-nodes/node-calls-controller-nodes/NodeCallsControllerFunctionNode';
 
+import { AbstractNodesGroup } from './AbstractNodesGroup';
+import { NodeAppender } from '../NodeAppender';
+import { Utils } from '../Utils';
+
 export class ConsoleOutputNodesGroup extends AbstractNodesGroup {
     /**
      * @returns {Map<string, ICustomNode>}
@@ -14,7 +16,7 @@ export class ConsoleOutputNodesGroup extends AbstractNodesGroup {
             return;
         }
 
-        const callsControllerFunctionName: string = 'consoleOutputNodeCallsControllerFunction';
+        const callsControllerFunctionName: string = Utils.getRandomVariableName();
         const randomStackTraceIndex: number = NodeAppender.getRandomStackTraceIndex(this.stackTraceData.length);
 
         return this.syncCustomNodesWithNodesGroup(new Map <string, ICustomNode> ([

+ 2 - 1
src/node-groups/DebugProtectionNodesGroup.ts

@@ -5,6 +5,7 @@ import { DebugProtectionFunctionIntervalNode } from '../custom-nodes/debug-prote
 import { DebugProtectionFunctionNode } from '../custom-nodes/debug-protection-nodes/DebugProtectionFunctionNode';
 
 import { AbstractNodesGroup } from './AbstractNodesGroup';
+import { Utils } from '../Utils';
 
 export class DebugProtectionNodesGroup extends AbstractNodesGroup {
     /**
@@ -15,7 +16,7 @@ export class DebugProtectionNodesGroup extends AbstractNodesGroup {
             return;
         }
 
-        const debugProtectionFunctionName: string = 'debugProtectionFunction';
+        const debugProtectionFunctionName: string = Utils.getRandomVariableName();
         const customNodes: Map <string, ICustomNode> = new Map <string, ICustomNode> ([
             [
                 'debugProtectionFunctionNode',

+ 7 - 4
src/node-groups/DomainLockNodesGroup.ts

@@ -1,8 +1,11 @@
-import { AbstractNodesGroup } from './AbstractNodesGroup';
-import { NodeAppender } from '../NodeAppender';
+import { ICustomNode } from '../interfaces/custom-nodes/ICustomNode';
+
 import { DomainLockNode } from '../custom-nodes/domain-lock-nodes/DomainLockNode';
 import { NodeCallsControllerFunctionNode } from '../custom-nodes/node-calls-controller-nodes/NodeCallsControllerFunctionNode';
-import { ICustomNode } from '../interfaces/custom-nodes/ICustomNode';
+
+import { AbstractNodesGroup } from './AbstractNodesGroup';
+import { NodeAppender } from '../NodeAppender';
+import { Utils } from '../Utils';
 
 export class DomainLockNodesGroup extends AbstractNodesGroup {
     /**
@@ -13,7 +16,7 @@ export class DomainLockNodesGroup extends AbstractNodesGroup {
             return;
         }
 
-        const callsControllerFunctionName: string = 'domainLockCallsControllerFunction';
+        const callsControllerFunctionName: string = Utils.getRandomVariableName();
         const randomStackTraceIndex: number = NodeAppender.getRandomStackTraceIndex(this.stackTraceData.length);
 
         return this.syncCustomNodesWithNodesGroup(new Map <string, ICustomNode> ([

+ 3 - 2
src/node-groups/SelfDefendingNodesGroup.ts

@@ -2,10 +2,11 @@ import { ICustomNode } from '../interfaces/custom-nodes/ICustomNode';
 
 import { AppendState } from '../enums/AppendState';
 
-import { AbstractNodesGroup } from './AbstractNodesGroup';
-import { NodeAppender } from '../NodeAppender';
 import { NodeCallsControllerFunctionNode } from '../custom-nodes/node-calls-controller-nodes/NodeCallsControllerFunctionNode';
 import { SelfDefendingUnicodeNode } from '../custom-nodes/self-defending-nodes/SelfDefendingUnicodeNode';
+
+import { AbstractNodesGroup } from './AbstractNodesGroup';
+import { NodeAppender } from '../NodeAppender';
 import { Utils } from '../Utils';
 
 export class SelfDefendingNodesGroup extends AbstractNodesGroup {

+ 3 - 2
src/node-groups/UnicodeArrayNodesGroup.ts

@@ -2,11 +2,12 @@ import { ICustomNode } from '../interfaces/custom-nodes/ICustomNode';
 
 import { AppendState } from '../enums/AppendState';
 
-import { AbstractNodesGroup } from './AbstractNodesGroup';
-import { UnicodeArray } from '../UnicodeArray';
 import { UnicodeArrayCallsWrapper } from '../custom-nodes/unicode-array-nodes/UnicodeArrayCallsWrapper';
 import { UnicodeArrayNode } from '../custom-nodes/unicode-array-nodes/UnicodeArrayNode';
 import { UnicodeArrayRotateFunctionNode } from '../custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode';
+
+import { AbstractNodesGroup } from './AbstractNodesGroup';
+import { UnicodeArray } from '../UnicodeArray';
 import { Utils } from '../Utils';
 
 export class UnicodeArrayNodesGroup extends AbstractNodesGroup {

+ 1 - 1
src/options/Options.ts

@@ -103,7 +103,7 @@ export class Options implements IOptions {
     @IsString()
     @ValidateIf((options: IOptions) => Boolean(options.sourceMapBaseUrl))
     @IsUrl({
-        require_protocol: false,
+        require_protocol: true,
         require_valid_protocol: true
     })
     public readonly sourceMapBaseUrl: string;

+ 5 - 4
test/functional-tests/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.spec.ts

@@ -7,16 +7,17 @@ import { JavaScriptObfuscator } from '../../../../src/JavaScriptObfuscator';
 const assert: Chai.AssertStatic = require('chai').assert;
 
 describe('ConsoleOutputDisableExpressionNode', () => {
+    const regExp = /(_0x([a-z0-9]){4,6}\['(\\x[a-f0-9]*)*'\]\['(\\x[a-f0-9]*)*'\] *= *_0x([a-z0-9]){4,6};){4}/;
+
     it('should correctly appendNodeToOptimalBlockScope `ConsoleOutputDisableExpressionNode` custom node into the obfuscated code if `disableConsoleOutput` option is set', () => {
         let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate(
             `var test = 'test';`,
             Object.assign({}, NO_CUSTOM_NODES_PRESET, {
-                disableConsoleOutput: true,
-                unicodeArrayThreshold: 1
+                disableConsoleOutput: true
             })
         );
 
-        assert.match(obfuscationResult.getObfuscatedCode(), /for *\(_0x([a-z0-9]){4,6} in _0x([a-z0-9]){4,6} *= *'(\\x[a-f0-9]*)*'\)/);
+        assert.match(obfuscationResult.getObfuscatedCode(), regExp);
     });
 
     it('should\'t appendNodeToOptimalBlockScope `ConsoleOutputDisableExpressionNode` custom node into the obfuscated code if `disableConsoleOutput` option is not set', () => {
@@ -28,6 +29,6 @@ describe('ConsoleOutputDisableExpressionNode', () => {
             })
         );
 
-        assert.notMatch(obfuscationResult.getObfuscatedCode(), /for *\(_0x([a-z0-9]){4,6} in _0x([a-z0-9]){4,6} *= *_0x([a-z0-9]){4}\('0x.*'\)\)/);
+        assert.notMatch(obfuscationResult.getObfuscatedCode(), regExp);
     });
 });