From 2d772720b024f1fbb167e6d30e8b85985509129f Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Mon, 28 Nov 2016 20:38:30 +0300 Subject: [PATCH] inversify test integration WIP --- dist/index.js | 1392 ++++++++++------- src/JavaScriptObfuscatorInternal.ts | 19 +- src/Obfuscator.ts | 79 +- src/container/InversifyContainerFacade.ts | 29 +- src/container/ServiceIdentifiers.ts | 4 +- .../NodeControlFlowTransformersModule.ts | 11 + .../modules/NodeObfuscatorsModule.ts | 51 + .../IContainerServiceIdentifiers.d.ts | 4 +- .../AbstractNodeTransformer.ts | 9 +- .../AbstractNodeTransformersFactory.ts | 50 - .../FunctionControlFlowTransformer.ts | 9 +- .../NodeControlFlowTransformersFactory.ts | 16 - .../node-obfuscators/CatchClauseObfuscator.ts | 9 +- .../FunctionDeclarationObfuscator.ts | 9 +- .../node-obfuscators/FunctionObfuscator.ts | 9 +- .../LabeledStatementObfuscator.ts | 9 +- .../node-obfuscators/LiteralObfuscator.ts | 19 + .../MemberExpressionObfuscator.ts | 19 + .../MethodDefinitionObfuscator.ts | 19 + .../ObjectExpressionObfuscator.ts | 19 + .../VariableDeclarationObfuscator.ts | 9 +- .../factory/NodeObfuscatorsFactory.ts | 36 - test/index.spec.ts | 2 +- 23 files changed, 1153 insertions(+), 679 deletions(-) create mode 100644 src/container/modules/NodeControlFlowTransformersModule.ts create mode 100644 src/container/modules/NodeObfuscatorsModule.ts delete mode 100644 src/node-transformers/AbstractNodeTransformersFactory.ts delete mode 100644 src/node-transformers/node-control-flow-transformers/factory/NodeControlFlowTransformersFactory.ts delete mode 100644 src/node-transformers/node-obfuscators/factory/NodeObfuscatorsFactory.ts diff --git a/dist/index.js b/dist/index.js index bb66d3c0..580bfbfe 100644 --- a/dist/index.js +++ b/dist/index.js @@ -88,7 +88,7 @@ module.exports = /******/ __webpack_require__.p = ""; /******/ /******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 106); +/******/ return __webpack_require__(__webpack_require__.s = 110); /******/ }) /************************************************************************/ /******/ ([ @@ -104,9 +104,9 @@ var _createClass = (function () { function defineProperties(target, props) { for function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -var chance_1 = __webpack_require__(26); -var JSFuck_1 = __webpack_require__(21); -var isEqual = __webpack_require__(103); +var chance_1 = __webpack_require__(29); +var JSFuck_1 = __webpack_require__(23); +var isEqual = __webpack_require__(106); var Utils = function () { function Utils() { @@ -737,8 +737,8 @@ var _createClass = (function () { function defineProperties(target, props) { for function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -var escodegen = __webpack_require__(11); -var esprima = __webpack_require__(27); +var escodegen = __webpack_require__(12); +var esprima = __webpack_require__(30); var estraverse = __webpack_require__(4); var NodeType_1 = __webpack_require__(6); var Node_1 = __webpack_require__(2); @@ -880,24 +880,50 @@ exports.NodeUtils = NodeUtils; /***/ }, /* 9 */ -/***/ function(module, exports) { +/***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { + var c = arguments.length, + r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, + d; + if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { + if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + }return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = undefined && undefined.__metadata || function (k, v) { + if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = undefined && undefined.__param || function (paramIndex, decorator) { + return function (target, key) { + decorator(target, key, paramIndex); + }; +}; +var inversify_1 = __webpack_require__(10); +var ServiceIdentifiers_1 = __webpack_require__(15); var AbstractNodeTransformer = function AbstractNodeTransformer(customNodesStorage, options) { _classCallCheck(this, AbstractNodeTransformer); this.customNodesStorage = customNodesStorage; this.options = options; }; - +AbstractNodeTransformer = __decorate([inversify_1.injectable(), __param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers['IStorage'])), __param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), __metadata('design:paramtypes', [Object, Object])], AbstractNodeTransformer); exports.AbstractNodeTransformer = AbstractNodeTransformer; /***/ }, /* 10 */ +/***/ function(module, exports) { + +module.exports = require("inversify"); + +/***/ }, +/* 11 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -907,9 +933,13 @@ var _createClass = (function () { function defineProperties(target, props) { for function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -var JavaScriptObfuscatorCLI_1 = __webpack_require__(34); -var JavaScriptObfuscatorInternal_1 = __webpack_require__(30); -var Options_1 = __webpack_require__(69); +__webpack_require__(108); +if (!global._babelPolyfill) { + __webpack_require__(101); +} +var JavaScriptObfuscatorCLI_1 = __webpack_require__(36); +var JavaScriptObfuscatorInternal_1 = __webpack_require__(32); +var Options_1 = __webpack_require__(26); var JavaScriptObfuscator = function () { function JavaScriptObfuscator() { @@ -937,13 +967,13 @@ var JavaScriptObfuscator = function () { exports.JavaScriptObfuscator = JavaScriptObfuscator; /***/ }, -/* 11 */ +/* 12 */ /***/ function(module, exports) { module.exports = require("escodegen"); /***/ }, -/* 12 */ +/* 13 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -981,7 +1011,7 @@ var AbstractCustomNodesFactory = function () { exports.AbstractCustomNodesFactory = AbstractCustomNodesFactory; /***/ }, -/* 13 */ +/* 14 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -995,7 +1025,7 @@ 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 AbstractReplacer_1 = __webpack_require__(15); +var AbstractReplacer_1 = __webpack_require__(17); var Utils_1 = __webpack_require__(0); var IdentifierReplacer = function (_AbstractReplacer_1$A) { @@ -1041,7 +1071,25 @@ var IdentifierReplacer = function (_AbstractReplacer_1$A) { exports.IdentifierReplacer = IdentifierReplacer; /***/ }, -/* 14 */ +/* 15 */ +/***/ function(module, exports) { + +"use strict"; +"use strict"; + +var ServiceIdentifiers = { + 'Factory': Symbol('INodeTransformersFactory'), + INodeTransformersFactory: Symbol('INodeTransformersFactory'), + IObfuscationEventEmitter: Symbol('IObfuscationEventEmitter'), + IObfuscator: Symbol('IObfuscator'), + IOptions: Symbol('IOptions'), + IStackTraceAnalyzer: Symbol('IStackTraceAnalyzer'), + 'IStorage': Symbol('IStorage') +}; +exports.ServiceIdentifiers = ServiceIdentifiers; + +/***/ }, +/* 16 */ /***/ function(module, exports) { "use strict"; @@ -1053,7 +1101,7 @@ exports.SourceMapMode = { }; /***/ }, -/* 15 */ +/* 17 */ /***/ function(module, exports) { "use strict"; @@ -1071,13 +1119,13 @@ var AbstractReplacer = function AbstractReplacer(customNodesStorage, options) { exports.AbstractReplacer = AbstractReplacer; /***/ }, -/* 16 */ +/* 18 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var SourceMapMode_1 = __webpack_require__(14); +var SourceMapMode_1 = __webpack_require__(16); exports.NO_CUSTOM_NODES_PRESET = Object.freeze({ compact: true, controlFlowFlattening: false, @@ -1100,7 +1148,7 @@ exports.NO_CUSTOM_NODES_PRESET = Object.freeze({ }); /***/ }, -/* 17 */ +/* 19 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1116,10 +1164,10 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var format = __webpack_require__(7); var ObfuscationEvents_1 = __webpack_require__(1); -var SingleNodeCallControllerTemplate_1 = __webpack_require__(82); -var NoCustomNodesPreset_1 = __webpack_require__(16); +var SingleNodeCallControllerTemplate_1 = __webpack_require__(84); +var NoCustomNodesPreset_1 = __webpack_require__(18); var AbstractCustomNode_1 = __webpack_require__(5); -var JavaScriptObfuscator_1 = __webpack_require__(10); +var JavaScriptObfuscator_1 = __webpack_require__(11); var NodeAppender_1 = __webpack_require__(3); var NodeCallsControllerFunctionNode = function (_AbstractCustomNode_) { @@ -1170,7 +1218,7 @@ var NodeCallsControllerFunctionNode = function (_AbstractCustomNode_) { exports.NodeCallsControllerFunctionNode = NodeCallsControllerFunctionNode; /***/ }, -/* 18 */ +/* 20 */ /***/ function(module, exports) { "use strict"; @@ -1182,7 +1230,7 @@ exports.StringArrayEncoding = { }; /***/ }, -/* 19 */ +/* 21 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1196,9 +1244,9 @@ 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 StringArrayEncoding_1 = __webpack_require__(18); -var AbstractReplacer_1 = __webpack_require__(15); -var NumberLiteralReplacer_1 = __webpack_require__(23); +var StringArrayEncoding_1 = __webpack_require__(20); +var AbstractReplacer_1 = __webpack_require__(17); +var NumberLiteralReplacer_1 = __webpack_require__(25); var Utils_1 = __webpack_require__(0); var StringLiteralReplacer = function (_AbstractReplacer_1$A) { @@ -1264,7 +1312,7 @@ StringLiteralReplacer.rc4Keys = Utils_1.Utils.getRandomGenerator().n(function () exports.StringLiteralReplacer = StringLiteralReplacer; /***/ }, -/* 20 */ +/* 22 */ /***/ function(module, exports) { "use strict"; @@ -1305,7 +1353,7 @@ var ObfuscationResult = function () { exports.ObfuscationResult = ObfuscationResult; /***/ }, -/* 21 */ +/* 23 */ /***/ function(module, exports) { "use strict"; @@ -1369,45 +1417,8 @@ exports.JSFuck = { }; /***/ }, -/* 22 */ -/***/ function(module, exports) { - -"use strict"; -"use strict"; - -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var AbstractNodeTransformersFactory = function () { - function AbstractNodeTransformersFactory(customNodesStorage, options) { - _classCallCheck(this, AbstractNodeTransformersFactory); - - this.customNodesStorage = customNodesStorage; - this.options = options; - } - - _createClass(AbstractNodeTransformersFactory, [{ - key: "initializeNodeTransformers", - value: function initializeNodeTransformers(nodeType) { - var _this = this; - - var nodeTransformers = this.nodeTransformers.get(nodeType) || []; - var instancesArray = []; - nodeTransformers.forEach(function (transformer) { - instancesArray.push(new transformer(_this.customNodesStorage, _this.options)); - }); - return instancesArray; - } - }]); - - return AbstractNodeTransformersFactory; -}(); - -exports.AbstractNodeTransformersFactory = AbstractNodeTransformersFactory; - -/***/ }, -/* 23 */ +/* 24 */, +/* 25 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1421,7 +1432,7 @@ 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 AbstractReplacer_1 = __webpack_require__(15); +var AbstractReplacer_1 = __webpack_require__(17); var Utils_1 = __webpack_require__(0); var NumberLiteralReplacer = function (_AbstractReplacer_1$A) { @@ -1450,13 +1461,86 @@ var NumberLiteralReplacer = function (_AbstractReplacer_1$A) { exports.NumberLiteralReplacer = NumberLiteralReplacer; /***/ }, -/* 24 */ +/* 26 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var SourceMapMode_1 = __webpack_require__(14); +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { + var c = arguments.length, + r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, + d; + if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { + if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + }return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = undefined && undefined.__metadata || function (k, v) { + if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var inversify_1 = __webpack_require__(10); +var class_validator_1 = __webpack_require__(102); +var DefaultPreset_1 = __webpack_require__(27); +var OptionsNormalizer_1 = __webpack_require__(72); +var ValidationErrorsFormatter_1 = __webpack_require__(73); +var Options_1 = function Options(inputOptions) { + _classCallCheck(this, Options); + + Object.assign(this, DefaultPreset_1.DEFAULT_PRESET, inputOptions); + var errors = class_validator_1.validateSync(this, Options_1.validatorOptions); + if (errors.length) { + throw new ReferenceError("Validation failed. errors:\n" + ValidationErrorsFormatter_1.ValidationErrorsFormatter.format(errors)); + } + Object.assign(this, OptionsNormalizer_1.OptionsNormalizer.normalizeOptions(this)); +}; +var Options = Options_1; +Options.validatorOptions = { + validationError: { + target: false + } +}; +__decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], Options.prototype, "compact", void 0); +__decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], Options.prototype, "controlFlowFlattening", void 0); +__decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], Options.prototype, "debugProtection", void 0); +__decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], Options.prototype, "debugProtectionInterval", void 0); +__decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], Options.prototype, "disableConsoleOutput", void 0); +__decorate([class_validator_1.IsArray(), class_validator_1.ArrayUnique(), class_validator_1.IsString({ + each: true +}), __metadata('design:type', Array)], Options.prototype, "domainLock", void 0); +__decorate([class_validator_1.IsArray(), class_validator_1.ArrayUnique(), class_validator_1.IsString({ + each: true +}), __metadata('design:type', Array)], Options.prototype, "reservedNames", void 0); +__decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], Options.prototype, "rotateStringArray", void 0); +__decorate([class_validator_1.IsNumber(), __metadata('design:type', Number)], Options.prototype, "seed", void 0); +__decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], Options.prototype, "selfDefending", void 0); +__decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], Options.prototype, "sourceMap", void 0); +__decorate([class_validator_1.IsString(), class_validator_1.ValidateIf(function (options) { + return Boolean(options.sourceMapBaseUrl); +}), class_validator_1.IsUrl({ + 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); +__decorate([class_validator_1.IsIn(['inline', 'separate']), __metadata('design:type', String)], Options.prototype, "sourceMapMode", void 0); +__decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], Options.prototype, "stringArray", void 0); +__decorate([class_validator_1.IsIn([true, false, 'base64', 'rc4']), __metadata('design:type', Object)], Options.prototype, "stringArrayEncoding", void 0); +__decorate([class_validator_1.IsNumber(), class_validator_1.Min(0), class_validator_1.Max(1), __metadata('design:type', Number)], Options.prototype, "stringArrayThreshold", void 0); +__decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], Options.prototype, "unicodeEscapeSequence", void 0); +Options = Options_1 = __decorate([inversify_1.injectable(), __metadata('design:paramtypes', [Object])], Options); +exports.Options = Options; + +/***/ }, +/* 27 */ +/***/ function(module, exports, __webpack_require__) { + +"use strict"; +"use strict"; + +var SourceMapMode_1 = __webpack_require__(16); exports.DEFAULT_PRESET = Object.freeze({ compact: true, controlFlowFlattening: false, @@ -1479,7 +1563,7 @@ exports.DEFAULT_PRESET = Object.freeze({ }); /***/ }, -/* 25 */ +/* 28 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1487,10 +1571,23 @@ exports.DEFAULT_PRESET = Object.freeze({ var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { + var c = arguments.length, + r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, + d; + if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { + if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + }return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = undefined && undefined.__metadata || function (k, v) { + if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var inversify_1 = __webpack_require__(10); var Utils_1 = __webpack_require__(0); - var MapStorage = function () { function MapStorage() { _classCallCheck(this, MapStorage); @@ -1534,35 +1631,29 @@ var MapStorage = function () { return MapStorage; }(); - +MapStorage = __decorate([inversify_1.injectable(), __metadata('design:paramtypes', [])], MapStorage); exports.MapStorage = MapStorage; -/***/ }, -/* 26 */ -/***/ function(module, exports) { - -module.exports = require("chance"); - -/***/ }, -/* 27 */ -/***/ function(module, exports) { - -module.exports = require("esprima"); - -/***/ }, -/* 28 */ -/***/ function(module, exports) { - -module.exports = require("path"); - /***/ }, /* 29 */ /***/ function(module, exports) { -module.exports = require("babel-polyfill"); +module.exports = require("chance"); /***/ }, /* 30 */ +/***/ function(module, exports) { + +module.exports = require("esprima"); + +/***/ }, +/* 31 */ +/***/ function(module, exports) { + +module.exports = require("path"); + +/***/ }, +/* 32 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1572,27 +1663,27 @@ var _createClass = (function () { function defineProperties(target, props) { for function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -var esprima = __webpack_require__(27); -var escodegen = __webpack_require__(11); -var chance_1 = __webpack_require__(26); -var CustomNodesStorage_1 = __webpack_require__(78); -var NodeUtils_1 = __webpack_require__(8); -var ObfuscationEventEmitter_1 = __webpack_require__(53); -var ObfuscationResult_1 = __webpack_require__(20); -var Obfuscator_1 = __webpack_require__(31); -var SourceMapCorrector_1 = __webpack_require__(32); -var StackTraceAnalyzer_1 = __webpack_require__(72); +var InversifyContainerFacade_1 = __webpack_require__(37); +var ServiceIdentifiers_1 = __webpack_require__(15); +var esprima = __webpack_require__(30); +var escodegen = __webpack_require__(12); +var chance_1 = __webpack_require__(29); +var ObfuscationResult_1 = __webpack_require__(22); +var SourceMapCorrector_1 = __webpack_require__(34); var Utils_1 = __webpack_require__(0); var JavaScriptObfuscatorInternal = function () { - function JavaScriptObfuscatorInternal(options) { + function JavaScriptObfuscatorInternal(inputOptions) { _classCallCheck(this, JavaScriptObfuscatorInternal); - this.options = options; + this.inversifyContainerFacade = new InversifyContainerFacade_1.InversifyContainerFacade(inputOptions); + this.obfuscator = this.inversifyContainerFacade.get(ServiceIdentifiers_1.ServiceIdentifiers.IObfuscator); + this.customNodesStorage = this.inversifyContainerFacade.get(ServiceIdentifiers_1.ServiceIdentifiers['IStorage']); + this.options = this.inversifyContainerFacade.get(ServiceIdentifiers_1.ServiceIdentifiers.IOptions); } _createClass(JavaScriptObfuscatorInternal, [{ - key: 'generateCode', + key: "generateCode", value: function generateCode(sourceCode, astTree) { var escodegenParams = Object.assign({}, JavaScriptObfuscatorInternal.escodegenParams); if (this.options.sourceMap) { @@ -1607,21 +1698,18 @@ var JavaScriptObfuscatorInternal = function () { return generatorOutput; } }, { - key: 'getObfuscationResult', + key: "getObfuscationResult", value: function getObfuscationResult(generatorOutput) { return new SourceMapCorrector_1.SourceMapCorrector(new ObfuscationResult_1.ObfuscationResult(generatorOutput.code, generatorOutput.map), this.options.sourceMapBaseUrl + this.options.sourceMapFileName, this.options.sourceMapMode).correct(); } }, { - key: 'obfuscate', + key: "obfuscate", value: function obfuscate(sourceCode) { if (this.options.seed !== 0) { Utils_1.Utils.setRandomGenerator(new chance_1.Chance(this.options.seed)); } var astTree = esprima.parse(sourceCode, JavaScriptObfuscatorInternal.esprimaParams); - NodeUtils_1.NodeUtils.parentize(astTree); - var customNodesStorage = new CustomNodesStorage_1.CustomNodesStorage(this.options); - customNodesStorage.initialize(new StackTraceAnalyzer_1.StackTraceAnalyzer().analyze(astTree.body)); - var obfuscatedAstTree = new Obfuscator_1.Obfuscator(new ObfuscationEventEmitter_1.ObfuscationEventEmitter(), this.options).obfuscateAstTree(astTree, customNodesStorage); + var obfuscatedAstTree = this.obfuscator.obfuscateAstTree(astTree, this.customNodesStorage); var generatorOutput = this.generateCode(sourceCode, obfuscatedAstTree); return this.getObfuscationResult(generatorOutput); } @@ -1640,7 +1728,7 @@ JavaScriptObfuscatorInternal.esprimaParams = { exports.JavaScriptObfuscatorInternal = JavaScriptObfuscatorInternal; /***/ }, -/* 31 */ +/* 33 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1648,49 +1736,72 @@ exports.JavaScriptObfuscatorInternal = JavaScriptObfuscatorInternal; var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { + var c = arguments.length, + r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, + d; + if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { + if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + }return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = undefined && undefined.__metadata || function (k, v) { + if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = undefined && undefined.__param || function (paramIndex, decorator) { + return function (target, key) { + decorator(target, key, paramIndex); + }; +}; +var inversify_1 = __webpack_require__(10); +var ServiceIdentifiers_1 = __webpack_require__(15); var estraverse = __webpack_require__(4); +var NodeType_1 = __webpack_require__(6); var ObfuscationEvents_1 = __webpack_require__(1); -var VisitorDirection_1 = __webpack_require__(52); -var NodeControlFlowTransformersFactory_1 = __webpack_require__(57); -var NodeObfuscatorsFactory_1 = __webpack_require__(67); +var VisitorDirection_1 = __webpack_require__(55); var Node_1 = __webpack_require__(2); - -var Obfuscator = function () { - function Obfuscator(obfuscationEventEmitter, options) { +var NodeUtils_1 = __webpack_require__(8); +var Obfuscator_1 = function () { + function Obfuscator(stackTraceAnalyzer, obfuscationEventEmitter, nodeTransformersFactory, options) { _classCallCheck(this, Obfuscator); + this.stackTraceAnalyzer = stackTraceAnalyzer; this.obfuscationEventEmitter = obfuscationEventEmitter; + this.nodeTransformersFactory = nodeTransformersFactory; this.options = options; } _createClass(Obfuscator, [{ - key: 'obfuscateAstTree', + key: "obfuscateAstTree", value: function obfuscateAstTree(astTree, customNodesStorage) { var _this = this; if (Node_1.Node.isProgramNode(astTree) && !astTree.body.length) { return astTree; } + NodeUtils_1.NodeUtils.parentize(astTree); + customNodesStorage.initialize(this.stackTraceAnalyzer.analyze(astTree.body)); customNodesStorage.getStorage().forEach(function (customNode) { _this.obfuscationEventEmitter.once(customNode.getAppendEvent(), customNode.appendNode.bind(customNode)); }); this.obfuscationEventEmitter.emit(ObfuscationEvents_1.ObfuscationEvents.BeforeObfuscation, astTree); if (this.options.controlFlowFlattening) { - this.transformAstTree(astTree, VisitorDirection_1.VisitorDirection.leave, new NodeControlFlowTransformersFactory_1.NodeControlFlowTransformersFactory(customNodesStorage, this.options)); + this.transformAstTree(astTree, VisitorDirection_1.VisitorDirection.leave, this.nodeTransformersFactory(Obfuscator_1.nodeControlFlowTransformersMap)); } - this.transformAstTree(astTree, VisitorDirection_1.VisitorDirection.enter, new NodeObfuscatorsFactory_1.NodeObfuscatorsFactory(customNodesStorage, this.options)); + this.transformAstTree(astTree, VisitorDirection_1.VisitorDirection.enter, this.nodeTransformersFactory(Obfuscator_1.nodeObfuscatorsMap)); this.obfuscationEventEmitter.emit(ObfuscationEvents_1.ObfuscationEvents.AfterObfuscation, astTree); return astTree; } }, { - key: 'transformAstTree', + key: "transformAstTree", value: function transformAstTree(astTree, direction, nodeTransformersFactory) { estraverse.traverse(astTree, _defineProperty({}, direction, function (node, parentNode) { - var nodeTransformers = nodeTransformersFactory.initializeNodeTransformers(node.type); + var nodeTransformers = nodeTransformersFactory(node.type); nodeTransformers.forEach(function (nodeTransformer) { nodeTransformer.transformNode(node, parentNode); }); @@ -1700,11 +1811,14 @@ var Obfuscator = function () { return Obfuscator; }(); - +var Obfuscator = Obfuscator_1; +Obfuscator.nodeControlFlowTransformersMap = new Map([[NodeType_1.NodeType.FunctionDeclaration, ['FunctionControlFlowTransformer']], [NodeType_1.NodeType.FunctionExpression, ['FunctionControlFlowTransformer']]]); +Obfuscator.nodeObfuscatorsMap = new Map([[NodeType_1.NodeType.ArrowFunctionExpression, ['FunctionObfuscator']], [NodeType_1.NodeType.ClassDeclaration, ['FunctionDeclarationObfuscator']], [NodeType_1.NodeType.CatchClause, ['CatchClauseObfuscator']], [NodeType_1.NodeType.FunctionDeclaration, ['FunctionDeclarationObfuscator', 'FunctionObfuscator']], [NodeType_1.NodeType.FunctionExpression, ['FunctionObfuscator']], [NodeType_1.NodeType.MemberExpression, ['MemberExpressionObfuscator']], [NodeType_1.NodeType.MethodDefinition, ['MethodDefinitionObfuscator']], [NodeType_1.NodeType.ObjectExpression, ['ObjectExpressionObfuscator']], [NodeType_1.NodeType.VariableDeclaration, ['VariableDeclarationObfuscator']], [NodeType_1.NodeType.LabeledStatement, ['LabeledStatementObfuscator']], [NodeType_1.NodeType.Literal, ['LiteralObfuscator']]]); +Obfuscator = Obfuscator_1 = __decorate([inversify_1.injectable(), __param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IStackTraceAnalyzer)), __param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IObfuscationEventEmitter)), __param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers['Factory'])), __param(3, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), __metadata('design:paramtypes', [Object, Object, Function, Object])], Obfuscator); exports.Obfuscator = Obfuscator; /***/ }, -/* 32 */ +/* 34 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1714,8 +1828,8 @@ var _createClass = (function () { function defineProperties(target, props) { for function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -var SourceMapMode_1 = __webpack_require__(14); -var ObfuscationResult_1 = __webpack_require__(20); +var SourceMapMode_1 = __webpack_require__(16); +var ObfuscationResult_1 = __webpack_require__(22); var Utils_1 = __webpack_require__(0); var SourceMapCorrector = function () { @@ -1762,7 +1876,7 @@ var SourceMapCorrector = function () { exports.SourceMapCorrector = SourceMapCorrector; /***/ }, -/* 33 */ +/* 35 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1772,9 +1886,9 @@ var _createClass = (function () { function defineProperties(target, props) { for function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -var fs = __webpack_require__(102); -var mkdirp = __webpack_require__(104); -var path = __webpack_require__(28); +var fs = __webpack_require__(105); +var mkdirp = __webpack_require__(107); +var path = __webpack_require__(31); var Utils_1 = __webpack_require__(0); var CLIUtils = function () { @@ -1854,7 +1968,7 @@ CLIUtils.encoding = 'utf8'; exports.CLIUtils = CLIUtils; /***/ }, -/* 34 */ +/* 36 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -1864,13 +1978,13 @@ var _createClass = (function () { function defineProperties(target, props) { for function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -var commander = __webpack_require__(100); -var path = __webpack_require__(28); -var SourceMapMode_1 = __webpack_require__(14); -var StringArrayEncoding_1 = __webpack_require__(18); -var DefaultPreset_1 = __webpack_require__(24); -var CLIUtils_1 = __webpack_require__(33); -var JavaScriptObfuscator_1 = __webpack_require__(10); +var commander = __webpack_require__(103); +var path = __webpack_require__(31); +var SourceMapMode_1 = __webpack_require__(16); +var StringArrayEncoding_1 = __webpack_require__(20); +var DefaultPreset_1 = __webpack_require__(27); +var CLIUtils_1 = __webpack_require__(35); +var JavaScriptObfuscator_1 = __webpack_require__(11); var Utils_1 = __webpack_require__(0); var JavaScriptObfuscatorCLI = function () { @@ -2002,7 +2116,68 @@ var JavaScriptObfuscatorCLI = function () { exports.JavaScriptObfuscatorCLI = JavaScriptObfuscatorCLI; /***/ }, -/* 35 */ +/* 37 */ +/***/ function(module, exports, __webpack_require__) { + +"use strict"; +"use strict"; + +var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var inversify_1 = __webpack_require__(10); +var ServiceIdentifiers_1 = __webpack_require__(15); +var NodeControlFlowTransformersModule_1 = __webpack_require__(112); +var NodeObfuscatorsModule_1 = __webpack_require__(111); +var CustomNodesStorage_1 = __webpack_require__(80); +var ObfuscationEventEmitter_1 = __webpack_require__(56); +var Obfuscator_1 = __webpack_require__(33); +var Options_1 = __webpack_require__(26); +var StackTraceAnalyzer_1 = __webpack_require__(74); + +var InversifyContainerFacade = function () { + function InversifyContainerFacade(options) { + _classCallCheck(this, InversifyContainerFacade); + + this.container = new inversify_1.Container(); + this.container.load(NodeControlFlowTransformersModule_1.nodeControlFlowTransformersModule); + this.container.load(NodeObfuscatorsModule_1.nodeObfuscatorsModule); + this.container.bind(ServiceIdentifiers_1.ServiceIdentifiers.IOptions).toDynamicValue(function () { + return new Options_1.Options(options); + }).inSingletonScope(); + this.container.bind(ServiceIdentifiers_1.ServiceIdentifiers.IObfuscator).to(Obfuscator_1.Obfuscator); + this.container.bind(ServiceIdentifiers_1.ServiceIdentifiers.IObfuscationEventEmitter).to(ObfuscationEventEmitter_1.ObfuscationEventEmitter).inSingletonScope(); + this.container.bind(ServiceIdentifiers_1.ServiceIdentifiers.IStackTraceAnalyzer).to(StackTraceAnalyzer_1.StackTraceAnalyzer).inSingletonScope(); + this.container.bind(ServiceIdentifiers_1.ServiceIdentifiers['IStorage']).to(CustomNodesStorage_1.CustomNodesStorage).inSingletonScope(); + this.container.bind(ServiceIdentifiers_1.ServiceIdentifiers['Factory']).toFactory(function (context) { + return function (nodeTransformersMap) { + return function (nodeType) { + var nodeTransformers = nodeTransformersMap.get(nodeType) || []; + var instancesArray = []; + nodeTransformers.forEach(function (transformer) { + instancesArray.push(context.container.getNamed('INodeTransformer', transformer)); + }); + return instancesArray; + }; + }; + }); + } + + _createClass(InversifyContainerFacade, [{ + key: 'get', + value: function get(serviceIdentifier) { + return this.container.get(serviceIdentifier); + } + }]); + + return InversifyContainerFacade; +}(); + +exports.InversifyContainerFacade = InversifyContainerFacade; + +/***/ }, +/* 38 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2018,7 +2193,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var format = __webpack_require__(7); var ObfuscationEvents_1 = __webpack_require__(1); -var ConsoleOutputDisableExpressionTemplate_1 = __webpack_require__(83); +var ConsoleOutputDisableExpressionTemplate_1 = __webpack_require__(85); var AbstractCustomNode_1 = __webpack_require__(5); var NodeAppender_1 = __webpack_require__(3); var Utils_1 = __webpack_require__(0); @@ -2059,7 +2234,7 @@ var ConsoleOutputDisableExpressionNode = function (_AbstractCustomNode_) { exports.ConsoleOutputDisableExpressionNode = ConsoleOutputDisableExpressionNode; /***/ }, -/* 36 */ +/* 39 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2073,9 +2248,9 @@ 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 ConsoleOutputDisableExpressionNode_1 = __webpack_require__(35); -var NodeCallsControllerFunctionNode_1 = __webpack_require__(17); -var AbstractCustomNodesFactory_1 = __webpack_require__(12); +var ConsoleOutputDisableExpressionNode_1 = __webpack_require__(38); +var NodeCallsControllerFunctionNode_1 = __webpack_require__(19); +var AbstractCustomNodesFactory_1 = __webpack_require__(13); var NodeAppender_1 = __webpack_require__(3); var Utils_1 = __webpack_require__(0); @@ -2106,7 +2281,7 @@ var ConsoleOutputCustomNodesFactory = function (_AbstractCustomNodesF) { exports.ConsoleOutputCustomNodesFactory = ConsoleOutputCustomNodesFactory; /***/ }, -/* 37 */ +/* 40 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2122,7 +2297,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var format = __webpack_require__(7); var ObfuscationEvents_1 = __webpack_require__(1); -var BinaryExpressionFunctionTemplate_1 = __webpack_require__(84); +var BinaryExpressionFunctionTemplate_1 = __webpack_require__(86); var AbstractCustomNode_1 = __webpack_require__(5); var Utils_1 = __webpack_require__(0); @@ -2158,7 +2333,7 @@ var BinaryExpressionFunctionNode = function (_AbstractCustomNode_) { exports.BinaryExpressionFunctionNode = BinaryExpressionFunctionNode; /***/ }, -/* 38 */ +/* 41 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2174,7 +2349,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var format = __webpack_require__(7); var ObfuscationEvents_1 = __webpack_require__(1); -var ControlFlowStorageCallTemplate_1 = __webpack_require__(85); +var ControlFlowStorageCallTemplate_1 = __webpack_require__(87); var AbstractCustomNode_1 = __webpack_require__(5); var NodeAppender_1 = __webpack_require__(3); @@ -2217,7 +2392,7 @@ var ControlFlowStorageCallNode = function (_AbstractCustomNode_) { exports.ControlFlowStorageCallNode = ControlFlowStorageCallNode; /***/ }, -/* 39 */ +/* 42 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2233,7 +2408,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var format = __webpack_require__(7); var ObfuscationEvents_1 = __webpack_require__(1); -var ControlFlowStorageTemplate_1 = __webpack_require__(86); +var ControlFlowStorageTemplate_1 = __webpack_require__(88); var AbstractCustomNode_1 = __webpack_require__(5); var NodeAppender_1 = __webpack_require__(3); @@ -2272,7 +2447,7 @@ var ControlFlowStorageNode = function (_AbstractCustomNode_) { exports.ControlFlowStorageNode = ControlFlowStorageNode; /***/ }, -/* 40 */ +/* 43 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2288,7 +2463,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var format = __webpack_require__(7); var ObfuscationEvents_1 = __webpack_require__(1); -var DebufProtectionFunctionCallTemplate_1 = __webpack_require__(87); +var DebufProtectionFunctionCallTemplate_1 = __webpack_require__(89); var AbstractCustomNode_1 = __webpack_require__(5); var NodeAppender_1 = __webpack_require__(3); @@ -2325,7 +2500,7 @@ var DebugProtectionFunctionCallNode = function (_AbstractCustomNode_) { exports.DebugProtectionFunctionCallNode = DebugProtectionFunctionCallNode; /***/ }, -/* 41 */ +/* 44 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2341,7 +2516,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var format = __webpack_require__(7); var ObfuscationEvents_1 = __webpack_require__(1); -var DebugProtectionFunctionIntervalTemplate_1 = __webpack_require__(88); +var DebugProtectionFunctionIntervalTemplate_1 = __webpack_require__(90); var AbstractCustomNode_1 = __webpack_require__(5); var NodeAppender_1 = __webpack_require__(3); @@ -2378,7 +2553,7 @@ var DebugProtectionFunctionIntervalNode = function (_AbstractCustomNode_) { exports.DebugProtectionFunctionIntervalNode = DebugProtectionFunctionIntervalNode; /***/ }, -/* 42 */ +/* 45 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2394,7 +2569,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var format = __webpack_require__(7); var ObfuscationEvents_1 = __webpack_require__(1); -var DebugProtectionFunctionTemplate_1 = __webpack_require__(89); +var DebugProtectionFunctionTemplate_1 = __webpack_require__(91); var AbstractCustomNode_1 = __webpack_require__(5); var NodeAppender_1 = __webpack_require__(3); var Utils_1 = __webpack_require__(0); @@ -2434,7 +2609,7 @@ var DebugProtectionFunctionNode = function (_AbstractCustomNode_) { exports.DebugProtectionFunctionNode = DebugProtectionFunctionNode; /***/ }, -/* 43 */ +/* 46 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2448,10 +2623,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 DebugProtectionFunctionCallNode_1 = __webpack_require__(40); -var DebugProtectionFunctionIntervalNode_1 = __webpack_require__(41); -var DebugProtectionFunctionNode_1 = __webpack_require__(42); -var AbstractCustomNodesFactory_1 = __webpack_require__(12); +var DebugProtectionFunctionCallNode_1 = __webpack_require__(43); +var DebugProtectionFunctionIntervalNode_1 = __webpack_require__(44); +var DebugProtectionFunctionNode_1 = __webpack_require__(45); +var AbstractCustomNodesFactory_1 = __webpack_require__(13); var Utils_1 = __webpack_require__(0); var DebugProtectionCustomNodesFactory = function (_AbstractCustomNodesF) { @@ -2484,7 +2659,7 @@ var DebugProtectionCustomNodesFactory = function (_AbstractCustomNodesF) { exports.DebugProtectionCustomNodesFactory = DebugProtectionCustomNodesFactory; /***/ }, -/* 44 */ +/* 47 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2502,7 +2677,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var format = __webpack_require__(7); var ObfuscationEvents_1 = __webpack_require__(1); -var DomainLockNodeTemplate_1 = __webpack_require__(90); +var DomainLockNodeTemplate_1 = __webpack_require__(92); var AbstractCustomNode_1 = __webpack_require__(5); var NodeAppender_1 = __webpack_require__(3); var Utils_1 = __webpack_require__(0); @@ -2550,7 +2725,7 @@ var DomainLockNode = function (_AbstractCustomNode_) { exports.DomainLockNode = DomainLockNode; /***/ }, -/* 45 */ +/* 48 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2564,9 +2739,9 @@ 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 DomainLockNode_1 = __webpack_require__(44); -var NodeCallsControllerFunctionNode_1 = __webpack_require__(17); -var AbstractCustomNodesFactory_1 = __webpack_require__(12); +var DomainLockNode_1 = __webpack_require__(47); +var NodeCallsControllerFunctionNode_1 = __webpack_require__(19); +var AbstractCustomNodesFactory_1 = __webpack_require__(13); var NodeAppender_1 = __webpack_require__(3); var Utils_1 = __webpack_require__(0); @@ -2597,7 +2772,7 @@ var DomainLockCustomNodesFactory = function (_AbstractCustomNodesF) { exports.DomainLockCustomNodesFactory = DomainLockCustomNodesFactory; /***/ }, -/* 46 */ +/* 49 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2613,11 +2788,11 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var format = __webpack_require__(7); var ObfuscationEvents_1 = __webpack_require__(1); -var NoCustomNodesPreset_1 = __webpack_require__(16); -var SelfDefendingTemplate_1 = __webpack_require__(91); +var NoCustomNodesPreset_1 = __webpack_require__(18); +var SelfDefendingTemplate_1 = __webpack_require__(93); var AbstractCustomNode_1 = __webpack_require__(5); var NodeAppender_1 = __webpack_require__(3); -var JavaScriptObfuscator_1 = __webpack_require__(10); +var JavaScriptObfuscator_1 = __webpack_require__(11); var Utils_1 = __webpack_require__(0); var SelfDefendingUnicodeNode = function (_AbstractCustomNode_) { @@ -2658,7 +2833,7 @@ var SelfDefendingUnicodeNode = function (_AbstractCustomNode_) { exports.SelfDefendingUnicodeNode = SelfDefendingUnicodeNode; /***/ }, -/* 47 */ +/* 50 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2673,9 +2848,9 @@ 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 ObfuscationEvents_1 = __webpack_require__(1); -var NodeCallsControllerFunctionNode_1 = __webpack_require__(17); -var SelfDefendingUnicodeNode_1 = __webpack_require__(46); -var AbstractCustomNodesFactory_1 = __webpack_require__(12); +var NodeCallsControllerFunctionNode_1 = __webpack_require__(19); +var SelfDefendingUnicodeNode_1 = __webpack_require__(49); +var AbstractCustomNodesFactory_1 = __webpack_require__(13); var NodeAppender_1 = __webpack_require__(3); var Utils_1 = __webpack_require__(0); @@ -2709,7 +2884,7 @@ var SelfDefendingCustomNodesFactory = function (_AbstractCustomNodesF) { exports.SelfDefendingCustomNodesFactory = SelfDefendingCustomNodesFactory; /***/ }, -/* 48 */ +/* 51 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2727,16 +2902,16 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var format = __webpack_require__(7); var ObfuscationEvents_1 = __webpack_require__(1); -var StringArrayEncoding_1 = __webpack_require__(18); -var NoCustomNodesPreset_1 = __webpack_require__(16); -var AtobTemplate_1 = __webpack_require__(80); -var Rc4Template_1 = __webpack_require__(81); -var SelfDefendingTemplate_1 = __webpack_require__(92); -var StringArrayBase64DecodeNodeTemplate_1 = __webpack_require__(93); -var StringArrayCallsWrapperTemplate_1 = __webpack_require__(94); -var StringArrayRC4DecodeNodeTemplate_1 = __webpack_require__(95); +var StringArrayEncoding_1 = __webpack_require__(20); +var NoCustomNodesPreset_1 = __webpack_require__(18); +var AtobTemplate_1 = __webpack_require__(82); +var Rc4Template_1 = __webpack_require__(83); +var SelfDefendingTemplate_1 = __webpack_require__(94); +var StringArrayBase64DecodeNodeTemplate_1 = __webpack_require__(95); +var StringArrayCallsWrapperTemplate_1 = __webpack_require__(96); +var StringArrayRC4DecodeNodeTemplate_1 = __webpack_require__(97); var AbstractCustomNode_1 = __webpack_require__(5); -var JavaScriptObfuscator_1 = __webpack_require__(10); +var JavaScriptObfuscator_1 = __webpack_require__(11); var NodeAppender_1 = __webpack_require__(3); var StringArrayCallsWrapper = function (_AbstractCustomNode_) { @@ -2822,7 +2997,7 @@ var StringArrayCallsWrapper = function (_AbstractCustomNode_) { exports.StringArrayCallsWrapper = StringArrayCallsWrapper; /***/ }, -/* 49 */ +/* 52 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2840,7 +3015,7 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var format = __webpack_require__(7); var ObfuscationEvents_1 = __webpack_require__(1); -var StringArrayTemplate_1 = __webpack_require__(96); +var StringArrayTemplate_1 = __webpack_require__(98); var AbstractCustomNode_1 = __webpack_require__(5); var NodeAppender_1 = __webpack_require__(3); @@ -2898,7 +3073,7 @@ StringArrayNode.ARRAY_RANDOM_LENGTH = 4; exports.StringArrayNode = StringArrayNode; /***/ }, -/* 50 */ +/* 53 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2914,11 +3089,11 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var format = __webpack_require__(7); var ObfuscationEvents_1 = __webpack_require__(1); -var NoCustomNodesPreset_1 = __webpack_require__(16); -var SelfDefendingTemplate_1 = __webpack_require__(97); -var StringArrayRotateFunctionTemplate_1 = __webpack_require__(98); +var NoCustomNodesPreset_1 = __webpack_require__(18); +var SelfDefendingTemplate_1 = __webpack_require__(99); +var StringArrayRotateFunctionTemplate_1 = __webpack_require__(100); var AbstractCustomNode_1 = __webpack_require__(5); -var JavaScriptObfuscator_1 = __webpack_require__(10); +var JavaScriptObfuscator_1 = __webpack_require__(11); var NodeAppender_1 = __webpack_require__(3); var Utils_1 = __webpack_require__(0); @@ -2977,7 +3152,7 @@ var StringArrayRotateFunctionNode = function (_AbstractCustomNode_) { exports.StringArrayRotateFunctionNode = StringArrayRotateFunctionNode; /***/ }, -/* 51 */ +/* 54 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -2992,11 +3167,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 ObfuscationEvents_1 = __webpack_require__(1); -var StringArrayCallsWrapper_1 = __webpack_require__(48); -var StringArrayNode_1 = __webpack_require__(49); -var StringArrayRotateFunctionNode_1 = __webpack_require__(50); -var AbstractCustomNodesFactory_1 = __webpack_require__(12); -var StringArrayStorage_1 = __webpack_require__(79); +var StringArrayCallsWrapper_1 = __webpack_require__(51); +var StringArrayNode_1 = __webpack_require__(52); +var StringArrayRotateFunctionNode_1 = __webpack_require__(53); +var AbstractCustomNodesFactory_1 = __webpack_require__(13); +var StringArrayStorage_1 = __webpack_require__(81); var Utils_1 = __webpack_require__(0); var StringArrayCustomNodesFactory = function (_AbstractCustomNodesF) { @@ -3040,7 +3215,7 @@ var StringArrayCustomNodesFactory = function (_AbstractCustomNodesF) { exports.StringArrayCustomNodesFactory = StringArrayCustomNodesFactory; /***/ }, -/* 52 */ +/* 55 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3053,36 +3228,50 @@ exports.VisitorDirection = Utils_1.Utils.strEnumify({ }); /***/ }, -/* 53 */ +/* 56 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } 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 events_1 = __webpack_require__(101); - +var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { + var c = arguments.length, + r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, + d; + if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { + if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + }return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = undefined && undefined.__metadata || function (k, v) { + if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var inversify_1 = __webpack_require__(10); +var events_1 = __webpack_require__(104); +inversify_1.decorate(inversify_1.injectable(), events_1.EventEmitter); var ObfuscationEventEmitter = function (_events_1$EventEmitte) { - _inherits(ObfuscationEventEmitter, _events_1$EventEmitte); + _inherits(ObfuscationEventEmitter, _events_1$EventEmitte); - function ObfuscationEventEmitter() { - _classCallCheck(this, ObfuscationEventEmitter); + function ObfuscationEventEmitter() { + _classCallCheck(this, ObfuscationEventEmitter); - return _possibleConstructorReturn(this, (ObfuscationEventEmitter.__proto__ || Object.getPrototypeOf(ObfuscationEventEmitter)).apply(this, arguments)); - } + return _possibleConstructorReturn(this, (ObfuscationEventEmitter.__proto__ || Object.getPrototypeOf(ObfuscationEventEmitter)).apply(this, arguments)); + } - return ObfuscationEventEmitter; + return ObfuscationEventEmitter; }(events_1.EventEmitter); - +ObfuscationEventEmitter = __decorate([inversify_1.injectable(), __metadata('design:paramtypes', [])], ObfuscationEventEmitter); exports.ObfuscationEventEmitter = ObfuscationEventEmitter; /***/ }, -/* 54 */ +/* 57 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3090,24 +3279,43 @@ exports.ObfuscationEventEmitter = ObfuscationEventEmitter; var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } 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 __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { + var c = arguments.length, + r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, + d; + if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { + if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + }return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = undefined && undefined.__metadata || function (k, v) { + if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = undefined && undefined.__param || function (paramIndex, decorator) { + return function (target, key) { + decorator(target, key, paramIndex); + }; +}; +var inversify_1 = __webpack_require__(10); +var ServiceIdentifiers_1 = __webpack_require__(15); var estraverse = __webpack_require__(4); var NodeType_1 = __webpack_require__(6); var AbstractNodeTransformer_1 = __webpack_require__(9); -var BinaryExpressionControlFlowReplacer_1 = __webpack_require__(56); -var ControlFlowStorage_1 = __webpack_require__(77); -var ControlFlowStorageNode_1 = __webpack_require__(39); +var BinaryExpressionControlFlowReplacer_1 = __webpack_require__(59); +var ControlFlowStorage_1 = __webpack_require__(79); +var ControlFlowStorageNode_1 = __webpack_require__(42); var Node_1 = __webpack_require__(2); var NodeAppender_1 = __webpack_require__(3); var Utils_1 = __webpack_require__(0); var NodeUtils_1 = __webpack_require__(8); - -var FunctionControlFlowTransformer = function (_AbstractNodeTransfor) { +var FunctionControlFlowTransformer_1 = function (_AbstractNodeTransfor) { _inherits(FunctionControlFlowTransformer, _AbstractNodeTransfor); function FunctionControlFlowTransformer(customNodesStorage, options) { @@ -3117,12 +3325,12 @@ var FunctionControlFlowTransformer = function (_AbstractNodeTransfor) { } _createClass(FunctionControlFlowTransformer, [{ - key: 'transformNode', + key: "transformNode", value: function transformNode(functionNode) { this.changeFunctionBodyControlFlow(functionNode); } }, { - key: 'changeFunctionBodyControlFlow', + key: "changeFunctionBodyControlFlow", value: function changeFunctionBodyControlFlow(functionNode) { var _this2 = this; @@ -3134,7 +3342,7 @@ var FunctionControlFlowTransformer = function (_AbstractNodeTransfor) { console.log(NodeUtils_1.NodeUtils.getNodeBlockScopeDepth(functionNode.body)); estraverse.replace(functionNode.body, { enter: function enter(node, parentNode) { - var controlFlowReplacer = FunctionControlFlowTransformer.controlFlowReplacers.get(node.type); + var controlFlowReplacer = FunctionControlFlowTransformer_1.controlFlowReplacers.get(node.type); if (!controlFlowReplacer) { return; } @@ -3144,7 +3352,7 @@ var FunctionControlFlowTransformer = function (_AbstractNodeTransfor) { } var statementNode = controlFlowStorageCallCustomNode.getNode()[0]; if (!statementNode || !Node_1.Node.isExpressionStatementNode(statementNode)) { - throw new Error('`controlFlowStorageCallCustomNode.getNode()` should returns array with `ExpressionStatement` node'); + throw new Error("`controlFlowStorageCallCustomNode.getNode()` should returns array with `ExpressionStatement` node"); } return statementNode.expression; } @@ -3156,12 +3364,13 @@ var FunctionControlFlowTransformer = function (_AbstractNodeTransfor) { return FunctionControlFlowTransformer; }(AbstractNodeTransformer_1.AbstractNodeTransformer); - +var FunctionControlFlowTransformer = FunctionControlFlowTransformer_1; FunctionControlFlowTransformer.controlFlowReplacers = new Map([[NodeType_1.NodeType.BinaryExpression, BinaryExpressionControlFlowReplacer_1.BinaryExpressionControlFlowReplacer]]); +FunctionControlFlowTransformer = FunctionControlFlowTransformer_1 = __decorate([inversify_1.injectable(), __param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers['IStorage'])), __param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), __metadata('design:paramtypes', [Object, Object])], FunctionControlFlowTransformer); exports.FunctionControlFlowTransformer = FunctionControlFlowTransformer; /***/ }, -/* 55 */ +/* 58 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3197,7 +3406,7 @@ var AbstractControlFlowReplacer = function () { exports.AbstractControlFlowReplacer = AbstractControlFlowReplacer; /***/ }, -/* 56 */ +/* 59 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3211,10 +3420,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 escodegen = __webpack_require__(11); -var AbstractControlFlowReplacer_1 = __webpack_require__(55); -var BinaryExpressionFunctionNode_1 = __webpack_require__(37); -var ControlFlowStorageCallNode_1 = __webpack_require__(38); +var escodegen = __webpack_require__(12); +var AbstractControlFlowReplacer_1 = __webpack_require__(58); +var BinaryExpressionFunctionNode_1 = __webpack_require__(40); +var ControlFlowStorageCallNode_1 = __webpack_require__(41); var BinaryExpressionControlFlowReplacer = function (_AbstractControlFlowR) { _inherits(BinaryExpressionControlFlowReplacer, _AbstractControlFlowR); @@ -3247,41 +3456,8 @@ var BinaryExpressionControlFlowReplacer = function (_AbstractControlFlowR) { exports.BinaryExpressionControlFlowReplacer = BinaryExpressionControlFlowReplacer; /***/ }, -/* 57 */ -/***/ function(module, exports, __webpack_require__) { - -"use strict"; -"use strict"; - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -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 NodeType_1 = __webpack_require__(6); -var FunctionControlFlowTransformer_1 = __webpack_require__(54); -var AbstractNodeTransformersFactory_1 = __webpack_require__(22); - -var NodeControlFlowTransformersFactory = function (_AbstractNodeTransfor) { - _inherits(NodeControlFlowTransformersFactory, _AbstractNodeTransfor); - - function NodeControlFlowTransformersFactory() { - _classCallCheck(this, NodeControlFlowTransformersFactory); - - var _this = _possibleConstructorReturn(this, (NodeControlFlowTransformersFactory.__proto__ || Object.getPrototypeOf(NodeControlFlowTransformersFactory)).apply(this, arguments)); - - _this.nodeTransformers = new Map([[NodeType_1.NodeType.FunctionDeclaration, [FunctionControlFlowTransformer_1.FunctionControlFlowTransformer]], [NodeType_1.NodeType.FunctionExpression, [FunctionControlFlowTransformer_1.FunctionControlFlowTransformer]]]); - return _this; - } - - return NodeControlFlowTransformersFactory; -}(AbstractNodeTransformersFactory_1.AbstractNodeTransformersFactory); - -exports.NodeControlFlowTransformersFactory = NodeControlFlowTransformersFactory; - -/***/ }, -/* 58 */ +/* 60 */, +/* 61 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3289,19 +3465,38 @@ exports.NodeControlFlowTransformersFactory = NodeControlFlowTransformersFactory; var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } 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 __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { + var c = arguments.length, + r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, + d; + if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { + if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + }return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = undefined && undefined.__metadata || function (k, v) { + if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = undefined && undefined.__param || function (paramIndex, decorator) { + return function (target, key) { + decorator(target, key, paramIndex); + }; +}; +var inversify_1 = __webpack_require__(10); +var ServiceIdentifiers_1 = __webpack_require__(15); var estraverse = __webpack_require__(4); var NodeType_1 = __webpack_require__(6); var AbstractNodeTransformer_1 = __webpack_require__(9); -var IdentifierReplacer_1 = __webpack_require__(13); +var IdentifierReplacer_1 = __webpack_require__(14); var Node_1 = __webpack_require__(2); var NodeUtils_1 = __webpack_require__(8); - var CatchClauseObfuscator = function (_AbstractNodeTransfor) { _inherits(CatchClauseObfuscator, _AbstractNodeTransfor); @@ -3315,13 +3510,13 @@ var CatchClauseObfuscator = function (_AbstractNodeTransfor) { } _createClass(CatchClauseObfuscator, [{ - key: 'transformNode', + key: "transformNode", value: function transformNode(catchClauseNode) { this.storeCatchClauseParam(catchClauseNode); this.replaceCatchClauseParam(catchClauseNode); } }, { - key: 'storeCatchClauseParam', + key: "storeCatchClauseParam", value: function storeCatchClauseParam(catchClauseNode) { var _this2 = this; @@ -3332,7 +3527,7 @@ var CatchClauseObfuscator = function (_AbstractNodeTransfor) { }); } }, { - key: 'replaceCatchClauseParam', + key: "replaceCatchClauseParam", value: function replaceCatchClauseParam(catchClauseNode) { var _this3 = this; @@ -3348,11 +3543,11 @@ var CatchClauseObfuscator = function (_AbstractNodeTransfor) { return CatchClauseObfuscator; }(AbstractNodeTransformer_1.AbstractNodeTransformer); - +CatchClauseObfuscator = __decorate([inversify_1.injectable(), __param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers['IStorage'])), __param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), __metadata('design:paramtypes', [Object, Object])], CatchClauseObfuscator); exports.CatchClauseObfuscator = CatchClauseObfuscator; /***/ }, -/* 59 */ +/* 62 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3360,19 +3555,38 @@ exports.CatchClauseObfuscator = CatchClauseObfuscator; var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } 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 __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { + var c = arguments.length, + r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, + d; + if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { + if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + }return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = undefined && undefined.__metadata || function (k, v) { + if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = undefined && undefined.__param || function (paramIndex, decorator) { + return function (target, key) { + decorator(target, key, paramIndex); + }; +}; +var inversify_1 = __webpack_require__(10); +var ServiceIdentifiers_1 = __webpack_require__(15); var estraverse = __webpack_require__(4); var NodeType_1 = __webpack_require__(6); var AbstractNodeTransformer_1 = __webpack_require__(9); -var IdentifierReplacer_1 = __webpack_require__(13); +var IdentifierReplacer_1 = __webpack_require__(14); var Node_1 = __webpack_require__(2); var NodeUtils_1 = __webpack_require__(8); - var FunctionDeclarationObfuscator = function (_AbstractNodeTransfor) { _inherits(FunctionDeclarationObfuscator, _AbstractNodeTransfor); @@ -3386,7 +3600,7 @@ var FunctionDeclarationObfuscator = function (_AbstractNodeTransfor) { } _createClass(FunctionDeclarationObfuscator, [{ - key: 'transformNode', + key: "transformNode", value: function transformNode(functionDeclarationNode, parentNode) { var blockScopeOfFunctionDeclarationNode = NodeUtils_1.NodeUtils.getBlockScopeOfNode(functionDeclarationNode); if (blockScopeOfFunctionDeclarationNode.type === NodeType_1.NodeType.Program) { @@ -3396,7 +3610,7 @@ var FunctionDeclarationObfuscator = function (_AbstractNodeTransfor) { this.replaceFunctionName(blockScopeOfFunctionDeclarationNode); } }, { - key: 'storeFunctionName', + key: "storeFunctionName", value: function storeFunctionName(functionDeclarationNode) { var _this2 = this; @@ -3407,7 +3621,7 @@ var FunctionDeclarationObfuscator = function (_AbstractNodeTransfor) { }); } }, { - key: 'replaceFunctionName', + key: "replaceFunctionName", value: function replaceFunctionName(scopeNode) { var _this3 = this; @@ -3423,11 +3637,11 @@ var FunctionDeclarationObfuscator = function (_AbstractNodeTransfor) { return FunctionDeclarationObfuscator; }(AbstractNodeTransformer_1.AbstractNodeTransformer); - +FunctionDeclarationObfuscator = __decorate([inversify_1.injectable(), __param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers['IStorage'])), __param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), __metadata('design:paramtypes', [Object, Object])], FunctionDeclarationObfuscator); exports.FunctionDeclarationObfuscator = FunctionDeclarationObfuscator; /***/ }, -/* 60 */ +/* 63 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3435,19 +3649,38 @@ exports.FunctionDeclarationObfuscator = FunctionDeclarationObfuscator; var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } 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 __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { + var c = arguments.length, + r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, + d; + if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { + if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + }return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = undefined && undefined.__metadata || function (k, v) { + if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = undefined && undefined.__param || function (paramIndex, decorator) { + return function (target, key) { + decorator(target, key, paramIndex); + }; +}; +var inversify_1 = __webpack_require__(10); +var ServiceIdentifiers_1 = __webpack_require__(15); var estraverse = __webpack_require__(4); var NodeType_1 = __webpack_require__(6); var AbstractNodeTransformer_1 = __webpack_require__(9); -var IdentifierReplacer_1 = __webpack_require__(13); +var IdentifierReplacer_1 = __webpack_require__(14); var Node_1 = __webpack_require__(2); var NodeUtils_1 = __webpack_require__(8); - var FunctionObfuscator = function (_AbstractNodeTransfor) { _inherits(FunctionObfuscator, _AbstractNodeTransfor); @@ -3461,13 +3694,13 @@ var FunctionObfuscator = function (_AbstractNodeTransfor) { } _createClass(FunctionObfuscator, [{ - key: 'transformNode', + key: "transformNode", value: function transformNode(functionNode) { this.storeFunctionParams(functionNode); this.replaceFunctionParams(functionNode); } }, { - key: 'storeFunctionParams', + key: "storeFunctionParams", value: function storeFunctionParams(functionNode) { var _this2 = this; @@ -3480,7 +3713,7 @@ var FunctionObfuscator = function (_AbstractNodeTransfor) { }); } }, { - key: 'replaceFunctionParams', + key: "replaceFunctionParams", value: function replaceFunctionParams(functionNode) { var _this3 = this; @@ -3504,11 +3737,11 @@ var FunctionObfuscator = function (_AbstractNodeTransfor) { return FunctionObfuscator; }(AbstractNodeTransformer_1.AbstractNodeTransformer); - +FunctionObfuscator = __decorate([inversify_1.injectable(), __param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers['IStorage'])), __param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), __metadata('design:paramtypes', [Object, Object])], FunctionObfuscator); exports.FunctionObfuscator = FunctionObfuscator; /***/ }, -/* 61 */ +/* 64 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3516,19 +3749,38 @@ exports.FunctionObfuscator = FunctionObfuscator; var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } 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 __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { + var c = arguments.length, + r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, + d; + if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { + if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + }return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = undefined && undefined.__metadata || function (k, v) { + if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = undefined && undefined.__param || function (paramIndex, decorator) { + return function (target, key) { + decorator(target, key, paramIndex); + }; +}; +var inversify_1 = __webpack_require__(10); +var ServiceIdentifiers_1 = __webpack_require__(15); var estraverse = __webpack_require__(4); var NodeType_1 = __webpack_require__(6); var AbstractNodeTransformer_1 = __webpack_require__(9); -var IdentifierReplacer_1 = __webpack_require__(13); +var IdentifierReplacer_1 = __webpack_require__(14); var Node_1 = __webpack_require__(2); var NodeUtils_1 = __webpack_require__(8); - var LabeledStatementObfuscator = function (_AbstractNodeTransfor) { _inherits(LabeledStatementObfuscator, _AbstractNodeTransfor); @@ -3542,13 +3794,13 @@ var LabeledStatementObfuscator = function (_AbstractNodeTransfor) { } _createClass(LabeledStatementObfuscator, [{ - key: 'transformNode', + key: "transformNode", value: function transformNode(labeledStatementNode) { this.storeLabeledStatementName(labeledStatementNode); this.replaceLabeledStatementName(labeledStatementNode); } }, { - key: 'storeLabeledStatementName', + key: "storeLabeledStatementName", value: function storeLabeledStatementName(labeledStatementNode) { var _this2 = this; @@ -3559,7 +3811,7 @@ var LabeledStatementObfuscator = function (_AbstractNodeTransfor) { }); } }, { - key: 'replaceLabeledStatementName', + key: "replaceLabeledStatementName", value: function replaceLabeledStatementName(labeledStatementNode) { var _this3 = this; @@ -3575,44 +3827,61 @@ var LabeledStatementObfuscator = function (_AbstractNodeTransfor) { return LabeledStatementObfuscator; }(AbstractNodeTransformer_1.AbstractNodeTransformer); - +LabeledStatementObfuscator = __decorate([inversify_1.injectable(), __param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers['IStorage'])), __param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), __metadata('design:paramtypes', [Object, Object])], LabeledStatementObfuscator); exports.LabeledStatementObfuscator = LabeledStatementObfuscator; /***/ }, -/* 62 */ +/* 65 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } 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 escodegen = __webpack_require__(11); +var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { + var c = arguments.length, + r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, + d; + if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { + if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + }return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = undefined && undefined.__metadata || function (k, v) { + if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = undefined && undefined.__param || function (paramIndex, decorator) { + return function (target, key) { + decorator(target, key, paramIndex); + }; +}; +var inversify_1 = __webpack_require__(10); +var ServiceIdentifiers_1 = __webpack_require__(15); +var escodegen = __webpack_require__(12); var AbstractNodeTransformer_1 = __webpack_require__(9); -var BooleanLiteralReplacer_1 = __webpack_require__(68); +var BooleanLiteralReplacer_1 = __webpack_require__(71); var Node_1 = __webpack_require__(2); -var NumberLiteralReplacer_1 = __webpack_require__(23); -var StringLiteralReplacer_1 = __webpack_require__(19); - +var NumberLiteralReplacer_1 = __webpack_require__(25); +var StringLiteralReplacer_1 = __webpack_require__(21); var LiteralObfuscator = function (_AbstractNodeTransfor) { _inherits(LiteralObfuscator, _AbstractNodeTransfor); - function LiteralObfuscator() { + function LiteralObfuscator(customNodesStorage, options) { _classCallCheck(this, LiteralObfuscator); - return _possibleConstructorReturn(this, (LiteralObfuscator.__proto__ || Object.getPrototypeOf(LiteralObfuscator)).apply(this, arguments)); + return _possibleConstructorReturn(this, (LiteralObfuscator.__proto__ || Object.getPrototypeOf(LiteralObfuscator)).call(this, customNodesStorage, options)); } _createClass(LiteralObfuscator, [{ - key: 'transformNode', + key: "transformNode", value: function transformNode(literalNode, parentNode) { if (Node_1.Node.isPropertyNode(parentNode) && parentNode.key === literalNode) { return; @@ -3640,11 +3909,11 @@ var LiteralObfuscator = function (_AbstractNodeTransfor) { return LiteralObfuscator; }(AbstractNodeTransformer_1.AbstractNodeTransformer); - +LiteralObfuscator = __decorate([inversify_1.injectable(), __param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers['IStorage'])), __param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), __metadata('design:paramtypes', [Object, Object])], LiteralObfuscator); exports.LiteralObfuscator = LiteralObfuscator; /***/ }, -/* 63 */ +/* 66 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3652,30 +3921,49 @@ exports.LiteralObfuscator = LiteralObfuscator; var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } 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 escodegen = __webpack_require__(11); +var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { + var c = arguments.length, + r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, + d; + if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { + if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + }return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = undefined && undefined.__metadata || function (k, v) { + if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = undefined && undefined.__param || function (paramIndex, decorator) { + return function (target, key) { + decorator(target, key, paramIndex); + }; +}; +var inversify_1 = __webpack_require__(10); +var ServiceIdentifiers_1 = __webpack_require__(15); +var escodegen = __webpack_require__(12); var estraverse = __webpack_require__(4); var NodeType_1 = __webpack_require__(6); var AbstractNodeTransformer_1 = __webpack_require__(9); var Node_1 = __webpack_require__(2); -var StringLiteralReplacer_1 = __webpack_require__(19); - +var StringLiteralReplacer_1 = __webpack_require__(21); var MemberExpressionObfuscator = function (_AbstractNodeTransfor) { _inherits(MemberExpressionObfuscator, _AbstractNodeTransfor); - function MemberExpressionObfuscator() { + function MemberExpressionObfuscator(customNodesStorage, options) { _classCallCheck(this, MemberExpressionObfuscator); - return _possibleConstructorReturn(this, (MemberExpressionObfuscator.__proto__ || Object.getPrototypeOf(MemberExpressionObfuscator)).apply(this, arguments)); + return _possibleConstructorReturn(this, (MemberExpressionObfuscator.__proto__ || Object.getPrototypeOf(MemberExpressionObfuscator)).call(this, customNodesStorage, options)); } _createClass(MemberExpressionObfuscator, [{ - key: 'transformNode', + key: "transformNode", value: function transformNode(memberExpressionNode) { var _this2 = this; @@ -3696,11 +3984,11 @@ var MemberExpressionObfuscator = function (_AbstractNodeTransfor) { }); } }, { - key: 'obfuscateIdentifierProperty', + key: "obfuscateIdentifierProperty", value: function obfuscateIdentifierProperty(node) { var nodeValue = node.name; var literalNode = { - raw: '\'' + nodeValue + '\'', + raw: "'" + nodeValue + "'", 'x-verbatim-property': { content: new StringLiteralReplacer_1.StringLiteralReplacer(this.customNodesStorage, this.options).replace(nodeValue), precedence: escodegen.Precedence.Primary @@ -3712,7 +4000,7 @@ var MemberExpressionObfuscator = function (_AbstractNodeTransfor) { Object.assign(node, literalNode); } }, { - key: 'obfuscateLiteralProperty', + key: "obfuscateLiteralProperty", value: function obfuscateLiteralProperty(node) { if (typeof node.value === 'string' && !node['x-verbatim-property']) { node['x-verbatim-property'] = { @@ -3725,11 +4013,11 @@ var MemberExpressionObfuscator = function (_AbstractNodeTransfor) { return MemberExpressionObfuscator; }(AbstractNodeTransformer_1.AbstractNodeTransformer); - +MemberExpressionObfuscator = __decorate([inversify_1.injectable(), __param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers['IStorage'])), __param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), __metadata('design:paramtypes', [Object, Object])], MemberExpressionObfuscator); exports.MemberExpressionObfuscator = MemberExpressionObfuscator; /***/ }, -/* 64 */ +/* 67 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3737,40 +4025,59 @@ exports.MemberExpressionObfuscator = MemberExpressionObfuscator; var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } 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 __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { + var c = arguments.length, + r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, + d; + if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { + if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + }return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = undefined && undefined.__metadata || function (k, v) { + if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = undefined && undefined.__param || function (paramIndex, decorator) { + return function (target, key) { + decorator(target, key, paramIndex); + }; +}; +var inversify_1 = __webpack_require__(10); +var ServiceIdentifiers_1 = __webpack_require__(15); var estraverse = __webpack_require__(4); var AbstractNodeTransformer_1 = __webpack_require__(9); var Node_1 = __webpack_require__(2); var Utils_1 = __webpack_require__(0); -var StringLiteralReplacer_1 = __webpack_require__(19); - -var MethodDefinitionObfuscator = function (_AbstractNodeTransfor) { +var StringLiteralReplacer_1 = __webpack_require__(21); +var MethodDefinitionObfuscator_1 = function (_AbstractNodeTransfor) { _inherits(MethodDefinitionObfuscator, _AbstractNodeTransfor); - function MethodDefinitionObfuscator() { + function MethodDefinitionObfuscator(customNodesStorage, options) { _classCallCheck(this, MethodDefinitionObfuscator); - return _possibleConstructorReturn(this, (MethodDefinitionObfuscator.__proto__ || Object.getPrototypeOf(MethodDefinitionObfuscator)).apply(this, arguments)); + return _possibleConstructorReturn(this, (MethodDefinitionObfuscator.__proto__ || Object.getPrototypeOf(MethodDefinitionObfuscator)).call(this, customNodesStorage, options)); } _createClass(MethodDefinitionObfuscator, [{ - key: 'transformNode', + key: "transformNode", value: function transformNode(methodDefinitionNode, parentNode) { this.replaceMethodName(methodDefinitionNode); } }, { - key: 'replaceMethodName', + key: "replaceMethodName", value: function replaceMethodName(methodDefinitionNode) { var _this2 = this; estraverse.replace(methodDefinitionNode.key, { enter: function enter(node) { - if (Node_1.Node.isIdentifierNode(node) && !Utils_1.Utils.arrayContains(MethodDefinitionObfuscator.ignoredNames, node.name) && methodDefinitionNode.computed === false) { + if (Node_1.Node.isIdentifierNode(node) && !Utils_1.Utils.arrayContains(MethodDefinitionObfuscator_1.ignoredNames, node.name) && methodDefinitionNode.computed === false) { methodDefinitionNode.computed = true; node.name = new StringLiteralReplacer_1.StringLiteralReplacer(_this2.customNodesStorage, _this2.options).replace(node.name); return; @@ -3783,12 +4090,13 @@ var MethodDefinitionObfuscator = function (_AbstractNodeTransfor) { return MethodDefinitionObfuscator; }(AbstractNodeTransformer_1.AbstractNodeTransformer); - +var MethodDefinitionObfuscator = MethodDefinitionObfuscator_1; MethodDefinitionObfuscator.ignoredNames = ['constructor']; +MethodDefinitionObfuscator = MethodDefinitionObfuscator_1 = __decorate([inversify_1.injectable(), __param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers['IStorage'])), __param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), __metadata('design:paramtypes', [Object, Object])], MethodDefinitionObfuscator); exports.MethodDefinitionObfuscator = MethodDefinitionObfuscator; /***/ }, -/* 65 */ +/* 68 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3796,30 +4104,49 @@ exports.MethodDefinitionObfuscator = MethodDefinitionObfuscator; var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } 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 escodegen = __webpack_require__(11); +var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { + var c = arguments.length, + r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, + d; + if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { + if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + }return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = undefined && undefined.__metadata || function (k, v) { + if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = undefined && undefined.__param || function (paramIndex, decorator) { + return function (target, key) { + decorator(target, key, paramIndex); + }; +}; +var inversify_1 = __webpack_require__(10); +var ServiceIdentifiers_1 = __webpack_require__(15); +var escodegen = __webpack_require__(12); var estraverse = __webpack_require__(4); var NodeType_1 = __webpack_require__(6); var AbstractNodeTransformer_1 = __webpack_require__(9); var Node_1 = __webpack_require__(2); var Utils_1 = __webpack_require__(0); - var ObjectExpressionObfuscator = function (_AbstractNodeTransfor) { _inherits(ObjectExpressionObfuscator, _AbstractNodeTransfor); - function ObjectExpressionObfuscator() { + function ObjectExpressionObfuscator(customNodesStorage, options) { _classCallCheck(this, ObjectExpressionObfuscator); - return _possibleConstructorReturn(this, (ObjectExpressionObfuscator.__proto__ || Object.getPrototypeOf(ObjectExpressionObfuscator)).apply(this, arguments)); + return _possibleConstructorReturn(this, (ObjectExpressionObfuscator.__proto__ || Object.getPrototypeOf(ObjectExpressionObfuscator)).call(this, customNodesStorage, options)); } _createClass(ObjectExpressionObfuscator, [{ - key: 'transformNode', + key: "transformNode", value: function transformNode(objectExpressionNode) { var _this2 = this; @@ -3841,23 +4168,23 @@ var ObjectExpressionObfuscator = function (_AbstractNodeTransfor) { }); } }, { - key: 'obfuscateLiteralPropertyKey', + key: "obfuscateLiteralPropertyKey", value: function obfuscateLiteralPropertyKey(node) { if (typeof node.value === 'string' && !node['x-verbatim-property']) { node['x-verbatim-property'] = { - content: '\'' + Utils_1.Utils.stringToUnicodeEscapeSequence(node.value) + '\'', + content: "'" + Utils_1.Utils.stringToUnicodeEscapeSequence(node.value) + "'", precedence: escodegen.Precedence.Primary }; } } }, { - key: 'obfuscateIdentifierPropertyKey', + key: "obfuscateIdentifierPropertyKey", value: function obfuscateIdentifierPropertyKey(node) { var nodeValue = node.name; var literalNode = { - raw: '\'' + nodeValue + '\'', + raw: "'" + nodeValue + "'", 'x-verbatim-property': { - content: '\'' + Utils_1.Utils.stringToUnicodeEscapeSequence(nodeValue) + '\'', + content: "'" + Utils_1.Utils.stringToUnicodeEscapeSequence(nodeValue) + "'", precedence: escodegen.Precedence.Primary }, type: NodeType_1.NodeType.Literal, @@ -3870,11 +4197,11 @@ var ObjectExpressionObfuscator = function (_AbstractNodeTransfor) { return ObjectExpressionObfuscator; }(AbstractNodeTransformer_1.AbstractNodeTransformer); - +ObjectExpressionObfuscator = __decorate([inversify_1.injectable(), __param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers['IStorage'])), __param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), __metadata('design:paramtypes', [Object, Object])], ObjectExpressionObfuscator); exports.ObjectExpressionObfuscator = ObjectExpressionObfuscator; /***/ }, -/* 66 */ +/* 69 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -3882,19 +4209,38 @@ exports.ObjectExpressionObfuscator = ObjectExpressionObfuscator; var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } 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 __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { + var c = arguments.length, + r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, + d; + if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { + if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + }return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = undefined && undefined.__metadata || function (k, v) { + if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = undefined && undefined.__param || function (paramIndex, decorator) { + return function (target, key) { + decorator(target, key, paramIndex); + }; +}; +var inversify_1 = __webpack_require__(10); +var ServiceIdentifiers_1 = __webpack_require__(15); var estraverse = __webpack_require__(4); var NodeType_1 = __webpack_require__(6); var AbstractNodeTransformer_1 = __webpack_require__(9); -var IdentifierReplacer_1 = __webpack_require__(13); +var IdentifierReplacer_1 = __webpack_require__(14); var Node_1 = __webpack_require__(2); var NodeUtils_1 = __webpack_require__(8); - var VariableDeclarationObfuscator = function (_AbstractNodeTransfor) { _inherits(VariableDeclarationObfuscator, _AbstractNodeTransfor); @@ -3908,7 +4254,7 @@ var VariableDeclarationObfuscator = function (_AbstractNodeTransfor) { } _createClass(VariableDeclarationObfuscator, [{ - key: 'transformNode', + key: "transformNode", value: function transformNode(variableDeclarationNode, parentNode) { var blockScopeOfVariableDeclarationNode = NodeUtils_1.NodeUtils.getBlockScopeOfNode(variableDeclarationNode); if (blockScopeOfVariableDeclarationNode.type === NodeType_1.NodeType.Program) { @@ -3919,7 +4265,7 @@ var VariableDeclarationObfuscator = function (_AbstractNodeTransfor) { this.replaceVariableNames(scopeNode); } }, { - key: 'storeVariableNames', + key: "storeVariableNames", value: function storeVariableNames(variableDeclarationNode) { var _this2 = this; @@ -3932,7 +4278,7 @@ var VariableDeclarationObfuscator = function (_AbstractNodeTransfor) { }); } }, { - key: 'replaceVariableNames', + key: "replaceVariableNames", value: function replaceVariableNames(scopeNode) { var _this3 = this; @@ -3948,53 +4294,12 @@ var VariableDeclarationObfuscator = function (_AbstractNodeTransfor) { return VariableDeclarationObfuscator; }(AbstractNodeTransformer_1.AbstractNodeTransformer); - +VariableDeclarationObfuscator = __decorate([inversify_1.injectable(), __param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers['IStorage'])), __param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), __metadata('design:paramtypes', [Object, Object])], VariableDeclarationObfuscator); exports.VariableDeclarationObfuscator = VariableDeclarationObfuscator; /***/ }, -/* 67 */ -/***/ function(module, exports, __webpack_require__) { - -"use strict"; -"use strict"; - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -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 NodeType_1 = __webpack_require__(6); -var CatchClauseObfuscator_1 = __webpack_require__(58); -var FunctionDeclarationObfuscator_1 = __webpack_require__(59); -var FunctionObfuscator_1 = __webpack_require__(60); -var LabeledStatementObfuscator_1 = __webpack_require__(61); -var LiteralObfuscator_1 = __webpack_require__(62); -var MemberExpressionObfuscator_1 = __webpack_require__(63); -var MethodDefinitionObfuscator_1 = __webpack_require__(64); -var ObjectExpressionObfuscator_1 = __webpack_require__(65); -var VariableDeclarationObfuscator_1 = __webpack_require__(66); -var AbstractNodeTransformersFactory_1 = __webpack_require__(22); - -var NodeObfuscatorsFactory = function (_AbstractNodeTransfor) { - _inherits(NodeObfuscatorsFactory, _AbstractNodeTransfor); - - function NodeObfuscatorsFactory() { - _classCallCheck(this, NodeObfuscatorsFactory); - - var _this = _possibleConstructorReturn(this, (NodeObfuscatorsFactory.__proto__ || Object.getPrototypeOf(NodeObfuscatorsFactory)).apply(this, arguments)); - - _this.nodeTransformers = new Map([[NodeType_1.NodeType.ArrowFunctionExpression, [FunctionObfuscator_1.FunctionObfuscator]], [NodeType_1.NodeType.ClassDeclaration, [FunctionDeclarationObfuscator_1.FunctionDeclarationObfuscator]], [NodeType_1.NodeType.CatchClause, [CatchClauseObfuscator_1.CatchClauseObfuscator]], [NodeType_1.NodeType.FunctionDeclaration, [FunctionDeclarationObfuscator_1.FunctionDeclarationObfuscator, FunctionObfuscator_1.FunctionObfuscator]], [NodeType_1.NodeType.FunctionExpression, [FunctionObfuscator_1.FunctionObfuscator]], [NodeType_1.NodeType.MemberExpression, [MemberExpressionObfuscator_1.MemberExpressionObfuscator]], [NodeType_1.NodeType.MethodDefinition, [MethodDefinitionObfuscator_1.MethodDefinitionObfuscator]], [NodeType_1.NodeType.ObjectExpression, [ObjectExpressionObfuscator_1.ObjectExpressionObfuscator]], [NodeType_1.NodeType.VariableDeclaration, [VariableDeclarationObfuscator_1.VariableDeclarationObfuscator]], [NodeType_1.NodeType.LabeledStatement, [LabeledStatementObfuscator_1.LabeledStatementObfuscator]], [NodeType_1.NodeType.Literal, [LiteralObfuscator_1.LiteralObfuscator]]]); - return _this; - } - - return NodeObfuscatorsFactory; -}(AbstractNodeTransformersFactory_1.AbstractNodeTransformersFactory); - -exports.NodeObfuscatorsFactory = NodeObfuscatorsFactory; - -/***/ }, -/* 68 */ +/* 70 */, +/* 71 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -4008,8 +4313,8 @@ 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 JSFuck_1 = __webpack_require__(21); -var AbstractReplacer_1 = __webpack_require__(15); +var JSFuck_1 = __webpack_require__(23); +var AbstractReplacer_1 = __webpack_require__(17); var BooleanLiteralReplacer = function (_AbstractReplacer_1$A) { _inherits(BooleanLiteralReplacer, _AbstractReplacer_1$A); @@ -4033,79 +4338,7 @@ var BooleanLiteralReplacer = function (_AbstractReplacer_1$A) { exports.BooleanLiteralReplacer = BooleanLiteralReplacer; /***/ }, -/* 69 */ -/***/ function(module, exports, __webpack_require__) { - -"use strict"; -"use strict"; - -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { - if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - }return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = undefined && undefined.__metadata || function (k, v) { - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var class_validator_1 = __webpack_require__(99); -var DefaultPreset_1 = __webpack_require__(24); -var OptionsNormalizer_1 = __webpack_require__(70); -var ValidationErrorsFormatter_1 = __webpack_require__(71); - -var Options = function Options(inputOptions) { - _classCallCheck(this, Options); - - Object.assign(this, DefaultPreset_1.DEFAULT_PRESET, inputOptions); - var errors = class_validator_1.validateSync(this, Options.validatorOptions); - if (errors.length) { - throw new ReferenceError("Validation failed. errors:\n" + ValidationErrorsFormatter_1.ValidationErrorsFormatter.format(errors)); - } - Object.assign(this, OptionsNormalizer_1.OptionsNormalizer.normalizeOptions(this)); -}; - -Options.validatorOptions = { - validationError: { - target: false - } -}; -__decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], Options.prototype, "compact", void 0); -__decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], Options.prototype, "controlFlowFlattening", void 0); -__decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], Options.prototype, "debugProtection", void 0); -__decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], Options.prototype, "debugProtectionInterval", void 0); -__decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], Options.prototype, "disableConsoleOutput", void 0); -__decorate([class_validator_1.IsArray(), class_validator_1.ArrayUnique(), class_validator_1.IsString({ - each: true -}), __metadata('design:type', Array)], Options.prototype, "domainLock", void 0); -__decorate([class_validator_1.IsArray(), class_validator_1.ArrayUnique(), class_validator_1.IsString({ - each: true -}), __metadata('design:type', Array)], Options.prototype, "reservedNames", void 0); -__decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], Options.prototype, "rotateStringArray", void 0); -__decorate([class_validator_1.IsNumber(), __metadata('design:type', Number)], Options.prototype, "seed", void 0); -__decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], Options.prototype, "selfDefending", void 0); -__decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], Options.prototype, "sourceMap", void 0); -__decorate([class_validator_1.IsString(), class_validator_1.ValidateIf(function (options) { - return Boolean(options.sourceMapBaseUrl); -}), class_validator_1.IsUrl({ - 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); -__decorate([class_validator_1.IsIn(['inline', 'separate']), __metadata('design:type', String)], Options.prototype, "sourceMapMode", void 0); -__decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], Options.prototype, "stringArray", void 0); -__decorate([class_validator_1.IsIn([true, false, 'base64', 'rc4']), __metadata('design:type', Object)], Options.prototype, "stringArrayEncoding", void 0); -__decorate([class_validator_1.IsNumber(), class_validator_1.Min(0), class_validator_1.Max(1), __metadata('design:type', Number)], Options.prototype, "stringArrayThreshold", void 0); -__decorate([class_validator_1.IsBoolean(), __metadata('design:type', Boolean)], Options.prototype, "unicodeEscapeSequence", void 0); -exports.Options = Options; - -/***/ }, -/* 70 */ +/* 72 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -4272,7 +4505,7 @@ OptionsNormalizer.normalizerRules = [OptionsNormalizer.domainLockRule, OptionsNo exports.OptionsNormalizer = OptionsNormalizer; /***/ }, -/* 71 */ +/* 73 */ /***/ function(module, exports) { "use strict"; @@ -4339,7 +4572,7 @@ var ValidationErrorsFormatter = function () { exports.ValidationErrorsFormatter = ValidationErrorsFormatter; /***/ }, -/* 72 */ +/* 74 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -4347,17 +4580,30 @@ exports.ValidationErrorsFormatter = ValidationErrorsFormatter; var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { + var c = arguments.length, + r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, + d; + if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { + if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + }return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = undefined && undefined.__metadata || function (k, v) { + if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var inversify_1 = __webpack_require__(10); var estraverse = __webpack_require__(4); var NodeType_1 = __webpack_require__(6); -var FunctionDeclarationCalleeDataExtractor_1 = __webpack_require__(73); -var FunctionExpressionCalleeDataExtractor_1 = __webpack_require__(74); -var ObjectExpressionCalleeDataExtractor_1 = __webpack_require__(75); +var FunctionDeclarationCalleeDataExtractor_1 = __webpack_require__(75); +var FunctionExpressionCalleeDataExtractor_1 = __webpack_require__(76); +var ObjectExpressionCalleeDataExtractor_1 = __webpack_require__(77); var Node_1 = __webpack_require__(2); var NodeUtils_1 = __webpack_require__(8); - -var StackTraceAnalyzer = function () { +var StackTraceAnalyzer_1 = function () { function StackTraceAnalyzer() { _classCallCheck(this, StackTraceAnalyzer); @@ -4365,22 +4611,22 @@ var StackTraceAnalyzer = function () { } _createClass(StackTraceAnalyzer, [{ - key: 'analyze', + key: "analyze", value: function analyze(blockScopeBody) { return this.analyzeRecursive(blockScopeBody); } }, { - key: 'analyzeRecursive', + key: "analyzeRecursive", value: function analyzeRecursive(blockScopeBody) { var _this = this; - var limitIndex = StackTraceAnalyzer.getLimitIndex(blockScopeBody.length); + var limitIndex = StackTraceAnalyzer_1.getLimitIndex(blockScopeBody.length); var stackTraceData = []; var _loop = function _loop(index, blockScopeBodyLength) { var rootNode = blockScopeBody[index]; if (index > limitIndex) { - return 'break'; + return "break"; } estraverse.traverse(rootNode, { enter: function enter(node) { @@ -4403,18 +4649,18 @@ var StackTraceAnalyzer = function () { for (var index = 0, blockScopeBodyLength = blockScopeBody.length; index < blockScopeBodyLength; index++) { var _ret = _loop(index, blockScopeBodyLength); - if (_ret === 'break') break; + if (_ret === "break") break; } return stackTraceData; } }], [{ - key: 'getLimitIndex', + key: "getLimitIndex", value: function getLimitIndex(blockScopeBodyLength) { var lastIndex = blockScopeBodyLength - 1; - var limitThresholdActivationIndex = StackTraceAnalyzer.limitThresholdActivationLength - 1; + var limitThresholdActivationIndex = StackTraceAnalyzer_1.limitThresholdActivationLength - 1; var limitIndex = lastIndex; if (lastIndex > limitThresholdActivationIndex) { - limitIndex = Math.round(limitThresholdActivationIndex + lastIndex * StackTraceAnalyzer.limitThreshold); + limitIndex = Math.round(limitThresholdActivationIndex + lastIndex * StackTraceAnalyzer_1.limitThreshold); if (limitIndex > lastIndex) { limitIndex = lastIndex; } @@ -4425,13 +4671,14 @@ var StackTraceAnalyzer = function () { return StackTraceAnalyzer; }(); - +var StackTraceAnalyzer = StackTraceAnalyzer_1; StackTraceAnalyzer.limitThresholdActivationLength = 25; StackTraceAnalyzer.limitThreshold = 0.002; +StackTraceAnalyzer = StackTraceAnalyzer_1 = __decorate([inversify_1.injectable(), __metadata('design:paramtypes', [])], StackTraceAnalyzer); exports.StackTraceAnalyzer = StackTraceAnalyzer; /***/ }, -/* 73 */ +/* 75 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -4490,7 +4737,7 @@ var FunctionDeclarationCalleeDataExtractor = function () { exports.FunctionDeclarationCalleeDataExtractor = FunctionDeclarationCalleeDataExtractor; /***/ }, -/* 74 */ +/* 76 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -4552,7 +4799,7 @@ var FunctionExpressionCalleeDataExtractor = function () { exports.FunctionExpressionCalleeDataExtractor = FunctionExpressionCalleeDataExtractor; /***/ }, -/* 75 */ +/* 77 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -4684,7 +4931,7 @@ var ObjectExpressionCalleeDataExtractor = function () { exports.ObjectExpressionCalleeDataExtractor = ObjectExpressionCalleeDataExtractor; /***/ }, -/* 76 */ +/* 78 */ /***/ function(module, exports) { "use strict"; @@ -4741,7 +4988,7 @@ var ArrayStorage = function () { exports.ArrayStorage = ArrayStorage; /***/ }, -/* 77 */ +/* 79 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -4757,7 +5004,7 @@ 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 MapStorage_1 = __webpack_require__(25); +var MapStorage_1 = __webpack_require__(28); var ControlFlowStorage = function (_MapStorage_1$MapStor) { _inherits(ControlFlowStorage, _MapStorage_1$MapStor); @@ -4788,7 +5035,7 @@ var ControlFlowStorage = function (_MapStorage_1$MapStor) { exports.ControlFlowStorage = ControlFlowStorage; /***/ }, -/* 78 */ +/* 80 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -4796,6 +5043,8 @@ exports.ControlFlowStorage = ControlFlowStorage; var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } @@ -4804,14 +5053,31 @@ 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 ConsoleOutputCustomNodesFactory_1 = __webpack_require__(36); -var DebugProtectionCustomNodesFactory_1 = __webpack_require__(43); -var DomainLockCustomNodesFactory_1 = __webpack_require__(45); -var MapStorage_1 = __webpack_require__(25); -var SelfDefendingCustomNodesFactory_1 = __webpack_require__(47); -var StringArrayCustomNodesFactory_1 = __webpack_require__(51); - -var CustomNodesStorage = function (_MapStorage_1$MapStor) { +var __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) { + var c = arguments.length, + r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, + d; + if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { + if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + }return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = undefined && undefined.__metadata || function (k, v) { + if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = undefined && undefined.__param || function (paramIndex, decorator) { + return function (target, key) { + decorator(target, key, paramIndex); + }; +}; +var inversify_1 = __webpack_require__(10); +var ServiceIdentifiers_1 = __webpack_require__(15); +var ConsoleOutputCustomNodesFactory_1 = __webpack_require__(39); +var DebugProtectionCustomNodesFactory_1 = __webpack_require__(46); +var DomainLockCustomNodesFactory_1 = __webpack_require__(48); +var MapStorage_1 = __webpack_require__(28); +var SelfDefendingCustomNodesFactory_1 = __webpack_require__(50); +var StringArrayCustomNodesFactory_1 = __webpack_require__(54); +var CustomNodesStorage_1 = function (_MapStorage_1$MapStor) { _inherits(CustomNodesStorage, _MapStorage_1$MapStor); function CustomNodesStorage(options) { @@ -4824,12 +5090,12 @@ var CustomNodesStorage = function (_MapStorage_1$MapStor) { } _createClass(CustomNodesStorage, [{ - key: 'initialize', + key: "initialize", value: function initialize(stackTraceData) { var _this2 = this; var customNodes = []; - CustomNodesStorage.customNodesFactories.forEach(function (customNodesFactoryConstructor) { + CustomNodesStorage_1.customNodesFactories.forEach(function (customNodesFactoryConstructor) { var customNodesFactory = new customNodesFactoryConstructor(_this2.options).initializeCustomNodes(stackTraceData); if (!customNodesFactory) { return; @@ -4842,12 +5108,13 @@ var CustomNodesStorage = function (_MapStorage_1$MapStor) { return CustomNodesStorage; }(MapStorage_1.MapStorage); - +var CustomNodesStorage = CustomNodesStorage_1; CustomNodesStorage.customNodesFactories = [DomainLockCustomNodesFactory_1.DomainLockCustomNodesFactory, SelfDefendingCustomNodesFactory_1.SelfDefendingCustomNodesFactory, ConsoleOutputCustomNodesFactory_1.ConsoleOutputCustomNodesFactory, DebugProtectionCustomNodesFactory_1.DebugProtectionCustomNodesFactory, StringArrayCustomNodesFactory_1.StringArrayCustomNodesFactory]; +CustomNodesStorage = CustomNodesStorage_1 = __decorate([inversify_1.injectable(), __param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), __metadata('design:paramtypes', [Object])], CustomNodesStorage); exports.CustomNodesStorage = CustomNodesStorage; /***/ }, -/* 79 */ +/* 81 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -4861,7 +5128,7 @@ 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 ArrayStorage_1 = __webpack_require__(76); +var ArrayStorage_1 = __webpack_require__(78); var Utils_1 = __webpack_require__(0); var StringArrayStorage = function (_ArrayStorage_1$Array) { @@ -4893,7 +5160,7 @@ var StringArrayStorage = function (_ArrayStorage_1$Array) { exports.StringArrayStorage = StringArrayStorage; /***/ }, -/* 80 */ +/* 82 */ /***/ function(module, exports) { "use strict"; @@ -4905,7 +5172,7 @@ function AtobTemplate() { exports.AtobTemplate = AtobTemplate; /***/ }, -/* 81 */ +/* 83 */ /***/ function(module, exports) { "use strict"; @@ -4917,7 +5184,7 @@ function Rc4Template() { exports.Rc4Template = Rc4Template; /***/ }, -/* 82 */ +/* 84 */ /***/ function(module, exports) { "use strict"; @@ -4929,7 +5196,7 @@ function SingleNodeCallControllerTemplate() { exports.SingleNodeCallControllerTemplate = SingleNodeCallControllerTemplate; /***/ }, -/* 83 */ +/* 85 */ /***/ function(module, exports) { "use strict"; @@ -4941,7 +5208,7 @@ function ConsoleOutputDisableExpressionTemplate() { exports.ConsoleOutputDisableExpressionTemplate = ConsoleOutputDisableExpressionTemplate; /***/ }, -/* 84 */ +/* 86 */ /***/ function(module, exports) { "use strict"; @@ -4953,7 +5220,7 @@ function BinaryExpressionFunctionTemplate() { exports.BinaryExpressionFunctionTemplate = BinaryExpressionFunctionTemplate; /***/ }, -/* 85 */ +/* 87 */ /***/ function(module, exports) { "use strict"; @@ -4965,7 +5232,7 @@ function ControlFlowStorageCallTemplate() { exports.ControlFlowStorageCallTemplate = ControlFlowStorageCallTemplate; /***/ }, -/* 86 */ +/* 88 */ /***/ function(module, exports) { "use strict"; @@ -4977,7 +5244,7 @@ function ControlFlowStorageTemplate() { exports.ControlFlowStorageTemplate = ControlFlowStorageTemplate; /***/ }, -/* 87 */ +/* 89 */ /***/ function(module, exports) { "use strict"; @@ -4989,7 +5256,7 @@ function DebugProtectionFunctionCallTemplate() { exports.DebugProtectionFunctionCallTemplate = DebugProtectionFunctionCallTemplate; /***/ }, -/* 88 */ +/* 90 */ /***/ function(module, exports) { "use strict"; @@ -5001,7 +5268,7 @@ function DebugProtectionFunctionIntervalTemplate() { exports.DebugProtectionFunctionIntervalTemplate = DebugProtectionFunctionIntervalTemplate; /***/ }, -/* 89 */ +/* 91 */ /***/ function(module, exports) { "use strict"; @@ -5013,7 +5280,7 @@ function DebugProtectionFunctionTemplate() { exports.DebugProtectionFunctionTemplate = DebugProtectionFunctionTemplate; /***/ }, -/* 90 */ +/* 92 */ /***/ function(module, exports) { "use strict"; @@ -5025,7 +5292,7 @@ function DomainLockNodeTemplate() { exports.DomainLockNodeTemplate = DomainLockNodeTemplate; /***/ }, -/* 91 */ +/* 93 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -5038,7 +5305,7 @@ function SelfDefendingTemplate() { exports.SelfDefendingTemplate = SelfDefendingTemplate; /***/ }, -/* 92 */ +/* 94 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -5051,7 +5318,7 @@ function SelfDefendingTemplate() { exports.SelfDefendingTemplate = SelfDefendingTemplate; /***/ }, -/* 93 */ +/* 95 */ /***/ function(module, exports) { "use strict"; @@ -5063,7 +5330,7 @@ function StringArrayBase64DecodeNodeTemplate() { exports.StringArrayBase64DecodeNodeTemplate = StringArrayBase64DecodeNodeTemplate; /***/ }, -/* 94 */ +/* 96 */ /***/ function(module, exports) { "use strict"; @@ -5075,7 +5342,7 @@ function StringArrayCallsWrapperTemplate() { exports.StringArrayCallsWrapperTemplate = StringArrayCallsWrapperTemplate; /***/ }, -/* 95 */ +/* 97 */ /***/ function(module, exports) { "use strict"; @@ -5087,7 +5354,7 @@ function StringArrayRc4DecodeNodeTemplate() { exports.StringArrayRc4DecodeNodeTemplate = StringArrayRc4DecodeNodeTemplate; /***/ }, -/* 96 */ +/* 98 */ /***/ function(module, exports) { "use strict"; @@ -5099,7 +5366,7 @@ function StringArrayTemplate() { exports.StringArrayTemplate = StringArrayTemplate; /***/ }, -/* 97 */ +/* 99 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -5112,7 +5379,7 @@ function SelfDefendingTemplate() { exports.SelfDefendingTemplate = SelfDefendingTemplate; /***/ }, -/* 98 */ +/* 100 */ /***/ function(module, exports) { "use strict"; @@ -5123,56 +5390,107 @@ function StringArrayRotateFunctionTemplate() { } exports.StringArrayRotateFunctionTemplate = StringArrayRotateFunctionTemplate; -/***/ }, -/* 99 */ -/***/ function(module, exports) { - -module.exports = require("class-validator"); - -/***/ }, -/* 100 */ -/***/ function(module, exports) { - -module.exports = require("commander"); - /***/ }, /* 101 */ /***/ function(module, exports) { -module.exports = require("events"); +module.exports = require("babel-polyfill"); /***/ }, /* 102 */ /***/ function(module, exports) { -module.exports = require("fs"); +module.exports = require("class-validator"); /***/ }, /* 103 */ /***/ function(module, exports) { -module.exports = require("is-equal"); +module.exports = require("commander"); /***/ }, /* 104 */ /***/ function(module, exports) { +module.exports = require("events"); + +/***/ }, +/* 105 */ +/***/ function(module, exports) { + +module.exports = require("fs"); + +/***/ }, +/* 106 */ +/***/ function(module, exports) { + +module.exports = require("is-equal"); + +/***/ }, +/* 107 */ +/***/ function(module, exports) { + module.exports = require("mkdirp"); /***/ }, -/* 105 */, -/* 106 */ +/* 108 */ +/***/ function(module, exports) { + +module.exports = require("reflect-metadata"); + +/***/ }, +/* 109 */, +/* 110 */ /***/ function(module, exports, __webpack_require__) { "use strict"; "use strict"; -var JavaScriptObfuscator_1 = __webpack_require__(10); -if (!global._babelPolyfill) { - __webpack_require__(29); -} +var JavaScriptObfuscator_1 = __webpack_require__(11); module.exports = JavaScriptObfuscator_1.JavaScriptObfuscator; +/***/ }, +/* 111 */ +/***/ function(module, exports, __webpack_require__) { + +"use strict"; +"use strict"; + +var inversify_1 = __webpack_require__(10); +var CatchClauseObfuscator_1 = __webpack_require__(61); +var FunctionDeclarationObfuscator_1 = __webpack_require__(62); +var FunctionObfuscator_1 = __webpack_require__(63); +var LabeledStatementObfuscator_1 = __webpack_require__(64); +var LiteralObfuscator_1 = __webpack_require__(65); +var MemberExpressionObfuscator_1 = __webpack_require__(66); +var MethodDefinitionObfuscator_1 = __webpack_require__(67); +var ObjectExpressionObfuscator_1 = __webpack_require__(68); +var VariableDeclarationObfuscator_1 = __webpack_require__(69); +exports.nodeObfuscatorsModule = new inversify_1.ContainerModule(function (bind) { + bind('INodeTransformer').to(CatchClauseObfuscator_1.CatchClauseObfuscator).whenTargetNamed('CatchClauseObfuscator'); + bind('INodeTransformer').to(FunctionDeclarationObfuscator_1.FunctionDeclarationObfuscator).whenTargetNamed('FunctionDeclarationObfuscator'); + bind('INodeTransformer').to(FunctionObfuscator_1.FunctionObfuscator).whenTargetNamed('FunctionObfuscator'); + bind('INodeTransformer').to(LabeledStatementObfuscator_1.LabeledStatementObfuscator).whenTargetNamed('LabeledStatementObfuscator'); + bind('INodeTransformer').to(LiteralObfuscator_1.LiteralObfuscator).whenTargetNamed('LiteralObfuscator'); + bind('INodeTransformer').to(MemberExpressionObfuscator_1.MemberExpressionObfuscator).whenTargetNamed('MemberExpressionObfuscator'); + bind('INodeTransformer').to(MethodDefinitionObfuscator_1.MethodDefinitionObfuscator).whenTargetNamed('MethodDefinitionObfuscator'); + bind('INodeTransformer').to(ObjectExpressionObfuscator_1.ObjectExpressionObfuscator).whenTargetNamed('ObjectExpressionObfuscator'); + bind('INodeTransformer').to(VariableDeclarationObfuscator_1.VariableDeclarationObfuscator).whenTargetNamed('VariableDeclarationObfuscator'); +}); + +/***/ }, +/* 112 */ +/***/ function(module, exports, __webpack_require__) { + +"use strict"; +"use strict"; + +var inversify_1 = __webpack_require__(10); +var FunctionControlFlowTransformer_1 = __webpack_require__(57); +exports.nodeControlFlowTransformersModule = new inversify_1.ContainerModule(function (bind) { + bind('INodeTransformer').to(FunctionControlFlowTransformer_1.FunctionControlFlowTransformer).whenTargetNamed('FunctionControlFlowTransformer'); +}); + /***/ } /******/ ]); //# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/src/JavaScriptObfuscatorInternal.ts b/src/JavaScriptObfuscatorInternal.ts index 1aad7e33..c1c1ad97 100644 --- a/src/JavaScriptObfuscatorInternal.ts +++ b/src/JavaScriptObfuscatorInternal.ts @@ -7,11 +7,13 @@ import * as ESTree from 'estree'; import { Chance } from 'chance'; +import { ICustomNode } from './interfaces/custom-nodes/ICustomNode'; import { IObfuscationResult } from './interfaces/IObfuscationResult'; import { IObfuscator } from './interfaces/IObfuscator'; import { IGeneratorOutput } from './interfaces/IGeneratorOutput'; import { IInputOptions } from './interfaces/IInputOptions'; import { IOptions } from './interfaces/IOptions'; +import { IStorage } from './interfaces/IStorage'; import { ObfuscationResult } from './ObfuscationResult'; import { SourceMapCorrector } from './SourceMapCorrector'; @@ -33,6 +35,11 @@ export class JavaScriptObfuscatorInternal { loc: true }; + /** + * @types {IStorage} + */ + private readonly customNodesStorage: IStorage; + /** * @types {InversifyContainerFacade} */ @@ -54,8 +61,14 @@ export class JavaScriptObfuscatorInternal { constructor (inputOptions: IInputOptions) { this.inversifyContainerFacade = new InversifyContainerFacade(inputOptions); - this.obfuscator = this.inversifyContainerFacade.get(ServiceIdentifiers.IObfuscator); - this.options = this.inversifyContainerFacade.get(ServiceIdentifiers.IOptions); + this.obfuscator = this.inversifyContainerFacade + .get(ServiceIdentifiers.IObfuscator); + + this.customNodesStorage = this.inversifyContainerFacade + .get>(ServiceIdentifiers['IStorage']); + + this.options = this.inversifyContainerFacade + .get(ServiceIdentifiers.IOptions); } /** @@ -112,7 +125,7 @@ export class JavaScriptObfuscatorInternal { const astTree: ESTree.Program = esprima.parse(sourceCode, JavaScriptObfuscatorInternal.esprimaParams); // obfuscate AST tree - const obfuscatedAstTree: ESTree.Program = this.obfuscator.obfuscateAstTree(astTree); + const obfuscatedAstTree: ESTree.Program = this.obfuscator.obfuscateAstTree(astTree, this.customNodesStorage); // generate code const generatorOutput: IGeneratorOutput = this.generateCode(sourceCode, obfuscatedAstTree); diff --git a/src/Obfuscator.ts b/src/Obfuscator.ts index 5ab5dc3e..667689bf 100644 --- a/src/Obfuscator.ts +++ b/src/Obfuscator.ts @@ -11,25 +11,50 @@ import { IObfuscationEventEmitter } from './interfaces/IObfuscationEventEmitter' import { IObfuscator } from './interfaces/IObfuscator'; import { IOptions } from './interfaces/IOptions'; import { INodeTransformer } from './interfaces/INodeTransformer'; -import { INodeTransformersFactory } from './interfaces/INodeTransformersFactory'; import { IStackTraceAnalyzer } from './interfaces/stack-trace-analyzer/IStackTraceAnalyzer'; import { IStorage } from './interfaces/IStorage'; +import { NodeType } from './enums/NodeType'; import { ObfuscationEvents } from './enums/ObfuscationEvents'; import { VisitorDirection } from './enums/VisitorDirection'; -import { NodeControlFlowTransformersFactory } from './node-transformers/node-control-flow-transformers/factory/NodeControlFlowTransformersFactory'; -import { NodeObfuscatorsFactory } from './node-transformers/node-obfuscators/factory/NodeObfuscatorsFactory'; - import { Node } from './node/Node'; import { NodeUtils } from './node/NodeUtils'; @injectable() export class Obfuscator implements IObfuscator { /** - * @type {IStorage} + * @type {Map} */ - private readonly customNodesStorage: IStorage; + private static readonly nodeControlFlowTransformersMap: Map = new Map ([ + [NodeType.FunctionDeclaration, ['FunctionControlFlowTransformer']], + [NodeType.FunctionExpression, ['FunctionControlFlowTransformer']] + ]); + + /** + * @type {Map} + */ + private static readonly nodeObfuscatorsMap: Map = new Map ([ + [NodeType.ArrowFunctionExpression, ['FunctionObfuscator']], + [NodeType.ClassDeclaration, ['FunctionDeclarationObfuscator']], + [NodeType.CatchClause, ['CatchClauseObfuscator']], + [NodeType.FunctionDeclaration, [ + 'FunctionDeclarationObfuscator', + 'FunctionObfuscator' + ]], + [NodeType.FunctionExpression, ['FunctionObfuscator']], + [NodeType.MemberExpression, ['MemberExpressionObfuscator']], + [NodeType.MethodDefinition, ['MethodDefinitionObfuscator']], + [NodeType.ObjectExpression, ['ObjectExpressionObfuscator']], + [NodeType.VariableDeclaration, ['VariableDeclarationObfuscator']], + [NodeType.LabeledStatement, ['LabeledStatementObfuscator']], + [NodeType.Literal, ['LiteralObfuscator']] + ]); + + /** + * @type {(nodeTransformersMap: Map) => (nodeType: string) => INodeTransformer[],} + */ + private readonly nodeTransformersFactory: (nodeTransformersMap: Map) => (nodeType: string) => INodeTransformer[]; /** * @type {IObfuscationEventEmitter} @@ -47,38 +72,38 @@ export class Obfuscator implements IObfuscator { private readonly stackTraceAnalyzer: IStackTraceAnalyzer; /** - * @param obfuscationEventEmitter * @param stackTraceAnalyzer - * @param customNodesStorage + * @param obfuscationEventEmitter + * @param nodeTransformersFactory * @param options */ constructor ( - @inject(ServiceIdentifiers.IObfuscationEventEmitter) obfuscationEventEmitter: IObfuscationEventEmitter, @inject(ServiceIdentifiers.IStackTraceAnalyzer) stackTraceAnalyzer: IStackTraceAnalyzer, - @inject(ServiceIdentifiers.IStorage) customNodesStorage: IStorage, + @inject(ServiceIdentifiers.IObfuscationEventEmitter) obfuscationEventEmitter: IObfuscationEventEmitter, + @inject(ServiceIdentifiers['Factory']) nodeTransformersFactory: (nodeTransformersMap: Map) => (nodeType: string) => INodeTransformer[], @inject(ServiceIdentifiers.IOptions) options: IOptions ) { - this.obfuscationEventEmitter = obfuscationEventEmitter; this.stackTraceAnalyzer = stackTraceAnalyzer; - this.customNodesStorage = customNodesStorage; + this.obfuscationEventEmitter = obfuscationEventEmitter; + this.nodeTransformersFactory = nodeTransformersFactory; this.options = options; } /** * @param astTree + * @param customNodesStorage * @returns {ESTree.Program} */ - public obfuscateAstTree (astTree: ESTree.Program): ESTree.Program { + public obfuscateAstTree (astTree: ESTree.Program, customNodesStorage: IStorage): ESTree.Program { if (Node.isProgramNode(astTree) && !astTree.body.length) { return astTree; } - // zero pass: parentize all nodes NodeUtils.parentize(astTree); // prepare custom nodes - this.customNodesStorage.initialize(this.stackTraceAnalyzer.analyze(astTree.body)); - this.customNodesStorage + customNodesStorage.initialize(this.stackTraceAnalyzer.analyze(astTree.body)); + customNodesStorage .getStorage() .forEach((customNode: ICustomNode) => { this.obfuscationEventEmitter.once(customNode.getAppendEvent(), customNode.appendNode.bind(customNode)); @@ -88,17 +113,19 @@ export class Obfuscator implements IObfuscator { // first pass: control flow flattening if (this.options.controlFlowFlattening) { - this.transformAstTree(astTree, VisitorDirection.leave, new NodeControlFlowTransformersFactory( - this.customNodesStorage, - this.options - )); + this.transformAstTree( + astTree, + VisitorDirection.leave, + this.nodeTransformersFactory(Obfuscator.nodeControlFlowTransformersMap) + ); } // second pass: nodes obfuscation - this.transformAstTree(astTree, VisitorDirection.enter, new NodeObfuscatorsFactory( - this.customNodesStorage, - this.options - )); + this.transformAstTree( + astTree, + VisitorDirection.enter, + this.nodeTransformersFactory(Obfuscator.nodeObfuscatorsMap) + ); this.obfuscationEventEmitter.emit(ObfuscationEvents.AfterObfuscation, astTree); @@ -113,11 +140,11 @@ export class Obfuscator implements IObfuscator { private transformAstTree ( astTree: ESTree.Program, direction: TVisitorDirection, - nodeTransformersFactory: INodeTransformersFactory + nodeTransformersFactory: (nodeType: string) => INodeTransformer[] ): void { estraverse.traverse(astTree, { [direction]: (node: ESTree.Node, parentNode: ESTree.Node): void => { - const nodeTransformers: INodeTransformer[] = nodeTransformersFactory.initializeNodeTransformers(node.type); + const nodeTransformers: INodeTransformer[] = nodeTransformersFactory(node.type); nodeTransformers.forEach((nodeTransformer: INodeTransformer) => { nodeTransformer.transformNode(node, parentNode); diff --git a/src/container/InversifyContainerFacade.ts b/src/container/InversifyContainerFacade.ts index b347ddc5..fcbec869 100644 --- a/src/container/InversifyContainerFacade.ts +++ b/src/container/InversifyContainerFacade.ts @@ -1,8 +1,12 @@ import { Container, interfaces } from 'inversify'; import { ServiceIdentifiers } from './ServiceIdentifiers'; +import { nodeControlFlowTransformersModule } from './modules/NodeControlFlowTransformersModule'; +import { nodeObfuscatorsModule } from './modules/NodeObfuscatorsModule'; + import { ICustomNode } from '../interfaces/custom-nodes/ICustomNode'; import { IInputOptions } from '../interfaces/IInputOptions'; +import { INodeTransformer } from '../interfaces/INodeTransformer'; import { IObfuscationEventEmitter } from '../interfaces/IObfuscationEventEmitter'; import { IObfuscator } from '../interfaces/IObfuscator'; import { IOptions } from '../interfaces/IOptions'; @@ -21,9 +25,15 @@ export class InversifyContainerFacade { */ private container: interfaces.Container; + /** + * @param options + */ constructor (options: IInputOptions) { this.container = new Container(); + this.container.load(nodeControlFlowTransformersModule); + this.container.load(nodeObfuscatorsModule); + this.container .bind(ServiceIdentifiers.IOptions) .toDynamicValue(() => { @@ -46,9 +56,26 @@ export class InversifyContainerFacade { .inSingletonScope(); this.container - .bind>(ServiceIdentifiers.IStorage) + .bind>(ServiceIdentifiers['IStorage']) .to(CustomNodesStorage) .inSingletonScope(); + + this.container + .bind(ServiceIdentifiers['Factory']) + .toFactory((context: interfaces.Context) => { + return (nodeTransformersMap: Map) => (nodeType: string) => { + const nodeTransformers: string[] = nodeTransformersMap.get(nodeType) || []; + const instancesArray: INodeTransformer[] = []; + + nodeTransformers.forEach((transformer: string) => { + instancesArray.push( + context.container.getNamed('INodeTransformer', transformer) + ); + }); + + return instancesArray; + }; + }); } /** diff --git a/src/container/ServiceIdentifiers.ts b/src/container/ServiceIdentifiers.ts index 688a9756..4278f40d 100644 --- a/src/container/ServiceIdentifiers.ts +++ b/src/container/ServiceIdentifiers.ts @@ -1,11 +1,13 @@ import { IContainerServiceIdentifiers } from '../interfaces/IContainerServiceIdentifiers'; let ServiceIdentifiers: IContainerServiceIdentifiers = { + 'Factory': Symbol('INodeTransformersFactory'), + INodeTransformersFactory: Symbol('INodeTransformersFactory'), IObfuscationEventEmitter: Symbol('IObfuscationEventEmitter'), IObfuscator: Symbol('IObfuscator'), IOptions: Symbol('IOptions'), IStackTraceAnalyzer: Symbol('IStackTraceAnalyzer'), - IStorage: Symbol('IStorage') + 'IStorage': Symbol('IStorage') }; export { ServiceIdentifiers }; diff --git a/src/container/modules/NodeControlFlowTransformersModule.ts b/src/container/modules/NodeControlFlowTransformersModule.ts new file mode 100644 index 00000000..6e09a405 --- /dev/null +++ b/src/container/modules/NodeControlFlowTransformersModule.ts @@ -0,0 +1,11 @@ +import { ContainerModule, interfaces } from 'inversify'; + +import { INodeTransformer } from '../../interfaces/INodeTransformer'; + +import { FunctionControlFlowTransformer } from '../../node-transformers/node-control-flow-transformers/FunctionControlFlowTransformer'; + +export const nodeControlFlowTransformersModule: interfaces.ContainerModule = new ContainerModule((bind: interfaces.Bind) => { + bind('INodeTransformer') + .to(FunctionControlFlowTransformer) + .whenTargetNamed('FunctionControlFlowTransformer'); +}); diff --git a/src/container/modules/NodeObfuscatorsModule.ts b/src/container/modules/NodeObfuscatorsModule.ts new file mode 100644 index 00000000..696e32ca --- /dev/null +++ b/src/container/modules/NodeObfuscatorsModule.ts @@ -0,0 +1,51 @@ +import { ContainerModule, interfaces } from 'inversify'; + +import { INodeTransformer } from '../../interfaces/INodeTransformer'; + +import { CatchClauseObfuscator } from '../../node-transformers/node-obfuscators/CatchClauseObfuscator'; +import { FunctionDeclarationObfuscator } from '../../node-transformers/node-obfuscators/FunctionDeclarationObfuscator'; +import { FunctionObfuscator } from '../../node-transformers/node-obfuscators/FunctionObfuscator'; +import { LabeledStatementObfuscator } from '../../node-transformers/node-obfuscators/LabeledStatementObfuscator'; +import { LiteralObfuscator } from '../../node-transformers/node-obfuscators/LiteralObfuscator'; +import { MemberExpressionObfuscator } from '../../node-transformers/node-obfuscators/MemberExpressionObfuscator'; +import { MethodDefinitionObfuscator } from '../../node-transformers/node-obfuscators/MethodDefinitionObfuscator'; +import { ObjectExpressionObfuscator } from '../../node-transformers/node-obfuscators/ObjectExpressionObfuscator'; +import { VariableDeclarationObfuscator } from '../../node-transformers/node-obfuscators/VariableDeclarationObfuscator'; + +export const nodeObfuscatorsModule: interfaces.ContainerModule = new ContainerModule((bind: interfaces.Bind) => { + bind('INodeTransformer') + .to(CatchClauseObfuscator) + .whenTargetNamed('CatchClauseObfuscator'); + + bind('INodeTransformer') + .to(FunctionDeclarationObfuscator) + .whenTargetNamed('FunctionDeclarationObfuscator'); + + bind('INodeTransformer') + .to(FunctionObfuscator) + .whenTargetNamed('FunctionObfuscator'); + + bind('INodeTransformer') + .to(LabeledStatementObfuscator) + .whenTargetNamed('LabeledStatementObfuscator'); + + bind('INodeTransformer') + .to(LiteralObfuscator) + .whenTargetNamed('LiteralObfuscator'); + + bind('INodeTransformer') + .to(MemberExpressionObfuscator) + .whenTargetNamed('MemberExpressionObfuscator'); + + bind('INodeTransformer') + .to(MethodDefinitionObfuscator) + .whenTargetNamed('MethodDefinitionObfuscator'); + + bind('INodeTransformer') + .to(ObjectExpressionObfuscator) + .whenTargetNamed('ObjectExpressionObfuscator'); + + bind('INodeTransformer') + .to(VariableDeclarationObfuscator) + .whenTargetNamed('VariableDeclarationObfuscator'); +}); diff --git a/src/interfaces/IContainerServiceIdentifiers.d.ts b/src/interfaces/IContainerServiceIdentifiers.d.ts index 894c4793..6885aa91 100644 --- a/src/interfaces/IContainerServiceIdentifiers.d.ts +++ b/src/interfaces/IContainerServiceIdentifiers.d.ts @@ -1,10 +1,12 @@ import { interfaces } from 'inversify'; export interface IContainerServiceIdentifiers { + 'Factory': interfaces.ServiceIdentifier; + INodeTransformersFactory: interfaces.ServiceIdentifier; IObfuscationEventEmitter: interfaces.ServiceIdentifier; IObfuscator: interfaces.ServiceIdentifier; IOptions: interfaces.ServiceIdentifier; IStackTraceAnalyzer: interfaces.ServiceIdentifier; - IStorage: interfaces.ServiceIdentifier; + 'IStorage': interfaces.ServiceIdentifier; [key: string]: interfaces.ServiceIdentifier; } diff --git a/src/node-transformers/AbstractNodeTransformer.ts b/src/node-transformers/AbstractNodeTransformer.ts index 3951703c..dd8b8007 100644 --- a/src/node-transformers/AbstractNodeTransformer.ts +++ b/src/node-transformers/AbstractNodeTransformer.ts @@ -1,10 +1,14 @@ +import { injectable, inject } from 'inversify'; + import * as ESTree from 'estree'; import { ICustomNode } from '../interfaces/custom-nodes/ICustomNode'; import { INodeTransformer } from '../interfaces/INodeTransformer'; import { IOptions } from '../interfaces/IOptions'; import { IStorage } from '../interfaces/IStorage'; +import { ServiceIdentifiers } from '../container/ServiceIdentifiers'; +@injectable() export abstract class AbstractNodeTransformer implements INodeTransformer { /** * @type IStorage @@ -20,7 +24,10 @@ export abstract class AbstractNodeTransformer implements INodeTransformer { * @param customNodesStorage * @param options */ - constructor (customNodesStorage: IStorage, options: IOptions) { + constructor ( + @inject(ServiceIdentifiers['IStorage']) customNodesStorage: IStorage, + @inject(ServiceIdentifiers.IOptions) options: IOptions + ) { this.customNodesStorage = customNodesStorage; this.options = options; } diff --git a/src/node-transformers/AbstractNodeTransformersFactory.ts b/src/node-transformers/AbstractNodeTransformersFactory.ts deleted file mode 100644 index 94272d00..00000000 --- a/src/node-transformers/AbstractNodeTransformersFactory.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { TNodeTransformer } from '../types/TNodeTransformer'; - -import { ICustomNode } from '../interfaces/custom-nodes/ICustomNode'; -import { INodeTransformer } from '../interfaces/INodeTransformer'; -import { INodeTransformersFactory } from '../interfaces/INodeTransformersFactory'; -import { IOptions } from '../interfaces/IOptions'; -import { IStorage } from '../interfaces/IStorage'; - -export abstract class AbstractNodeTransformersFactory implements INodeTransformersFactory { - /** - * @type {Map} - */ - protected abstract readonly nodeTransformers: Map ; - - /** - * @type IStorage - */ - protected readonly customNodesStorage: IStorage; - - /** - * @type {IOptions} - */ - protected readonly options: IOptions; - - /** - * @param customNodesStorage - * @param options - */ - constructor (customNodesStorage: IStorage, options: IOptions) { - this.customNodesStorage = customNodesStorage; - this.options = options; - } - - /** - * @param nodeType - * @returns {INodeTransformer[]} - */ - public initializeNodeTransformers (nodeType: string): INodeTransformer[] { - const nodeTransformers: TNodeTransformer[] = this.nodeTransformers.get(nodeType) || []; - const instancesArray: INodeTransformer[] = []; - - nodeTransformers.forEach((transformer: TNodeTransformer) => { - instancesArray.push( - new transformer(this.customNodesStorage, this.options) - ); - }); - - return instancesArray; - } -} diff --git a/src/node-transformers/node-control-flow-transformers/FunctionControlFlowTransformer.ts b/src/node-transformers/node-control-flow-transformers/FunctionControlFlowTransformer.ts index 20e21a3e..ec3e597d 100644 --- a/src/node-transformers/node-control-flow-transformers/FunctionControlFlowTransformer.ts +++ b/src/node-transformers/node-control-flow-transformers/FunctionControlFlowTransformer.ts @@ -1,3 +1,6 @@ +import { injectable, inject } from 'inversify'; +import { ServiceIdentifiers } from '../../container/ServiceIdentifiers'; + import * as estraverse from 'estraverse'; import * as ESTree from 'estree'; @@ -19,6 +22,7 @@ import { NodeAppender } from '../../node/NodeAppender'; import { Utils } from '../../Utils'; import { NodeUtils } from '../../node/NodeUtils'; +@injectable() export class FunctionControlFlowTransformer extends AbstractNodeTransformer { /** * @type {Map } @@ -31,7 +35,10 @@ export class FunctionControlFlowTransformer extends AbstractNodeTransformer { * @param customNodesStorage * @param options */ - constructor (customNodesStorage: IStorage, options: IOptions) { + constructor ( + @inject(ServiceIdentifiers['IStorage']) customNodesStorage: IStorage, + @inject(ServiceIdentifiers.IOptions) options: IOptions + ) { super(customNodesStorage, options); } diff --git a/src/node-transformers/node-control-flow-transformers/factory/NodeControlFlowTransformersFactory.ts b/src/node-transformers/node-control-flow-transformers/factory/NodeControlFlowTransformersFactory.ts deleted file mode 100644 index 61fc9ebd..00000000 --- a/src/node-transformers/node-control-flow-transformers/factory/NodeControlFlowTransformersFactory.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { TNodeTransformer } from '../../../types/TNodeTransformer'; - -import { NodeType } from '../../../enums/NodeType'; - -import { FunctionControlFlowTransformer } from '../FunctionControlFlowTransformer'; -import { AbstractNodeTransformersFactory } from '../../AbstractNodeTransformersFactory'; - -export class NodeControlFlowTransformersFactory extends AbstractNodeTransformersFactory { - /** - * @type {Map} - */ - protected readonly nodeTransformers: Map = new Map ([ - [NodeType.FunctionDeclaration, [FunctionControlFlowTransformer]], - [NodeType.FunctionExpression, [FunctionControlFlowTransformer]] - ]); -} diff --git a/src/node-transformers/node-obfuscators/CatchClauseObfuscator.ts b/src/node-transformers/node-obfuscators/CatchClauseObfuscator.ts index 90153b87..ce7f1422 100644 --- a/src/node-transformers/node-obfuscators/CatchClauseObfuscator.ts +++ b/src/node-transformers/node-obfuscators/CatchClauseObfuscator.ts @@ -1,3 +1,6 @@ +import { injectable, inject } from 'inversify'; +import { ServiceIdentifiers } from '../../container/ServiceIdentifiers'; + import * as estraverse from 'estraverse'; import * as ESTree from 'estree'; @@ -20,6 +23,7 @@ import { NodeUtils } from '../../node/NodeUtils'; * try {} catch (_0x12d45f) { console.log(_0x12d45f); }; * */ +@injectable() export class CatchClauseObfuscator extends AbstractNodeTransformer { /** * @type {IdentifierReplacer} @@ -30,7 +34,10 @@ export class CatchClauseObfuscator extends AbstractNodeTransformer { * @param customNodesStorage * @param options */ - constructor(customNodesStorage: IStorage, options: IOptions) { + constructor( + @inject(ServiceIdentifiers['IStorage']) customNodesStorage: IStorage, + @inject(ServiceIdentifiers.IOptions) options: IOptions + ) { super(customNodesStorage, options); this.identifierReplacer = new IdentifierReplacer(this.customNodesStorage, this.options); diff --git a/src/node-transformers/node-obfuscators/FunctionDeclarationObfuscator.ts b/src/node-transformers/node-obfuscators/FunctionDeclarationObfuscator.ts index 6739605c..7412e524 100644 --- a/src/node-transformers/node-obfuscators/FunctionDeclarationObfuscator.ts +++ b/src/node-transformers/node-obfuscators/FunctionDeclarationObfuscator.ts @@ -1,3 +1,6 @@ +import { injectable, inject } from 'inversify'; +import { ServiceIdentifiers } from '../../container/ServiceIdentifiers'; + import * as estraverse from 'estraverse'; import * as ESTree from 'estree'; @@ -23,6 +26,7 @@ import { NodeUtils } from '../../node/NodeUtils'; * function _0x12d45f () { //... }; * _0x12d45f(); */ +@injectable() export class FunctionDeclarationObfuscator extends AbstractNodeTransformer { /** * @type {IdentifierReplacer} @@ -33,7 +37,10 @@ export class FunctionDeclarationObfuscator extends AbstractNodeTransformer { * @param customNodesStorage * @param options */ - constructor(customNodesStorage: IStorage, options: IOptions) { + constructor( + @inject(ServiceIdentifiers['IStorage']) customNodesStorage: IStorage, + @inject(ServiceIdentifiers.IOptions) options: IOptions + ) { super(customNodesStorage, options); this.identifierReplacer = new IdentifierReplacer(this.customNodesStorage, this.options); diff --git a/src/node-transformers/node-obfuscators/FunctionObfuscator.ts b/src/node-transformers/node-obfuscators/FunctionObfuscator.ts index 67b746d6..04ffb7c9 100644 --- a/src/node-transformers/node-obfuscators/FunctionObfuscator.ts +++ b/src/node-transformers/node-obfuscators/FunctionObfuscator.ts @@ -1,3 +1,6 @@ +import { injectable, inject } from 'inversify'; +import { ServiceIdentifiers } from '../../container/ServiceIdentifiers'; + import * as estraverse from 'estraverse'; import * as ESTree from 'estree'; @@ -20,6 +23,7 @@ import { NodeUtils } from '../../node/NodeUtils'; * function foo (_0x12d45f) { return _0x12d45f; }; * */ +@injectable() export class FunctionObfuscator extends AbstractNodeTransformer { /** * @type {IdentifierReplacer} @@ -30,7 +34,10 @@ export class FunctionObfuscator extends AbstractNodeTransformer { * @param customNodesStorage * @param options */ - constructor(customNodesStorage: IStorage, options: IOptions) { + constructor( + @inject(ServiceIdentifiers['IStorage']) customNodesStorage: IStorage, + @inject(ServiceIdentifiers.IOptions) options: IOptions + ) { super(customNodesStorage, options); this.identifierReplacer = new IdentifierReplacer(this.customNodesStorage, this.options); diff --git a/src/node-transformers/node-obfuscators/LabeledStatementObfuscator.ts b/src/node-transformers/node-obfuscators/LabeledStatementObfuscator.ts index dd683e0f..6306eb2e 100644 --- a/src/node-transformers/node-obfuscators/LabeledStatementObfuscator.ts +++ b/src/node-transformers/node-obfuscators/LabeledStatementObfuscator.ts @@ -1,3 +1,6 @@ +import { injectable, inject } from 'inversify'; +import { ServiceIdentifiers } from '../../container/ServiceIdentifiers'; + import * as estraverse from 'estraverse'; import * as ESTree from 'estree'; @@ -28,6 +31,7 @@ import { NodeUtils } from '../../node/NodeUtils'; * } * */ +@injectable() export class LabeledStatementObfuscator extends AbstractNodeTransformer { /** * @type {IdentifierReplacer} @@ -38,7 +42,10 @@ export class LabeledStatementObfuscator extends AbstractNodeTransformer { * @param customNodesStorage * @param options */ - constructor(customNodesStorage: IStorage, options: IOptions) { + constructor( + @inject(ServiceIdentifiers['IStorage']) customNodesStorage: IStorage, + @inject(ServiceIdentifiers.IOptions) options: IOptions + ) { super(customNodesStorage, options); this.identifierReplacer = new IdentifierReplacer(this.customNodesStorage, this.options); diff --git a/src/node-transformers/node-obfuscators/LiteralObfuscator.ts b/src/node-transformers/node-obfuscators/LiteralObfuscator.ts index 97a577f9..b3e5e800 100644 --- a/src/node-transformers/node-obfuscators/LiteralObfuscator.ts +++ b/src/node-transformers/node-obfuscators/LiteralObfuscator.ts @@ -1,13 +1,32 @@ +import { injectable, inject } from 'inversify'; +import { ServiceIdentifiers } from '../../container/ServiceIdentifiers'; + import * as escodegen from 'escodegen'; import * as ESTree from 'estree'; +import { ICustomNode } from '../../interfaces/custom-nodes/ICustomNode'; +import { IOptions } from '../../interfaces/IOptions'; +import { IStorage } from '../../interfaces/IStorage'; + import { AbstractNodeTransformer } from '../AbstractNodeTransformer'; import { BooleanLiteralReplacer } from './replacers/BooleanLiteralReplacer'; import { Node } from '../../node/Node'; import { NumberLiteralReplacer } from './replacers/NumberLiteralReplacer'; import { StringLiteralReplacer } from './replacers/StringLiteralReplacer'; +@injectable() export class LiteralObfuscator extends AbstractNodeTransformer { + /** + * @param customNodesStorage + * @param options + */ + constructor( + @inject(ServiceIdentifiers['IStorage']) customNodesStorage: IStorage, + @inject(ServiceIdentifiers.IOptions) options: IOptions + ) { + super(customNodesStorage, options); + } + /** * @param literalNode * @param parentNode diff --git a/src/node-transformers/node-obfuscators/MemberExpressionObfuscator.ts b/src/node-transformers/node-obfuscators/MemberExpressionObfuscator.ts index ae181f1a..e03e2f40 100644 --- a/src/node-transformers/node-obfuscators/MemberExpressionObfuscator.ts +++ b/src/node-transformers/node-obfuscators/MemberExpressionObfuscator.ts @@ -1,14 +1,33 @@ +import { injectable, inject } from 'inversify'; +import { ServiceIdentifiers } from '../../container/ServiceIdentifiers'; + import * as escodegen from 'escodegen'; import * as estraverse from 'estraverse'; import * as ESTree from 'estree'; +import { ICustomNode } from '../../interfaces/custom-nodes/ICustomNode'; +import { IOptions } from '../../interfaces/IOptions'; +import { IStorage } from '../../interfaces/IStorage'; + import { NodeType } from '../../enums/NodeType'; import { AbstractNodeTransformer } from '../AbstractNodeTransformer'; import { Node } from '../../node/Node'; import { StringLiteralReplacer } from './replacers/StringLiteralReplacer'; +@injectable() export class MemberExpressionObfuscator extends AbstractNodeTransformer { + /** + * @param customNodesStorage + * @param options + */ + constructor( + @inject(ServiceIdentifiers['IStorage']) customNodesStorage: IStorage, + @inject(ServiceIdentifiers.IOptions) options: IOptions + ) { + super(customNodesStorage, options); + } + /** * @param memberExpressionNode */ diff --git a/src/node-transformers/node-obfuscators/MethodDefinitionObfuscator.ts b/src/node-transformers/node-obfuscators/MethodDefinitionObfuscator.ts index a2aa330c..e18eccde 100644 --- a/src/node-transformers/node-obfuscators/MethodDefinitionObfuscator.ts +++ b/src/node-transformers/node-obfuscators/MethodDefinitionObfuscator.ts @@ -1,6 +1,13 @@ +import { injectable, inject } from 'inversify'; +import { ServiceIdentifiers } from '../../container/ServiceIdentifiers'; + import * as estraverse from 'estraverse'; import * as ESTree from 'estree'; +import { ICustomNode } from '../../interfaces/custom-nodes/ICustomNode'; +import { IOptions } from '../../interfaces/IOptions'; +import { IStorage } from '../../interfaces/IStorage'; + import { AbstractNodeTransformer } from '../AbstractNodeTransformer'; import { Node } from '../../node/Node'; import { Utils } from '../../Utils'; @@ -13,12 +20,24 @@ import { StringLiteralReplacer } from './replacers/StringLiteralReplacer'; * on: * [_0x9a4e('0x0')] { //... }; */ +@injectable() export class MethodDefinitionObfuscator extends AbstractNodeTransformer { /** * @type {string[]} */ private static readonly ignoredNames: string[] = ['constructor']; + /** + * @param customNodesStorage + * @param options + */ + constructor( + @inject(ServiceIdentifiers['IStorage']) customNodesStorage: IStorage, + @inject(ServiceIdentifiers.IOptions) options: IOptions + ) { + super(customNodesStorage, options); + } + /** * @param methodDefinitionNode * @param parentNode diff --git a/src/node-transformers/node-obfuscators/ObjectExpressionObfuscator.ts b/src/node-transformers/node-obfuscators/ObjectExpressionObfuscator.ts index 2ea7beef..9e332410 100644 --- a/src/node-transformers/node-obfuscators/ObjectExpressionObfuscator.ts +++ b/src/node-transformers/node-obfuscators/ObjectExpressionObfuscator.ts @@ -1,7 +1,14 @@ +import { injectable, inject } from 'inversify'; +import { ServiceIdentifiers } from '../../container/ServiceIdentifiers'; + import * as escodegen from 'escodegen'; import * as estraverse from 'estraverse'; import * as ESTree from 'estree'; +import { ICustomNode } from '../../interfaces/custom-nodes/ICustomNode'; +import { IOptions } from '../../interfaces/IOptions'; +import { IStorage } from '../../interfaces/IStorage'; + import { NodeType } from '../../enums/NodeType'; import { AbstractNodeTransformer } from '../AbstractNodeTransformer'; @@ -18,7 +25,19 @@ import { Utils } from '../../Utils'; * on: * var object = { '\u0050\u0053\u0045\u0055\u0044\u004f': 1 }; */ +@injectable() export class ObjectExpressionObfuscator extends AbstractNodeTransformer { + /** + * @param customNodesStorage + * @param options + */ + constructor( + @inject(ServiceIdentifiers['IStorage']) customNodesStorage: IStorage, + @inject(ServiceIdentifiers.IOptions) options: IOptions + ) { + super(customNodesStorage, options); + } + /** * @param objectExpressionNode */ diff --git a/src/node-transformers/node-obfuscators/VariableDeclarationObfuscator.ts b/src/node-transformers/node-obfuscators/VariableDeclarationObfuscator.ts index 4146895b..be886ba1 100644 --- a/src/node-transformers/node-obfuscators/VariableDeclarationObfuscator.ts +++ b/src/node-transformers/node-obfuscators/VariableDeclarationObfuscator.ts @@ -1,3 +1,6 @@ +import { injectable, inject } from 'inversify'; +import { ServiceIdentifiers } from '../../container/ServiceIdentifiers'; + import * as estraverse from 'estraverse'; import * as ESTree from 'estree'; @@ -24,6 +27,7 @@ import { NodeUtils } from '../../node/NodeUtils'; * _0x12d45f++; * */ +@injectable() export class VariableDeclarationObfuscator extends AbstractNodeTransformer { /** * @type {IdentifierReplacer} @@ -34,7 +38,10 @@ export class VariableDeclarationObfuscator extends AbstractNodeTransformer { * @param customNodesStorage * @param options */ - constructor(customNodesStorage: IStorage, options: IOptions) { + constructor( + @inject(ServiceIdentifiers['IStorage']) customNodesStorage: IStorage, + @inject(ServiceIdentifiers.IOptions) options: IOptions + ) { super(customNodesStorage, options); this.identifierReplacer = new IdentifierReplacer(this.customNodesStorage, this.options); diff --git a/src/node-transformers/node-obfuscators/factory/NodeObfuscatorsFactory.ts b/src/node-transformers/node-obfuscators/factory/NodeObfuscatorsFactory.ts deleted file mode 100644 index 60088462..00000000 --- a/src/node-transformers/node-obfuscators/factory/NodeObfuscatorsFactory.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { TNodeTransformer } from '../../../types/TNodeTransformer'; - -import { NodeType } from '../../../enums/NodeType'; - -import { CatchClauseObfuscator } from '../CatchClauseObfuscator'; -import { FunctionDeclarationObfuscator } from '../FunctionDeclarationObfuscator'; -import { FunctionObfuscator } from '../FunctionObfuscator'; -import { LabeledStatementObfuscator } from '../LabeledStatementObfuscator'; -import { LiteralObfuscator } from '../LiteralObfuscator'; -import { MemberExpressionObfuscator } from '../MemberExpressionObfuscator'; -import { MethodDefinitionObfuscator } from '../MethodDefinitionObfuscator'; -import { ObjectExpressionObfuscator } from '../ObjectExpressionObfuscator'; -import { VariableDeclarationObfuscator } from '../VariableDeclarationObfuscator'; -import { AbstractNodeTransformersFactory } from '../../AbstractNodeTransformersFactory'; - -export class NodeObfuscatorsFactory extends AbstractNodeTransformersFactory { - /** - * @type {Map} - */ - protected readonly nodeTransformers: Map = new Map ([ - [NodeType.ArrowFunctionExpression, [FunctionObfuscator]], - [NodeType.ClassDeclaration, [FunctionDeclarationObfuscator]], - [NodeType.CatchClause, [CatchClauseObfuscator]], - [NodeType.FunctionDeclaration, [ - FunctionDeclarationObfuscator, - FunctionObfuscator - ]], - [NodeType.FunctionExpression, [FunctionObfuscator]], - [NodeType.MemberExpression, [MemberExpressionObfuscator]], - [NodeType.MethodDefinition, [MethodDefinitionObfuscator]], - [NodeType.ObjectExpression, [ObjectExpressionObfuscator]], - [NodeType.VariableDeclaration, [VariableDeclarationObfuscator]], - [NodeType.LabeledStatement, [LabeledStatementObfuscator]], - [NodeType.Literal, [LiteralObfuscator]] - ]); -} diff --git a/test/index.spec.ts b/test/index.spec.ts index 5a2e2271..57c51fea 100644 --- a/test/index.spec.ts +++ b/test/index.spec.ts @@ -1,7 +1,7 @@ import { BabelPolyfill } from './polyfills/BabelPolyfill'; +import 'reflect-metadata'; require('source-map-support').install(); - BabelPolyfill.append(); /**