From 2dff52482dd2deb03c35938910df3a3c91529429 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Fri, 6 Jan 2017 23:54:24 +0300 Subject: [PATCH 01/28] 0.9.0-dev.8 --- dist/index.js | 837 +++++++++++++++++++++++++------------------------- 1 file changed, 418 insertions(+), 419 deletions(-) diff --git a/dist/index.js b/dist/index.js index 51d19050..4944d15e 100644 --- a/dist/index.js +++ b/dist/index.js @@ -90,7 +90,7 @@ module.exports = /******/ __webpack_require__.p = ""; /******/ /******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 150); +/******/ return __webpack_require__(__webpack_require__.s = 149); /******/ }) /************************************************************************/ /******/ ([ @@ -196,7 +196,7 @@ var _createClass3 = _interopRequireDefault(_createClass2); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -var escodegen = __webpack_require__(27); +var escodegen = __webpack_require__(28); var esprima = __webpack_require__(50); var estraverse = __webpack_require__(17); var NodeType_1 = __webpack_require__(15); @@ -398,7 +398,7 @@ var _createClass3 = _interopRequireDefault(_createClass2); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var chance_1 = __webpack_require__(49); -var Utils_1 = __webpack_require__(13); +var Utils_1 = __webpack_require__(14); var RandomGeneratorUtils = function () { function RandomGeneratorUtils() { @@ -693,6 +693,56 @@ exports.Node = Node; "use strict"; +var _classCallCheck2 = __webpack_require__(0); + +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = __webpack_require__(1); + +var _createClass3 = _interopRequireDefault(_createClass2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var tslib_1 = __webpack_require__(3); +var inversify_1 = __webpack_require__(2); +var ServiceIdentifiers_1 = __webpack_require__(4); +var NodeUtils_1 = __webpack_require__(8); +var AbstractCustomNode = function () { + function AbstractCustomNode(options) { + (0, _classCallCheck3.default)(this, AbstractCustomNode); + + this.options = options; + } + + (0, _createClass3.default)(AbstractCustomNode, [{ + key: "getCode", + value: function getCode() { + if (!this.cachedCode) { + this.cachedCode = NodeUtils_1.NodeUtils.convertStructureToCode(this.getNode()); + } + return this.cachedCode; + } + }, { + key: "getNode", + value: function getNode() { + if (!this.cachedNode) { + this.cachedNode = this.getNodeStructure(); + } + return this.cachedNode; + } + }]); + return AbstractCustomNode; +}(); +AbstractCustomNode = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Object])], AbstractCustomNode); +exports.AbstractCustomNode = AbstractCustomNode; + +/***/ }, +/* 14 */ +/***/ function(module, exports, __webpack_require__) { + +"use strict"; + + var _map = __webpack_require__(11); var _map2 = _interopRequireDefault(_map); @@ -709,7 +759,7 @@ var _getIterator2 = __webpack_require__(21); var _getIterator3 = _interopRequireDefault(_getIterator2); -var _toConsumableArray2 = __webpack_require__(25); +var _toConsumableArray2 = __webpack_require__(26); var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2); @@ -880,56 +930,6 @@ Utils.hexadecimalPrefix = '0x'; Utils.stringToUnicodeEscapeSequenceCache = new _map2.default(); exports.Utils = Utils; -/***/ }, -/* 14 */ -/***/ function(module, exports, __webpack_require__) { - -"use strict"; - - -var _classCallCheck2 = __webpack_require__(0); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _createClass2 = __webpack_require__(1); - -var _createClass3 = _interopRequireDefault(_createClass2); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var tslib_1 = __webpack_require__(3); -var inversify_1 = __webpack_require__(2); -var ServiceIdentifiers_1 = __webpack_require__(4); -var NodeUtils_1 = __webpack_require__(8); -var AbstractCustomNode = function () { - function AbstractCustomNode(options) { - (0, _classCallCheck3.default)(this, AbstractCustomNode); - - this.options = options; - } - - (0, _createClass3.default)(AbstractCustomNode, [{ - key: "getCode", - value: function getCode() { - if (!this.cachedCode) { - this.cachedCode = NodeUtils_1.NodeUtils.convertStructureToCode(this.getNode()); - } - return this.cachedCode; - } - }, { - key: "getNode", - value: function getNode() { - if (!this.cachedNode) { - this.cachedNode = this.getNodeStructure(); - } - return this.cachedNode; - } - }]); - return AbstractCustomNode; -}(); -AbstractCustomNode = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Object])], AbstractCustomNode); -exports.AbstractCustomNode = AbstractCustomNode; - /***/ }, /* 15 */ /***/ function(module, exports, __webpack_require__) { @@ -937,7 +937,7 @@ exports.AbstractCustomNode = AbstractCustomNode; "use strict"; -var Utils_1 = __webpack_require__(13); +var Utils_1 = __webpack_require__(14); exports.NodeType = Utils_1.Utils.strEnumify({ ArrayExpression: 'ArrayExpression', ArrowFunctionExpression: 'ArrowFunctionExpression', @@ -1089,298 +1089,7 @@ var _createClass3 = _interopRequireDefault(_createClass2); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -__webpack_require__(148); -if (!global._babelPolyfill && parseInt(process.version.split('.')[0], 10) < 4) { - __webpack_require__(134); -} -var ServiceIdentifiers_1 = __webpack_require__(4); -var chance_1 = __webpack_require__(49); -var InversifyContainerFacade_1 = __webpack_require__(58); -var JavaScriptObfuscatorCLI_1 = __webpack_require__(57); -var RandomGeneratorUtils_1 = __webpack_require__(9); - -var JavaScriptObfuscator = function () { - function JavaScriptObfuscator() { - (0, _classCallCheck3.default)(this, JavaScriptObfuscator); - } - - (0, _createClass3.default)(JavaScriptObfuscator, null, [{ - key: "obfuscate", - value: function obfuscate(sourceCode) { - var inputOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - var inversifyContainerFacade = new InversifyContainerFacade_1.InversifyContainerFacade(inputOptions); - var options = inversifyContainerFacade.get(ServiceIdentifiers_1.ServiceIdentifiers.IOptions); - if (options.seed !== 0) { - RandomGeneratorUtils_1.RandomGeneratorUtils.setRandomGenerator(new chance_1.Chance(options.seed)); - } - var javaScriptObfuscator = inversifyContainerFacade.get(ServiceIdentifiers_1.ServiceIdentifiers.IJavaScriptObfuscator); - return javaScriptObfuscator.obfuscate(sourceCode); - } - }, { - key: "runCLI", - value: function runCLI(argv) { - new JavaScriptObfuscatorCLI_1.JavaScriptObfuscatorCLI(argv).run(); - } - }]); - return JavaScriptObfuscator; -}(); - -exports.JavaScriptObfuscator = JavaScriptObfuscator; - -/***/ }, -/* 24 */ -/***/ function(module, exports, __webpack_require__) { - -"use strict"; - - -var _getIterator2 = __webpack_require__(21); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -var _toConsumableArray2 = __webpack_require__(25); - -var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2); - -var _classCallCheck2 = __webpack_require__(0); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _createClass2 = __webpack_require__(1); - -var _createClass3 = _interopRequireDefault(_createClass2); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var RandomGeneratorUtils_1 = __webpack_require__(9); - -var NodeAppender = function () { - function NodeAppender() { - (0, _classCallCheck3.default)(this, NodeAppender); - } - - (0, _createClass3.default)(NodeAppender, null, [{ - key: "appendNode", - value: function appendNode(blockScopeNode, nodeBodyStatements) { - if (!NodeAppender.validateBodyStatements(nodeBodyStatements)) { - nodeBodyStatements = []; - } - nodeBodyStatements = NodeAppender.parentizeBodyStatementsBeforeAppend(blockScopeNode, nodeBodyStatements); - blockScopeNode.body = [].concat((0, _toConsumableArray3.default)(blockScopeNode.body), (0, _toConsumableArray3.default)(nodeBodyStatements)); - } - }, { - key: "appendNodeToOptimalBlockScope", - value: function appendNodeToOptimalBlockScope(blockScopeStackTraceData, blockScopeNode, nodeBodyStatements) { - var index = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0; - - var targetBlockScope = void 0; - if (!blockScopeStackTraceData.length) { - targetBlockScope = blockScopeNode; - } else { - targetBlockScope = NodeAppender.getOptimalBlockScope(blockScopeStackTraceData, index); - } - NodeAppender.prependNode(targetBlockScope, nodeBodyStatements); - } - }, { - key: "getOptimalBlockScope", - value: function getOptimalBlockScope(blockScopeTraceData, index) { - var deep = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : Infinity; - - var firstCall = blockScopeTraceData[index]; - if (deep <= 0) { - throw new Error("Invalid `deep` argument value. Value should be bigger then 0."); - } - if (deep > 1 && firstCall.stackTrace.length) { - return NodeAppender.getOptimalBlockScope(firstCall.stackTrace, 0, --deep); - } else { - return firstCall.callee; - } - } - }, { - key: "getRandomStackTraceIndex", - value: function getRandomStackTraceIndex(stackTraceRootLength) { - return RandomGeneratorUtils_1.RandomGeneratorUtils.getRandomInteger(0, Math.max(0, Math.round(stackTraceRootLength - 1))); - } - }, { - key: "insertNodeAtIndex", - value: function insertNodeAtIndex(blockScopeNode, nodeBodyStatements, index) { - if (!NodeAppender.validateBodyStatements(nodeBodyStatements)) { - nodeBodyStatements = []; - } - nodeBodyStatements = NodeAppender.parentizeBodyStatementsBeforeAppend(blockScopeNode, nodeBodyStatements); - blockScopeNode.body = [].concat((0, _toConsumableArray3.default)(blockScopeNode.body.slice(0, index)), (0, _toConsumableArray3.default)(nodeBodyStatements), (0, _toConsumableArray3.default)(blockScopeNode.body.slice(index))); - } - }, { - key: "prependNode", - value: function prependNode(blockScopeNode, nodeBodyStatements) { - if (!NodeAppender.validateBodyStatements(nodeBodyStatements)) { - nodeBodyStatements = []; - } - nodeBodyStatements = NodeAppender.parentizeBodyStatementsBeforeAppend(blockScopeNode, nodeBodyStatements); - blockScopeNode.body = [].concat((0, _toConsumableArray3.default)(nodeBodyStatements), (0, _toConsumableArray3.default)(blockScopeNode.body)); - } - }, { - key: "parentizeBodyStatementsBeforeAppend", - value: function parentizeBodyStatementsBeforeAppend(blockScopeNode, nodeBodyStatements) { - var _iteratorNormalCompletion = true; - var _didIteratorError = false; - var _iteratorError = undefined; - - try { - for (var _iterator = (0, _getIterator3.default)(nodeBodyStatements), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { - var statement = _step.value; - - statement.parentNode = blockScopeNode; - } - } catch (err) { - _didIteratorError = true; - _iteratorError = err; - } finally { - try { - if (!_iteratorNormalCompletion && _iterator.return) { - _iterator.return(); - } - } finally { - if (_didIteratorError) { - throw _iteratorError; - } - } - } - - return nodeBodyStatements; - } - }, { - key: "validateBodyStatements", - value: function validateBodyStatements(nodeBodyStatements) { - return nodeBodyStatements.every(function (statementNode) { - return !!statementNode && statementNode.hasOwnProperty('type'); - }); - } - }]); - return NodeAppender; -}(); - -exports.NodeAppender = NodeAppender; - -/***/ }, -/* 25 */ -/***/ function(module, exports) { - -module.exports = require("babel-runtime/helpers/toConsumableArray"); - -/***/ }, -/* 26 */ -/***/ function(module, exports, __webpack_require__) { - -"use strict"; - - -var _classCallCheck2 = __webpack_require__(0); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _createClass2 = __webpack_require__(1); - -var _createClass3 = _interopRequireDefault(_createClass2); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var tslib_1 = __webpack_require__(3); -var inversify_1 = __webpack_require__(2); -var ServiceIdentifiers_1 = __webpack_require__(4); -var AbstractCustomNodeGroup = function () { - function AbstractCustomNodeGroup(options) { - (0, _classCallCheck3.default)(this, AbstractCustomNodeGroup); - - this.options = options; - } - - (0, _createClass3.default)(AbstractCustomNodeGroup, [{ - key: "getAppendEvent", - value: function getAppendEvent() { - return this.appendEvent; - } - }, { - key: "getCustomNodes", - value: function getCustomNodes() { - return this.customNodes; - } - }, { - key: "appendCustomNodeIfExist", - value: function appendCustomNodeIfExist(customNodeName, callback) { - var customNode = this.customNodes.get(customNodeName); - if (!customNode) { - return; - } - callback(customNode); - } - }]); - return AbstractCustomNodeGroup; -}(); -AbstractCustomNodeGroup = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Object])], AbstractCustomNodeGroup); -exports.AbstractCustomNodeGroup = AbstractCustomNodeGroup; - -/***/ }, -/* 27 */ -/***/ function(module, exports) { - -module.exports = require("escodegen"); - -/***/ }, -/* 28 */ -/***/ function(module, exports, __webpack_require__) { - -"use strict"; - - -exports.SourceMapMode = { - Inline: 'inline', - Separate: 'separate' -}; - -/***/ }, -/* 29 */ -/***/ function(module, exports, __webpack_require__) { - -"use strict"; - - -var _classCallCheck2 = __webpack_require__(0); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var tslib_1 = __webpack_require__(3); -var inversify_1 = __webpack_require__(2); -var ServiceIdentifiers_1 = __webpack_require__(4); -var AbstractReplacer = function AbstractReplacer(options) { - (0, _classCallCheck3.default)(this, AbstractReplacer); - - this.options = options; -}; -AbstractReplacer = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Object])], AbstractReplacer); -exports.AbstractReplacer = AbstractReplacer; - -/***/ }, -/* 30 */ -/***/ function(module, exports, __webpack_require__) { - -"use strict"; - - -var _classCallCheck2 = __webpack_require__(0); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _createClass2 = __webpack_require__(1); - -var _createClass3 = _interopRequireDefault(_createClass2); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var escodegen = __webpack_require__(27); +var escodegen = __webpack_require__(28); var NodeType_1 = __webpack_require__(15); var Nodes = function () { @@ -1697,6 +1406,297 @@ var Nodes = function () { exports.Nodes = Nodes; +/***/ }, +/* 24 */ +/***/ function(module, exports, __webpack_require__) { + +"use strict"; + + +var _classCallCheck2 = __webpack_require__(0); + +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = __webpack_require__(1); + +var _createClass3 = _interopRequireDefault(_createClass2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +__webpack_require__(148); +if (!global._babelPolyfill && parseInt(process.version.split('.')[0], 10) < 4) { + __webpack_require__(134); +} +var ServiceIdentifiers_1 = __webpack_require__(4); +var chance_1 = __webpack_require__(49); +var InversifyContainerFacade_1 = __webpack_require__(58); +var JavaScriptObfuscatorCLI_1 = __webpack_require__(57); +var RandomGeneratorUtils_1 = __webpack_require__(9); + +var JavaScriptObfuscator = function () { + function JavaScriptObfuscator() { + (0, _classCallCheck3.default)(this, JavaScriptObfuscator); + } + + (0, _createClass3.default)(JavaScriptObfuscator, null, [{ + key: "obfuscate", + value: function obfuscate(sourceCode) { + var inputOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + var inversifyContainerFacade = new InversifyContainerFacade_1.InversifyContainerFacade(inputOptions); + var options = inversifyContainerFacade.get(ServiceIdentifiers_1.ServiceIdentifiers.IOptions); + if (options.seed !== 0) { + RandomGeneratorUtils_1.RandomGeneratorUtils.setRandomGenerator(new chance_1.Chance(options.seed)); + } + var javaScriptObfuscator = inversifyContainerFacade.get(ServiceIdentifiers_1.ServiceIdentifiers.IJavaScriptObfuscator); + return javaScriptObfuscator.obfuscate(sourceCode); + } + }, { + key: "runCLI", + value: function runCLI(argv) { + new JavaScriptObfuscatorCLI_1.JavaScriptObfuscatorCLI(argv).run(); + } + }]); + return JavaScriptObfuscator; +}(); + +exports.JavaScriptObfuscator = JavaScriptObfuscator; + +/***/ }, +/* 25 */ +/***/ function(module, exports, __webpack_require__) { + +"use strict"; + + +var _getIterator2 = __webpack_require__(21); + +var _getIterator3 = _interopRequireDefault(_getIterator2); + +var _toConsumableArray2 = __webpack_require__(26); + +var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2); + +var _classCallCheck2 = __webpack_require__(0); + +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = __webpack_require__(1); + +var _createClass3 = _interopRequireDefault(_createClass2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var RandomGeneratorUtils_1 = __webpack_require__(9); + +var NodeAppender = function () { + function NodeAppender() { + (0, _classCallCheck3.default)(this, NodeAppender); + } + + (0, _createClass3.default)(NodeAppender, null, [{ + key: "appendNode", + value: function appendNode(blockScopeNode, nodeBodyStatements) { + if (!NodeAppender.validateBodyStatements(nodeBodyStatements)) { + nodeBodyStatements = []; + } + nodeBodyStatements = NodeAppender.parentizeBodyStatementsBeforeAppend(blockScopeNode, nodeBodyStatements); + blockScopeNode.body = [].concat((0, _toConsumableArray3.default)(blockScopeNode.body), (0, _toConsumableArray3.default)(nodeBodyStatements)); + } + }, { + key: "appendNodeToOptimalBlockScope", + value: function appendNodeToOptimalBlockScope(blockScopeStackTraceData, blockScopeNode, nodeBodyStatements) { + var index = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0; + + var targetBlockScope = void 0; + if (!blockScopeStackTraceData.length) { + targetBlockScope = blockScopeNode; + } else { + targetBlockScope = NodeAppender.getOptimalBlockScope(blockScopeStackTraceData, index); + } + NodeAppender.prependNode(targetBlockScope, nodeBodyStatements); + } + }, { + key: "getOptimalBlockScope", + value: function getOptimalBlockScope(blockScopeTraceData, index) { + var deep = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : Infinity; + + var firstCall = blockScopeTraceData[index]; + if (deep <= 0) { + throw new Error("Invalid `deep` argument value. Value should be bigger then 0."); + } + if (deep > 1 && firstCall.stackTrace.length) { + return NodeAppender.getOptimalBlockScope(firstCall.stackTrace, 0, --deep); + } else { + return firstCall.callee; + } + } + }, { + key: "getRandomStackTraceIndex", + value: function getRandomStackTraceIndex(stackTraceRootLength) { + return RandomGeneratorUtils_1.RandomGeneratorUtils.getRandomInteger(0, Math.max(0, Math.round(stackTraceRootLength - 1))); + } + }, { + key: "insertNodeAtIndex", + value: function insertNodeAtIndex(blockScopeNode, nodeBodyStatements, index) { + if (!NodeAppender.validateBodyStatements(nodeBodyStatements)) { + nodeBodyStatements = []; + } + nodeBodyStatements = NodeAppender.parentizeBodyStatementsBeforeAppend(blockScopeNode, nodeBodyStatements); + blockScopeNode.body = [].concat((0, _toConsumableArray3.default)(blockScopeNode.body.slice(0, index)), (0, _toConsumableArray3.default)(nodeBodyStatements), (0, _toConsumableArray3.default)(blockScopeNode.body.slice(index))); + } + }, { + key: "prependNode", + value: function prependNode(blockScopeNode, nodeBodyStatements) { + if (!NodeAppender.validateBodyStatements(nodeBodyStatements)) { + nodeBodyStatements = []; + } + nodeBodyStatements = NodeAppender.parentizeBodyStatementsBeforeAppend(blockScopeNode, nodeBodyStatements); + blockScopeNode.body = [].concat((0, _toConsumableArray3.default)(nodeBodyStatements), (0, _toConsumableArray3.default)(blockScopeNode.body)); + } + }, { + key: "parentizeBodyStatementsBeforeAppend", + value: function parentizeBodyStatementsBeforeAppend(blockScopeNode, nodeBodyStatements) { + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; + + try { + for (var _iterator = (0, _getIterator3.default)(nodeBodyStatements), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var statement = _step.value; + + statement.parentNode = blockScopeNode; + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator.return) { + _iterator.return(); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } + } + + return nodeBodyStatements; + } + }, { + key: "validateBodyStatements", + value: function validateBodyStatements(nodeBodyStatements) { + return nodeBodyStatements.every(function (statementNode) { + return !!statementNode && statementNode.hasOwnProperty('type'); + }); + } + }]); + return NodeAppender; +}(); + +exports.NodeAppender = NodeAppender; + +/***/ }, +/* 26 */ +/***/ function(module, exports) { + +module.exports = require("babel-runtime/helpers/toConsumableArray"); + +/***/ }, +/* 27 */ +/***/ function(module, exports, __webpack_require__) { + +"use strict"; + + +var _classCallCheck2 = __webpack_require__(0); + +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = __webpack_require__(1); + +var _createClass3 = _interopRequireDefault(_createClass2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var tslib_1 = __webpack_require__(3); +var inversify_1 = __webpack_require__(2); +var ServiceIdentifiers_1 = __webpack_require__(4); +var AbstractCustomNodeGroup = function () { + function AbstractCustomNodeGroup(options) { + (0, _classCallCheck3.default)(this, AbstractCustomNodeGroup); + + this.options = options; + } + + (0, _createClass3.default)(AbstractCustomNodeGroup, [{ + key: "getAppendEvent", + value: function getAppendEvent() { + return this.appendEvent; + } + }, { + key: "getCustomNodes", + value: function getCustomNodes() { + return this.customNodes; + } + }, { + key: "appendCustomNodeIfExist", + value: function appendCustomNodeIfExist(customNodeName, callback) { + var customNode = this.customNodes.get(customNodeName); + if (!customNode) { + return; + } + callback(customNode); + } + }]); + return AbstractCustomNodeGroup; +}(); +AbstractCustomNodeGroup = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Object])], AbstractCustomNodeGroup); +exports.AbstractCustomNodeGroup = AbstractCustomNodeGroup; + +/***/ }, +/* 28 */ +/***/ function(module, exports) { + +module.exports = require("escodegen"); + +/***/ }, +/* 29 */ +/***/ function(module, exports, __webpack_require__) { + +"use strict"; + + +exports.SourceMapMode = { + Inline: 'inline', + Separate: 'separate' +}; + +/***/ }, +/* 30 */ +/***/ function(module, exports, __webpack_require__) { + +"use strict"; + + +var _classCallCheck2 = __webpack_require__(0); + +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var tslib_1 = __webpack_require__(3); +var inversify_1 = __webpack_require__(2); +var ServiceIdentifiers_1 = __webpack_require__(4); +var AbstractReplacer = function AbstractReplacer(options) { + (0, _classCallCheck3.default)(this, AbstractReplacer); + + this.options = options; +}; +AbstractReplacer = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Object])], AbstractReplacer); +exports.AbstractReplacer = AbstractReplacer; + /***/ }, /* 31 */ /***/ function(module, exports, __webpack_require__) { @@ -1710,7 +1710,7 @@ var _freeze2 = _interopRequireDefault(_freeze); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -var SourceMapMode_1 = __webpack_require__(28); +var SourceMapMode_1 = __webpack_require__(29); exports.NO_CUSTOM_NODES_PRESET = (0, _freeze2.default)({ compact: true, controlFlowFlattening: false, @@ -1784,7 +1784,7 @@ var _createClass3 = _interopRequireDefault(_createClass2); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var RandomGeneratorUtils_1 = __webpack_require__(9); -var Utils_1 = __webpack_require__(13); +var Utils_1 = __webpack_require__(14); var CryptUtils = function () { function CryptUtils() { @@ -2162,7 +2162,7 @@ var _freeze2 = _interopRequireDefault(_freeze); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -var SourceMapMode_1 = __webpack_require__(28); +var SourceMapMode_1 = __webpack_require__(29); exports.DEFAULT_PRESET = (0, _freeze2.default)({ compact: true, controlFlowFlattening: false, @@ -2192,7 +2192,7 @@ exports.DEFAULT_PRESET = (0, _freeze2.default)({ "use strict"; -var _toConsumableArray2 = __webpack_require__(25); +var _toConsumableArray2 = __webpack_require__(26); var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2); @@ -2214,7 +2214,7 @@ var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); var Initializable_1 = __webpack_require__(10); var RandomGeneratorUtils_1 = __webpack_require__(9); -var Utils_1 = __webpack_require__(13); +var Utils_1 = __webpack_require__(14); var MapStorage = function () { function MapStorage() { (0, _classCallCheck3.default)(this, MapStorage); @@ -2341,7 +2341,7 @@ var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); var esprima = __webpack_require__(50); -var escodegen = __webpack_require__(27); +var escodegen = __webpack_require__(28); var JavaScriptObfuscatorInternal = JavaScriptObfuscatorInternal_1 = function () { function JavaScriptObfuscatorInternal(obfuscator, sourceMapCorrector, options) { (0, _classCallCheck3.default)(this, JavaScriptObfuscatorInternal); @@ -2553,7 +2553,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); -var SourceMapMode_1 = __webpack_require__(28); +var SourceMapMode_1 = __webpack_require__(29); var CryptUtils_1 = __webpack_require__(34); var SourceMapCorrector = function () { function SourceMapCorrector(obfuscationResultFactory, options) { @@ -2716,11 +2716,11 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de var tslib_1 = __webpack_require__(3); var commander = __webpack_require__(143); var path = __webpack_require__(51); -var SourceMapMode_1 = __webpack_require__(28); +var SourceMapMode_1 = __webpack_require__(29); var StringArrayEncoding_1 = __webpack_require__(32); var Default_1 = __webpack_require__(43); var CLIUtils_1 = __webpack_require__(56); -var JavaScriptObfuscator_1 = __webpack_require__(23); +var JavaScriptObfuscator_1 = __webpack_require__(24); var JavaScriptObfuscatorCLI = function () { function JavaScriptObfuscatorCLI(argv) { @@ -3241,7 +3241,7 @@ var ServiceIdentifiers_1 = __webpack_require__(4); var format = __webpack_require__(19); var ConsoleOutputDisableExpressionTemplate_1 = __webpack_require__(121); var Initializable_1 = __webpack_require__(10); -var AbstractCustomNode_1 = __webpack_require__(14); +var AbstractCustomNode_1 = __webpack_require__(13); var NodeUtils_1 = __webpack_require__(8); var RandomGeneratorUtils_1 = __webpack_require__(9); var ConsoleOutputDisableExpressionNode = function (_AbstractCustomNode_) { @@ -3316,8 +3316,8 @@ var ServiceIdentifiers_1 = __webpack_require__(4); var Initializable_1 = __webpack_require__(10); var CustomNodes_1 = __webpack_require__(16); var ObfuscationEvents_1 = __webpack_require__(22); -var AbstractCustomNodeGroup_1 = __webpack_require__(26); -var NodeAppender_1 = __webpack_require__(24); +var AbstractCustomNodeGroup_1 = __webpack_require__(27); +var NodeAppender_1 = __webpack_require__(25); var RandomGeneratorUtils_1 = __webpack_require__(9); var ConsoleOutputCustomNodeGroup = function (_AbstractCustomNodeGr) { (0, _inherits3.default)(ConsoleOutputCustomNodeGroup, _AbstractCustomNodeGr); @@ -3405,8 +3405,8 @@ var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); var Initializable_1 = __webpack_require__(10); -var AbstractCustomNode_1 = __webpack_require__(14); -var Nodes_1 = __webpack_require__(30); +var AbstractCustomNode_1 = __webpack_require__(13); +var Nodes_1 = __webpack_require__(23); var NodeUtils_1 = __webpack_require__(8); var RandomGeneratorUtils_1 = __webpack_require__(9); var BinaryExpressionFunctionNode = function (_AbstractCustomNode_) { @@ -3469,8 +3469,8 @@ var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); var Initializable_1 = __webpack_require__(10); -var AbstractCustomNode_1 = __webpack_require__(14); -var Nodes_1 = __webpack_require__(30); +var AbstractCustomNode_1 = __webpack_require__(13); +var Nodes_1 = __webpack_require__(23); var NodeUtils_1 = __webpack_require__(8); var RandomGeneratorUtils_1 = __webpack_require__(9); var BlockStatementControlFlowFlatteningNode = function (_AbstractCustomNode_) { @@ -3543,8 +3543,8 @@ var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); var Initializable_1 = __webpack_require__(10); -var AbstractCustomNode_1 = __webpack_require__(14); -var Nodes_1 = __webpack_require__(30); +var AbstractCustomNode_1 = __webpack_require__(13); +var Nodes_1 = __webpack_require__(23); var NodeUtils_1 = __webpack_require__(8); var RandomGeneratorUtils_1 = __webpack_require__(9); var CallExpressionFunctionNode = function (_AbstractCustomNode_) { @@ -3613,8 +3613,8 @@ var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); var Initializable_1 = __webpack_require__(10); -var AbstractCustomNode_1 = __webpack_require__(14); -var Nodes_1 = __webpack_require__(30); +var AbstractCustomNode_1 = __webpack_require__(13); +var Nodes_1 = __webpack_require__(23); var RandomGeneratorUtils_1 = __webpack_require__(9); var NodeUtils_1 = __webpack_require__(8); var LogicalExpressionFunctionNode = function (_AbstractCustomNode_) { @@ -3651,7 +3651,7 @@ exports.LogicalExpressionFunctionNode = LogicalExpressionFunctionNode; "use strict"; -var _toConsumableArray2 = __webpack_require__(25); +var _toConsumableArray2 = __webpack_require__(26); var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2); @@ -3681,8 +3681,8 @@ var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); var Initializable_1 = __webpack_require__(10); -var AbstractCustomNode_1 = __webpack_require__(14); -var Nodes_1 = __webpack_require__(30); +var AbstractCustomNode_1 = __webpack_require__(13); +var Nodes_1 = __webpack_require__(23); var NodeUtils_1 = __webpack_require__(8); var CallExpressionControlFlowStorageCallNode = function (_AbstractCustomNode_) { (0, _inherits3.default)(CallExpressionControlFlowStorageCallNode, _AbstractCustomNode_); @@ -3758,8 +3758,8 @@ var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); var Initializable_1 = __webpack_require__(10); -var AbstractCustomNode_1 = __webpack_require__(14); -var Nodes_1 = __webpack_require__(30); +var AbstractCustomNode_1 = __webpack_require__(13); +var Nodes_1 = __webpack_require__(23); var NodeUtils_1 = __webpack_require__(8); var ControlFlowStorageNode = function (_AbstractCustomNode_) { (0, _inherits3.default)(ControlFlowStorageNode, _AbstractCustomNode_); @@ -3827,8 +3827,8 @@ var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); var Initializable_1 = __webpack_require__(10); -var AbstractCustomNode_1 = __webpack_require__(14); -var Nodes_1 = __webpack_require__(30); +var AbstractCustomNode_1 = __webpack_require__(13); +var Nodes_1 = __webpack_require__(23); var NodeUtils_1 = __webpack_require__(8); var ExpressionWithOperatorControlFlowStorageCallNode = function (_AbstractCustomNode_) { (0, _inherits3.default)(ExpressionWithOperatorControlFlowStorageCallNode, _AbstractCustomNode_); @@ -3898,7 +3898,7 @@ var ServiceIdentifiers_1 = __webpack_require__(4); var format = __webpack_require__(19); var Initializable_1 = __webpack_require__(10); var DebufProtectionFunctionCallTemplate_1 = __webpack_require__(122); -var AbstractCustomNode_1 = __webpack_require__(14); +var AbstractCustomNode_1 = __webpack_require__(13); var NodeUtils_1 = __webpack_require__(8); var DebugProtectionFunctionCallNode = function (_AbstractCustomNode_) { (0, _inherits3.default)(DebugProtectionFunctionCallNode, _AbstractCustomNode_); @@ -3967,7 +3967,7 @@ var ServiceIdentifiers_1 = __webpack_require__(4); var format = __webpack_require__(19); var Initializable_1 = __webpack_require__(10); var DebugProtectionFunctionIntervalTemplate_1 = __webpack_require__(123); -var AbstractCustomNode_1 = __webpack_require__(14); +var AbstractCustomNode_1 = __webpack_require__(13); var NodeUtils_1 = __webpack_require__(8); var DebugProtectionFunctionIntervalNode = function (_AbstractCustomNode_) { (0, _inherits3.default)(DebugProtectionFunctionIntervalNode, _AbstractCustomNode_); @@ -4036,7 +4036,7 @@ var ServiceIdentifiers_1 = __webpack_require__(4); var format = __webpack_require__(19); var Initializable_1 = __webpack_require__(10); var DebugProtectionFunctionTemplate_1 = __webpack_require__(124); -var AbstractCustomNode_1 = __webpack_require__(14); +var AbstractCustomNode_1 = __webpack_require__(13); var NodeUtils_1 = __webpack_require__(8); var DebugProtectionFunctionNode = function (_AbstractCustomNode_) { (0, _inherits3.default)(DebugProtectionFunctionNode, _AbstractCustomNode_); @@ -4109,8 +4109,8 @@ var ServiceIdentifiers_1 = __webpack_require__(4); var Initializable_1 = __webpack_require__(10); var CustomNodes_1 = __webpack_require__(16); var ObfuscationEvents_1 = __webpack_require__(22); -var AbstractCustomNodeGroup_1 = __webpack_require__(26); -var NodeAppender_1 = __webpack_require__(24); +var AbstractCustomNodeGroup_1 = __webpack_require__(27); +var NodeAppender_1 = __webpack_require__(25); var RandomGeneratorUtils_1 = __webpack_require__(9); var DebugProtectionCustomNodeGroup = function (_AbstractCustomNodeGr) { (0, _inherits3.default)(DebugProtectionCustomNodeGroup, _AbstractCustomNodeGr); @@ -4207,7 +4207,7 @@ var ServiceIdentifiers_1 = __webpack_require__(4); var format = __webpack_require__(19); var Initializable_1 = __webpack_require__(10); var DomainLockNodeTemplate_1 = __webpack_require__(125); -var AbstractCustomNode_1 = __webpack_require__(14); +var AbstractCustomNode_1 = __webpack_require__(13); var CryptUtils_1 = __webpack_require__(34); var NodeUtils_1 = __webpack_require__(8); var RandomGeneratorUtils_1 = __webpack_require__(9); @@ -4292,8 +4292,8 @@ var ServiceIdentifiers_1 = __webpack_require__(4); var Initializable_1 = __webpack_require__(10); var CustomNodes_1 = __webpack_require__(16); var ObfuscationEvents_1 = __webpack_require__(22); -var AbstractCustomNodeGroup_1 = __webpack_require__(26); -var NodeAppender_1 = __webpack_require__(24); +var AbstractCustomNodeGroup_1 = __webpack_require__(27); +var NodeAppender_1 = __webpack_require__(25); var RandomGeneratorUtils_1 = __webpack_require__(9); var DomainLockCustomNodeGroup = function (_AbstractCustomNodeGr) { (0, _inherits3.default)(DomainLockCustomNodeGroup, _AbstractCustomNodeGr); @@ -4385,8 +4385,8 @@ var ObfuscationEvents_1 = __webpack_require__(22); var Initializable_1 = __webpack_require__(10); var SingleNodeCallControllerTemplate_1 = __webpack_require__(120); var NoCustomNodes_1 = __webpack_require__(31); -var AbstractCustomNode_1 = __webpack_require__(14); -var JavaScriptObfuscator_1 = __webpack_require__(23); +var AbstractCustomNode_1 = __webpack_require__(13); +var JavaScriptObfuscator_1 = __webpack_require__(24); var NodeUtils_1 = __webpack_require__(8); var NodeCallsControllerFunctionNode = function (_AbstractCustomNode_) { (0, _inherits3.default)(NodeCallsControllerFunctionNode, _AbstractCustomNode_); @@ -4463,8 +4463,8 @@ var format = __webpack_require__(19); var Initializable_1 = __webpack_require__(10); var NoCustomNodes_1 = __webpack_require__(31); var SelfDefendingTemplate_1 = __webpack_require__(126); -var AbstractCustomNode_1 = __webpack_require__(14); -var JavaScriptObfuscator_1 = __webpack_require__(23); +var AbstractCustomNode_1 = __webpack_require__(13); +var JavaScriptObfuscator_1 = __webpack_require__(24); var NodeUtils_1 = __webpack_require__(8); var RandomGeneratorUtils_1 = __webpack_require__(9); var SelfDefendingUnicodeNode = function (_AbstractCustomNode_) { @@ -4539,8 +4539,8 @@ var ServiceIdentifiers_1 = __webpack_require__(4); var Initializable_1 = __webpack_require__(10); var CustomNodes_1 = __webpack_require__(16); var ObfuscationEvents_1 = __webpack_require__(22); -var AbstractCustomNodeGroup_1 = __webpack_require__(26); -var NodeAppender_1 = __webpack_require__(24); +var AbstractCustomNodeGroup_1 = __webpack_require__(27); +var NodeAppender_1 = __webpack_require__(25); var RandomGeneratorUtils_1 = __webpack_require__(9); var SelfDefendingCustomNodeGroup = function (_AbstractCustomNodeGr) { (0, _inherits3.default)(SelfDefendingCustomNodeGroup, _AbstractCustomNodeGr); @@ -4637,8 +4637,8 @@ var SelfDefendingTemplate_1 = __webpack_require__(127); var StringArrayBase64DecodeNodeTemplate_1 = __webpack_require__(128); var StringArrayCallsWrapperTemplate_1 = __webpack_require__(129); var StringArrayRC4DecodeNodeTemplate_1 = __webpack_require__(130); -var AbstractCustomNode_1 = __webpack_require__(14); -var JavaScriptObfuscator_1 = __webpack_require__(23); +var AbstractCustomNode_1 = __webpack_require__(13); +var JavaScriptObfuscator_1 = __webpack_require__(24); var NodeUtils_1 = __webpack_require__(8); var StringArrayCallsWrapper = function (_AbstractCustomNode_) { (0, _inherits3.default)(StringArrayCallsWrapper, _AbstractCustomNode_); @@ -4748,7 +4748,7 @@ var ServiceIdentifiers_1 = __webpack_require__(4); var format = __webpack_require__(19); var Initializable_1 = __webpack_require__(10); var StringArrayTemplate_1 = __webpack_require__(131); -var AbstractCustomNode_1 = __webpack_require__(14); +var AbstractCustomNode_1 = __webpack_require__(13); var NodeUtils_1 = __webpack_require__(8); var StringArrayNode = function (_AbstractCustomNode_) { (0, _inherits3.default)(StringArrayNode, _AbstractCustomNode_); @@ -4830,11 +4830,11 @@ var Initializable_1 = __webpack_require__(10); var NoCustomNodes_1 = __webpack_require__(31); var SelfDefendingTemplate_1 = __webpack_require__(132); var StringArrayRotateFunctionTemplate_1 = __webpack_require__(133); -var AbstractCustomNode_1 = __webpack_require__(14); -var JavaScriptObfuscator_1 = __webpack_require__(23); +var AbstractCustomNode_1 = __webpack_require__(13); +var JavaScriptObfuscator_1 = __webpack_require__(24); var NodeUtils_1 = __webpack_require__(8); var RandomGeneratorUtils_1 = __webpack_require__(9); -var Utils_1 = __webpack_require__(13); +var Utils_1 = __webpack_require__(14); var StringArrayRotateFunctionNode = function (_AbstractCustomNode_) { (0, _inherits3.default)(StringArrayRotateFunctionNode, _AbstractCustomNode_); @@ -4925,10 +4925,10 @@ var ServiceIdentifiers_1 = __webpack_require__(4); var Initializable_1 = __webpack_require__(10); var CustomNodes_1 = __webpack_require__(16); var ObfuscationEvents_1 = __webpack_require__(22); -var AbstractCustomNodeGroup_1 = __webpack_require__(26); -var NodeAppender_1 = __webpack_require__(24); +var AbstractCustomNodeGroup_1 = __webpack_require__(27); +var NodeAppender_1 = __webpack_require__(25); var RandomGeneratorUtils_1 = __webpack_require__(9); -var Utils_1 = __webpack_require__(13); +var Utils_1 = __webpack_require__(14); var StringArrayCustomNodeGroup = function (_AbstractCustomNodeGr) { (0, _inherits3.default)(StringArrayCustomNodeGroup, _AbstractCustomNodeGr); @@ -5003,7 +5003,7 @@ exports.StringArrayCustomNodeGroup = StringArrayCustomNodeGroup; "use strict"; -var Utils_1 = __webpack_require__(13); +var Utils_1 = __webpack_require__(14); exports.VisitorDirection = Utils_1.Utils.strEnumify({ enter: 'enter', leave: 'leave' @@ -5058,7 +5058,7 @@ exports.ObfuscationEventEmitter = ObfuscationEventEmitter; "use strict"; -var _toConsumableArray2 = __webpack_require__(25); +var _toConsumableArray2 = __webpack_require__(26); var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2); @@ -5091,7 +5091,7 @@ var CustomNodes_1 = __webpack_require__(16); var AbstractNodeTransformer_1 = __webpack_require__(18); var Node_1 = __webpack_require__(12); var RandomGeneratorUtils_1 = __webpack_require__(9); -var Utils_1 = __webpack_require__(13); +var Utils_1 = __webpack_require__(14); var BlockStatementControlFlowTransformer = BlockStatementControlFlowTransformer_1 = function (_AbstractNodeTransfor) { (0, _inherits3.default)(BlockStatementControlFlowTransformer, _AbstractNodeTransfor); @@ -5180,7 +5180,7 @@ var CustomNodes_1 = __webpack_require__(16); var NodeType_1 = __webpack_require__(15); var AbstractNodeTransformer_1 = __webpack_require__(18); var Node_1 = __webpack_require__(12); -var NodeAppender_1 = __webpack_require__(24); +var NodeAppender_1 = __webpack_require__(25); var NodeControlFlowReplacers_1 = __webpack_require__(39); var NodeUtils_1 = __webpack_require__(8); var RandomGeneratorUtils_1 = __webpack_require__(9); @@ -5938,7 +5938,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); -var escodegen = __webpack_require__(27); +var escodegen = __webpack_require__(28); var NodeObfuscatorsReplacers_1 = __webpack_require__(20); var AbstractNodeTransformer_1 = __webpack_require__(18); var Node_1 = __webpack_require__(12); @@ -6167,11 +6167,11 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); -var escodegen = __webpack_require__(27); +var escodegen = __webpack_require__(28); var NodeType_1 = __webpack_require__(15); var AbstractNodeTransformer_1 = __webpack_require__(18); var Node_1 = __webpack_require__(12); -var Utils_1 = __webpack_require__(13); +var Utils_1 = __webpack_require__(14); var ObjectExpressionObfuscator = ObjectExpressionObfuscator_1 = function (_AbstractNodeTransfor) { (0, _inherits3.default)(ObjectExpressionObfuscator, _AbstractNodeTransfor); @@ -6400,7 +6400,7 @@ var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); var JSFuck_1 = __webpack_require__(36); -var AbstractReplacer_1 = __webpack_require__(29); +var AbstractReplacer_1 = __webpack_require__(30); var BooleanLiteralReplacer = function (_AbstractReplacer_1$A) { (0, _inherits3.default)(BooleanLiteralReplacer, _AbstractReplacer_1$A); @@ -6456,7 +6456,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); -var AbstractReplacer_1 = __webpack_require__(29); +var AbstractReplacer_1 = __webpack_require__(30); var RandomGeneratorUtils_1 = __webpack_require__(9); var IdentifierReplacer = function (_AbstractReplacer_1$A) { (0, _inherits3.default)(IdentifierReplacer, _AbstractReplacer_1$A); @@ -6535,8 +6535,8 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); -var AbstractReplacer_1 = __webpack_require__(29); -var Utils_1 = __webpack_require__(13); +var AbstractReplacer_1 = __webpack_require__(30); +var Utils_1 = __webpack_require__(14); var NumberLiteralReplacer = function (_AbstractReplacer_1$A) { (0, _inherits3.default)(NumberLiteralReplacer, _AbstractReplacer_1$A); @@ -6607,10 +6607,10 @@ var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); var StringArrayEncoding_1 = __webpack_require__(32); -var AbstractReplacer_1 = __webpack_require__(29); +var AbstractReplacer_1 = __webpack_require__(30); var CryptUtils_1 = __webpack_require__(34); var RandomGeneratorUtils_1 = __webpack_require__(9); -var Utils_1 = __webpack_require__(13); +var Utils_1 = __webpack_require__(14); var StringLiteralReplacer = StringLiteralReplacer_1 = function (_AbstractReplacer_1$A) { (0, _inherits3.default)(StringLiteralReplacer, _AbstractReplacer_1$A); @@ -6792,7 +6792,7 @@ var _createClass3 = _interopRequireDefault(_createClass2); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var tslib_1 = __webpack_require__(3); -var Utils_1 = __webpack_require__(13); +var Utils_1 = __webpack_require__(14); var OptionsNormalizer = function () { function OptionsNormalizer() { @@ -7459,7 +7459,7 @@ exports.ObjectExpressionCalleeDataExtractor = ObjectExpressionCalleeDataExtracto "use strict"; -var _toConsumableArray2 = __webpack_require__(25); +var _toConsumableArray2 = __webpack_require__(26); var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2); @@ -7697,7 +7697,7 @@ var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); var ArrayStorage_1 = __webpack_require__(114); var RandomGeneratorUtils_1 = __webpack_require__(9); -var Utils_1 = __webpack_require__(13); +var Utils_1 = __webpack_require__(14); var StringArrayStorage = function (_ArrayStorage_1$Array) { (0, _inherits3.default)(StringArrayStorage, _ArrayStorage_1$Array); @@ -7841,7 +7841,7 @@ exports.DomainLockNodeTemplate = DomainLockNodeTemplate; "use strict"; -var Utils_1 = __webpack_require__(13); +var Utils_1 = __webpack_require__(14); function SelfDefendingTemplate() { return "\n var {selfDefendingFunctionName} = {singleNodeCallControllerFunctionName}(this, function () {\n var func1 = function(){return 'dev';},\n func2 = function () {\n return 'window';\n };\n \n var test1 = function () {\n var regExp = new RegExp('" + Utils_1.Utils.stringToUnicodeEscapeSequence("\\w+ *\\(\\) *{\\w+ *['|\"].+['|\"];? *}") + "');\n \n return !regExp.test(func1.toString());\n };\n \n var test2 = function () {\n var regExp = new RegExp('" + Utils_1.Utils.stringToUnicodeEscapeSequence("(\\\\[x|u](\\w){2,4})+") + "');\n \n return regExp.test(func2.toString());\n };\n \n var recursiveFunc1 = function (string) {\n var i = ~-1 >> 1 + 255 % 0;\n \n if (string.indexOf('i' === i)) {\n recursiveFunc2(string)\n }\n };\n \n var recursiveFunc2 = function (string) {\n var i = ~-4 >> 1 + 255 % 0;\n \n if (string.indexOf((true+\"\")[3]) !== i) {\n recursiveFunc1(string)\n }\n };\n \n if (!test1()) {\n if (!test2()) {\n recursiveFunc1('ind\u0435xOf');\n } else {\n recursiveFunc1('indexOf');\n }\n } else {\n recursiveFunc1('ind\u0435xOf');\n }\n })\n \n {selfDefendingFunctionName}();\n "; } @@ -7854,7 +7854,7 @@ exports.SelfDefendingTemplate = SelfDefendingTemplate; "use strict"; -var Utils_1 = __webpack_require__(13); +var Utils_1 = __webpack_require__(14); function SelfDefendingTemplate() { return "\n var StatesClass = function (rc4Bytes) {\n this.rc4Bytes = rc4Bytes;\n this.states = [1, 0, 0];\n this.newState = function(){return 'newState';};\n this.firstState = '" + Utils_1.Utils.stringToUnicodeEscapeSequence("\\w+ *\\(\\) *{\\w+ *") + "';\n this.secondState = '" + Utils_1.Utils.stringToUnicodeEscapeSequence("['|\"].+['|\"];? *}") + "';\n };\n \n StatesClass.prototype.checkState = function () {\n var regExp = new RegExp(this.firstState + this.secondState);\n\n return this.runState(regExp.test(this.newState.toString()) ? --this.states[1] : --this.states[0]);\n };\n \n StatesClass.prototype.runState = function (stateResult) {\n if (!Boolean(~stateResult)) {\n return stateResult;\n }\n \n return this.getState(this.rc4Bytes);\n };\n\n StatesClass.prototype.getState = function (rc4Bytes) {\n for (var i = 0, len = this.states.length; i < len; i++) {\n this.states.push(Math.round(Math.random()));\n len = this.states.length;\n }\n \n return rc4Bytes(this.states[0]);\n };\n\n new StatesClass({stringArrayCallsWrapperName}).checkState();\n "; } @@ -7915,7 +7915,7 @@ exports.StringArrayTemplate = StringArrayTemplate; "use strict"; -var Utils_1 = __webpack_require__(13); +var Utils_1 = __webpack_require__(14); function SelfDefendingTemplate() { return "\n var selfDefendingFunc = function () { \n var object = {\n data: {\n key: 'cookie',\n value: 'timeout'\n },\n setCookie: function (options, name, value, document) {\n document = document || {};\n \n var updatedCookie = name + \"=\" + value;\n\n var i = 0;\n \n for (var i = 0, len = options.length; i < len; i++) { \n var propName = options[i];\n \n updatedCookie += \"; \" + propName;\n \n var propValue = options[propName];\n \n options.push(propValue);\n len = options.length;\n \n if (propValue !== true) {\n updatedCookie += \"=\" + propValue;\n }\n }\n\n document['cookie'] = updatedCookie;\n },\n removeCookie: function(){return 'dev';},\n getCookie: function (document, name) { \n document = document || function (value) { return value };\n var matches = document(new RegExp(\n \"(?:^|; )\" + name.replace(/([.$?*|{}()[]\\/+^])/g, '\\$1') + \"=([^;]*)\"\n ));\n \n var func = function (param1, param2) {\n param1(++param2);\n };\n \n func({whileFunctionName}, {timesName});\n \n return matches ? decodeURIComponent(matches[1]) : undefined;\n }\n };\n \n var test1 = function () {\n var regExp = new RegExp('" + Utils_1.Utils.stringToUnicodeEscapeSequence("\\w+ *\\(\\) *{\\w+ *['|\"].+['|\"];? *}") + "');\n \n return regExp.test(object.removeCookie.toString());\n };\n \n object['updateCookie'] = test1;\n \n var cookie = '';\n var result = object['updateCookie']();\n \n if (!result) {\n object['setCookie'](['*'], 'counter', 1);\n } else if (result) {\n cookie = object['getCookie'](null, 'counter'); \n } else {\n object['removeCookie']();\n }\n };\n \n selfDefendingFunc();\n "; } @@ -8024,14 +8024,13 @@ module.exports = require("mkdirp"); module.exports = require("reflect-metadata"); /***/ }, -/* 149 */, -/* 150 */ +/* 149 */ /***/ function(module, exports, __webpack_require__) { "use strict"; -var JavaScriptObfuscator_1 = __webpack_require__(23); +var JavaScriptObfuscator_1 = __webpack_require__(24); module.exports = JavaScriptObfuscator_1.JavaScriptObfuscator; /***/ } From 87795ed5961412eded6e44c341ca34cdfad61cd7 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Sat, 7 Jan 2017 19:02:54 +0300 Subject: [PATCH 02/28] 0.9.0-dev.9 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 36f13409..06ac9eb1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "javascript-obfuscator", - "version": "0.9.0-dev.8", + "version": "0.9.0-dev.9", "description": "JavaScript obfuscator", "keywords": [ "obfuscator", From a295f77101450e57b7a86ec72c8e4900a28bc81f Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Fri, 13 Jan 2017 19:15:08 +0300 Subject: [PATCH 03/28] ArrayPattern and AssignmentPattern function parameters obfuscation + tests --- dist/index.js | 32 ++++++- src/enums/NodeType.ts | 2 + .../FunctionTransformer.ts | 18 +++- src/node/Node.ts | 16 ++++ test/dev/dev.ts | 81 +---------------- .../FunctionTransformer.spec.ts | 86 +++++++++++++++++++ .../fixtures/array-pattern-as-parameter.js | 5 ++ .../assignment-pattern-as-parameter-1.js | 5 ++ .../assignment-pattern-as-parameter-2.js | 6 ++ 9 files changed, 168 insertions(+), 83 deletions(-) create mode 100644 test/functional-tests/node-transformers/obfuscating-transformers/function-transformer/fixtures/array-pattern-as-parameter.js create mode 100644 test/functional-tests/node-transformers/obfuscating-transformers/function-transformer/fixtures/assignment-pattern-as-parameter-1.js create mode 100644 test/functional-tests/node-transformers/obfuscating-transformers/function-transformer/fixtures/assignment-pattern-as-parameter-2.js diff --git a/dist/index.js b/dist/index.js index 19c782cf..5ea40703 100644 --- a/dist/index.js +++ b/dist/index.js @@ -90,7 +90,7 @@ module.exports = /******/ __webpack_require__.p = ""; /******/ /******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 150); +/******/ return __webpack_require__(__webpack_require__.s = 151); /******/ }) /************************************************************************/ /******/ ([ @@ -567,6 +567,11 @@ var Node = function () { value: function isArrowFunctionExpressionNode(node) { return node.type === NodeType_1.NodeType.ArrowFunctionExpression; } + }, { + key: "isAssignmentPatternNode", + value: function isAssignmentPatternNode(node) { + return node.type === NodeType_1.NodeType.AssignmentPattern; + } }, { key: "isBlockStatementNode", value: function isBlockStatementNode(node) { @@ -635,6 +640,11 @@ var Node = function () { value: function isMemberExpressionNode(node) { return node.type === NodeType_1.NodeType.MemberExpression; } + }, { + key: "isObjectPatternNode", + value: function isObjectPatternNode(node) { + return node.type === NodeType_1.NodeType.ObjectPattern; + } }, { key: "isObjectExpressionNode", value: function isObjectExpressionNode(node) { @@ -1002,6 +1012,7 @@ exports.NodeType = Utils_1.Utils.strEnumify({ ArrayExpression: 'ArrayExpression', ArrowFunctionExpression: 'ArrowFunctionExpression', AssignmentExpression: 'AssignmentExpression', + AssignmentPattern: 'AssignmentPattern', BinaryExpression: 'BinaryExpression', BlockStatement: 'BlockStatement', BreakStatement: 'BreakStatement', @@ -1020,6 +1031,7 @@ exports.NodeType = Utils_1.Utils.strEnumify({ MemberExpression: 'MemberExpression', MethodDefinition: 'MethodDefinition', ObjectExpression: 'ObjectExpression', + ObjectPattern: 'ObjectPattern', Program: 'Program', Property: 'Property', ReturnStatement: 'ReturnStatement', @@ -6032,9 +6044,20 @@ var FunctionTransformer = function (_AbstractNodeTransfor) { var _this2 = this; functionNode.params.forEach(function (paramsNode) { - if (Node_1.Node.isIdentifierNode(paramsNode)) { - _this2.identifierReplacer.storeNames(paramsNode.name, nodeIdentifier); + if (Node_1.Node.isObjectPatternNode(paramsNode)) { + return estraverse.VisitorOption.Skip; } + estraverse.traverse(paramsNode, { + enter: function enter(node) { + if (Node_1.Node.isAssignmentPatternNode(node) && Node_1.Node.isIdentifierNode(node.left)) { + _this2.identifierReplacer.storeNames(node.left.name, nodeIdentifier); + return estraverse.VisitorOption.Skip; + } + if (Node_1.Node.isIdentifierNode(node)) { + _this2.identifierReplacer.storeNames(node.name, nodeIdentifier); + } + } + }); }); } }, { @@ -8121,7 +8144,8 @@ module.exports = require("mkdirp"); module.exports = require("reflect-metadata"); /***/ }), -/* 150 */ +/* 150 */, +/* 151 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; diff --git a/src/enums/NodeType.ts b/src/enums/NodeType.ts index dd3fc540..6fea420c 100644 --- a/src/enums/NodeType.ts +++ b/src/enums/NodeType.ts @@ -4,6 +4,7 @@ export const NodeType: any = Utils.strEnumify({ ArrayExpression: 'ArrayExpression', ArrowFunctionExpression: 'ArrowFunctionExpression', AssignmentExpression: 'AssignmentExpression', + AssignmentPattern: 'AssignmentPattern', BinaryExpression: 'BinaryExpression', BlockStatement: 'BlockStatement', BreakStatement: 'BreakStatement', @@ -22,6 +23,7 @@ export const NodeType: any = Utils.strEnumify({ MemberExpression: 'MemberExpression', MethodDefinition: 'MethodDefinition', ObjectExpression: 'ObjectExpression', + ObjectPattern: 'ObjectPattern', Program: 'Program', Property: 'Property', ReturnStatement: 'ReturnStatement', diff --git a/src/node-transformers/obfuscating-transformers/FunctionTransformer.ts b/src/node-transformers/obfuscating-transformers/FunctionTransformer.ts index 2a3f6e84..03a83725 100644 --- a/src/node-transformers/obfuscating-transformers/FunctionTransformer.ts +++ b/src/node-transformers/obfuscating-transformers/FunctionTransformer.ts @@ -61,9 +61,23 @@ export class FunctionTransformer extends AbstractNodeTransformer { private storeFunctionParams (functionNode: ESTree.Function, nodeIdentifier: number): void { functionNode.params .forEach((paramsNode: ESTree.Node) => { - if (Node.isIdentifierNode(paramsNode)) { - this.identifierReplacer.storeNames(paramsNode.name, nodeIdentifier); + if (Node.isObjectPatternNode(paramsNode)) { + return estraverse.VisitorOption.Skip; } + + estraverse.traverse(paramsNode, { + enter: (node: ESTree.Node): any => { + if (Node.isAssignmentPatternNode(node) && Node.isIdentifierNode(node.left)) { + this.identifierReplacer.storeNames(node.left.name, nodeIdentifier); + + return estraverse.VisitorOption.Skip; + } + + if (Node.isIdentifierNode(node)) { + this.identifierReplacer.storeNames(node.name, nodeIdentifier); + } + } + }); }); } diff --git a/src/node/Node.ts b/src/node/Node.ts index 046f092d..c5e84bc0 100644 --- a/src/node/Node.ts +++ b/src/node/Node.ts @@ -13,6 +13,14 @@ export class Node { return node.type === NodeType.ArrowFunctionExpression; } + /** + * @param node + * @returns {boolean} + */ + public static isAssignmentPatternNode (node: ESTree.Node): node is ESTree.AssignmentPattern { + return node.type === NodeType.AssignmentPattern; + } + /** * @param node * @returns {boolean} @@ -122,6 +130,14 @@ export class Node { return node.type === NodeType.MemberExpression; } + /** + * @param node + * @returns {boolean} + */ + public static isObjectPatternNode (node: ESTree.Node): node is ESTree.ObjectPattern { + return node.type === NodeType.ObjectPattern; + } + /** * @param node * @returns {boolean} diff --git a/test/dev/dev.ts b/test/dev/dev.ts index 6aa24259..04efc098 100644 --- a/test/dev/dev.ts +++ b/test/dev/dev.ts @@ -11,83 +11,10 @@ if (!(global)._babelPolyfill) { let obfuscatedCode: string = JavaScriptObfuscator.obfuscate( ` (function(){ - var result = 1, - term1 = 0, - term2 = 1, - i = 1; - while(i < 10) - { - var test = 10; - result = term1 + term2; - console.log(result); - term1 = term2; - term2 = result; - i++; - } - - console.log(test); - - var test = function (test) { - console.log(test); - - if (true) { - var test = 5 - } - - return test; - } - - console.log(test(1)); - - function test2 (abc) { - function test1 () { - console.log('inside', abc.item); - } - - console.log('тест', abc); - - var abc = {}; - - return abc.item = 15, test1(); - }; - - var regexptest = /version\\/(\\d+)/i; - console.log(regexptest); - - test2(22); - console.log(105.4); - console.log(true, false); - - var sA = 'shorthand1'; - var sB = 'shorthand2'; - - console.log({sA, sB}); - - try { - } catch (error) { - console.log(error); - } - - function foo () { - return function () { - var sum1 = 10 + 20; - var sum2 = 20 + 30; - var sum3 = 30 + 50; - var sub = sum3 - sum2; - - return sum1 + sub; - } - } - - console.log(foo()()); - - if (true) { - console.log(\`1\`); - console.log(\`2\`); - console.log(\`3\`); - console.log(\`4\`); - console.log(\`5\`); - } + var foo = 1; + var test = function (foo, abc = foo) { + return foo, abc; + } })(); `, { diff --git a/test/functional-tests/node-transformers/obfuscating-transformers/function-transformer/FunctionTransformer.spec.ts b/test/functional-tests/node-transformers/obfuscating-transformers/function-transformer/FunctionTransformer.spec.ts index 95040aeb..76a9584e 100644 --- a/test/functional-tests/node-transformers/obfuscating-transformers/function-transformer/FunctionTransformer.spec.ts +++ b/test/functional-tests/node-transformers/obfuscating-transformers/function-transformer/FunctionTransformer.spec.ts @@ -52,4 +52,90 @@ describe('FunctionTransformer', () => { assert.match(obfuscatedCode, functionBodyMatch); }); }); + + describe('assignment pattern as parameter', () => { + describe('literal as right value', () => { + const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( + readFileAsString(__dirname + '/fixtures/assignment-pattern-as-parameter-1.js'), + { + ...NO_CUSTOM_NODES_PRESET + } + ); + const obfuscatedCode: string = obfuscationResult.getObfuscatedCode(); + + it('should transform function parameter assignment pattern identifier', () => { + const functionParameterMatch: RegExp = /function *\(_0x[a-f0-9]{4,6} *= *0x1\) *\{/; + const functionBodyMatch: RegExp = /return *_0x[a-f0-9]{4,6};/; + + assert.match(obfuscatedCode, functionParameterMatch); + assert.match(obfuscatedCode, functionBodyMatch); + }); + }); + + describe('identifier as right value', () => { + const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( + readFileAsString(__dirname + '/fixtures/assignment-pattern-as-parameter-2.js'), + { + ...NO_CUSTOM_NODES_PRESET + } + ); + const obfuscatedCode: string = obfuscationResult.getObfuscatedCode(); + + const variableDeclarationMatch: RegExp = /var *(_0x[a-f0-9]{4,6}) *= *0x1;/; + const functionParameterMatch: RegExp = /function *\((_0x[a-f0-9]{4,6}), *(_0x[a-f0-9]{4,6}) *= *(_0x[a-f0-9]{4,6})\) *\{/; + const functionBodyMatch: RegExp = /return *(_0x[a-f0-9]{4,6}) *\+ *(_0x[a-f0-9]{4,6});/; + + const variableDeclarationIdentifierName: string = obfuscatedCode.match(variableDeclarationMatch)![1]; + const functionParameterIdentifierName: string = obfuscatedCode.match(functionParameterMatch)![1]; + const functionDefaultParameterIdentifierName1: string = obfuscatedCode.match(functionParameterMatch)![2]; + const functionDefaultParameterIdentifierName2: string = obfuscatedCode.match(functionParameterMatch)![3]; + + const functionBodyIdentifierName1: string = obfuscatedCode.match(functionBodyMatch)![1]; + const functionBodyIdentifierName2: string = obfuscatedCode.match(functionBodyMatch)![2]; + + it('should transform function parameter assignment pattern identifier', () => { + assert.match(obfuscatedCode, variableDeclarationMatch); + assert.match(obfuscatedCode, functionParameterMatch); + assert.match(obfuscatedCode, functionBodyMatch); + }); + + it('shouldn\'t keep same names variable declaration identifier and function parameters identifiers', () => { + assert.notEqual(variableDeclarationIdentifierName, functionParameterIdentifierName); + assert.notEqual(variableDeclarationIdentifierName, functionDefaultParameterIdentifierName1); + assert.notEqual(variableDeclarationIdentifierName, functionDefaultParameterIdentifierName2); + }); + + it('should keep same names for identifier in first function parameter and default value identifier of second function parameter', () => { + assert.equal(functionParameterIdentifierName, functionDefaultParameterIdentifierName2); + }); + + it('should keep same names for identifiers in function params and function body', () => { + assert.equal(functionParameterIdentifierName, functionBodyIdentifierName1); + assert.equal(functionDefaultParameterIdentifierName1, functionBodyIdentifierName2); + }); + }); + }); + + describe('array pattern as parameter', () => { + const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( + readFileAsString(__dirname + '/fixtures/array-pattern-as-parameter.js'), + { + ...NO_CUSTOM_NODES_PRESET + } + ); + const obfuscatedCode: string = obfuscationResult.getObfuscatedCode(); + + const functionParameterMatch: RegExp = /function *\(\[(_0x[a-f0-9]{4,6}), *(_0x[a-f0-9]{4,6})\]\) *\{/; + const functionBodyMatch: RegExp = /return *(_0x[a-f0-9]{4,6}) *\+ *(_0x[a-f0-9]{4,6});/; + + const arrayPatternIdentifierName1: string = obfuscatedCode.match(functionParameterMatch)![1]; + const arrayPatternIdentifierName2: string = obfuscatedCode.match(functionParameterMatch)![2]; + const functionBodyIdentifierName1: string = obfuscatedCode.match(functionBodyMatch)![1]; + const functionBodyIdentifierName2: string = obfuscatedCode.match(functionBodyMatch)![2]; + + it('should keep same names for identifiers in function parameter array pattern and function body', () => { + assert.equal(arrayPatternIdentifierName1, functionBodyIdentifierName1); + assert.equal(arrayPatternIdentifierName2, functionBodyIdentifierName2); + }); + }); }); diff --git a/test/functional-tests/node-transformers/obfuscating-transformers/function-transformer/fixtures/array-pattern-as-parameter.js b/test/functional-tests/node-transformers/obfuscating-transformers/function-transformer/fixtures/array-pattern-as-parameter.js new file mode 100644 index 00000000..1638b9a7 --- /dev/null +++ b/test/functional-tests/node-transformers/obfuscating-transformers/function-transformer/fixtures/array-pattern-as-parameter.js @@ -0,0 +1,5 @@ +(function () { + var test = function ([foo, bar]) { + return foo + bar; + } +})(); diff --git a/test/functional-tests/node-transformers/obfuscating-transformers/function-transformer/fixtures/assignment-pattern-as-parameter-1.js b/test/functional-tests/node-transformers/obfuscating-transformers/function-transformer/fixtures/assignment-pattern-as-parameter-1.js new file mode 100644 index 00000000..f21992a4 --- /dev/null +++ b/test/functional-tests/node-transformers/obfuscating-transformers/function-transformer/fixtures/assignment-pattern-as-parameter-1.js @@ -0,0 +1,5 @@ +(function () { + var test = function (bar = 1) { + return bar; + } +})(); diff --git a/test/functional-tests/node-transformers/obfuscating-transformers/function-transformer/fixtures/assignment-pattern-as-parameter-2.js b/test/functional-tests/node-transformers/obfuscating-transformers/function-transformer/fixtures/assignment-pattern-as-parameter-2.js new file mode 100644 index 00000000..9782200f --- /dev/null +++ b/test/functional-tests/node-transformers/obfuscating-transformers/function-transformer/fixtures/assignment-pattern-as-parameter-2.js @@ -0,0 +1,6 @@ +(function () { + var foo = 1; + var test = function (foo, bar = foo) { + return foo + bar; + } +})(); From c5f29b8c799e4c70d982f61276980315adcf3c07 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Fri, 13 Jan 2017 21:37:38 +0300 Subject: [PATCH 04/28] additional tests for array pattern as function parameter --- .../FunctionTransformer.spec.ts | 34 +++++++++++++++++++ .../assignment-pattern-as-parameter-2.js | 4 +-- .../assignment-pattern-as-parameter-3.js | 6 ++++ 3 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 test/functional-tests/node-transformers/obfuscating-transformers/function-transformer/fixtures/assignment-pattern-as-parameter-3.js diff --git a/test/functional-tests/node-transformers/obfuscating-transformers/function-transformer/FunctionTransformer.spec.ts b/test/functional-tests/node-transformers/obfuscating-transformers/function-transformer/FunctionTransformer.spec.ts index 76a9584e..9b8903f8 100644 --- a/test/functional-tests/node-transformers/obfuscating-transformers/function-transformer/FunctionTransformer.spec.ts +++ b/test/functional-tests/node-transformers/obfuscating-transformers/function-transformer/FunctionTransformer.spec.ts @@ -81,6 +81,40 @@ describe('FunctionTransformer', () => { ); const obfuscatedCode: string = obfuscationResult.getObfuscatedCode(); + const variableDeclarationMatch: RegExp = /var *(_0x[a-f0-9]{4,6}) *= *0x1;/; + const functionParameterMatch: RegExp = /function *\((_0x[a-f0-9]{4,6}) *= *(_0x[a-f0-9]{4,6})\) *\{/; + const functionBodyMatch: RegExp = /return *(_0x[a-f0-9]{4,6});/; + + const variableDeclarationIdentifierName: string = obfuscatedCode.match(variableDeclarationMatch)![1]; + const functionParameterIdentifierName: string = obfuscatedCode.match(functionParameterMatch)![1]; + const functionDefaultParameterIdentifierName: string = obfuscatedCode.match(functionParameterMatch)![2]; + + const functionBodyIdentifierName: string = obfuscatedCode.match(functionBodyMatch)![1]; + + it('should transform function parameter assignment pattern identifier', () => { + assert.match(obfuscatedCode, variableDeclarationMatch); + assert.match(obfuscatedCode, functionParameterMatch); + assert.match(obfuscatedCode, functionBodyMatch); + }); + + it('should keep same names for identifier in variable declaration and default value identifier of function parameter', () => { + assert.equal(variableDeclarationIdentifierName, functionDefaultParameterIdentifierName); + }); + + it('should keep same names for identifiers in function params and function body', () => { + assert.equal(functionParameterIdentifierName, functionBodyIdentifierName); + }); + }); + + describe('identifier as right value', () => { + const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( + readFileAsString(__dirname + '/fixtures/assignment-pattern-as-parameter-3.js'), + { + ...NO_CUSTOM_NODES_PRESET + } + ); + const obfuscatedCode: string = obfuscationResult.getObfuscatedCode(); + const variableDeclarationMatch: RegExp = /var *(_0x[a-f0-9]{4,6}) *= *0x1;/; const functionParameterMatch: RegExp = /function *\((_0x[a-f0-9]{4,6}), *(_0x[a-f0-9]{4,6}) *= *(_0x[a-f0-9]{4,6})\) *\{/; const functionBodyMatch: RegExp = /return *(_0x[a-f0-9]{4,6}) *\+ *(_0x[a-f0-9]{4,6});/; diff --git a/test/functional-tests/node-transformers/obfuscating-transformers/function-transformer/fixtures/assignment-pattern-as-parameter-2.js b/test/functional-tests/node-transformers/obfuscating-transformers/function-transformer/fixtures/assignment-pattern-as-parameter-2.js index 9782200f..d48277d0 100644 --- a/test/functional-tests/node-transformers/obfuscating-transformers/function-transformer/fixtures/assignment-pattern-as-parameter-2.js +++ b/test/functional-tests/node-transformers/obfuscating-transformers/function-transformer/fixtures/assignment-pattern-as-parameter-2.js @@ -1,6 +1,6 @@ (function () { var foo = 1; - var test = function (foo, bar = foo) { - return foo + bar; + var test = function (bar = foo) { + return bar; } })(); diff --git a/test/functional-tests/node-transformers/obfuscating-transformers/function-transformer/fixtures/assignment-pattern-as-parameter-3.js b/test/functional-tests/node-transformers/obfuscating-transformers/function-transformer/fixtures/assignment-pattern-as-parameter-3.js new file mode 100644 index 00000000..9782200f --- /dev/null +++ b/test/functional-tests/node-transformers/obfuscating-transformers/function-transformer/fixtures/assignment-pattern-as-parameter-3.js @@ -0,0 +1,6 @@ +(function () { + var foo = 1; + var test = function (foo, bar = foo) { + return foo + bar; + } +})(); From ae924d1a6a5c11a4c34d3baf1c77f7bc0152b0ee Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Fri, 13 Jan 2017 22:02:29 +0300 Subject: [PATCH 05/28] correct transformation of array pattern in variable declarator --- dist/index.js | 9 ++- .../VariableDeclarationTransformer.ts | 8 +- test/dev/dev.ts | 81 ++++++++++++++++++- .../VariableDeclarationTransformer.spec.ts | 32 +++++++- .../fixtures/array-pattern.js | 5 ++ .../fixtures/object-pattern.js | 1 + 6 files changed, 126 insertions(+), 10 deletions(-) create mode 100644 test/functional-tests/node-transformers/obfuscating-transformers/variable-declaration-transformer/fixtures/array-pattern.js diff --git a/dist/index.js b/dist/index.js index 5ea40703..0f22eb4e 100644 --- a/dist/index.js +++ b/dist/index.js @@ -6420,9 +6420,14 @@ var VariableDeclarationTransformer = function (_AbstractNodeTransfor) { var _this2 = this; variableDeclarationNode.declarations.forEach(function (declarationNode) { - if (Node_1.Node.isIdentifierNode(declarationNode.id)) { - _this2.identifierReplacer.storeNames(declarationNode.id.name, nodeIdentifier); + if (Node_1.Node.isObjectPatternNode(declarationNode.id)) { + return estraverse.VisitorOption.Skip; } + NodeUtils_1.NodeUtils.typedTraverse(declarationNode.id, NodeType_1.NodeType.Identifier, { + enter: function enter(node) { + return _this2.identifierReplacer.storeNames(node.name, nodeIdentifier); + } + }); }); } }, { diff --git a/src/node-transformers/obfuscating-transformers/VariableDeclarationTransformer.ts b/src/node-transformers/obfuscating-transformers/VariableDeclarationTransformer.ts index fdd0ec03..17c174fc 100644 --- a/src/node-transformers/obfuscating-transformers/VariableDeclarationTransformer.ts +++ b/src/node-transformers/obfuscating-transformers/VariableDeclarationTransformer.ts @@ -83,9 +83,13 @@ export class VariableDeclarationTransformer extends AbstractNodeTransformer { private storeVariableNames (variableDeclarationNode: ESTree.VariableDeclaration, nodeIdentifier: number): void { variableDeclarationNode.declarations .forEach((declarationNode: ESTree.VariableDeclarator) => { - if (Node.isIdentifierNode(declarationNode.id)) { - this.identifierReplacer.storeNames(declarationNode.id.name, nodeIdentifier); + if (Node.isObjectPatternNode(declarationNode.id)) { + return estraverse.VisitorOption.Skip; } + + NodeUtils.typedTraverse(declarationNode.id, NodeType.Identifier, { + enter: (node: ESTree.Identifier) => this.identifierReplacer.storeNames(node.name, nodeIdentifier) + }); }); } diff --git a/test/dev/dev.ts b/test/dev/dev.ts index 04efc098..6aa24259 100644 --- a/test/dev/dev.ts +++ b/test/dev/dev.ts @@ -11,10 +11,83 @@ if (!(global)._babelPolyfill) { let obfuscatedCode: string = JavaScriptObfuscator.obfuscate( ` (function(){ - var foo = 1; - var test = function (foo, abc = foo) { - return foo, abc; - } + var result = 1, + term1 = 0, + term2 = 1, + i = 1; + while(i < 10) + { + var test = 10; + result = term1 + term2; + console.log(result); + term1 = term2; + term2 = result; + i++; + } + + console.log(test); + + var test = function (test) { + console.log(test); + + if (true) { + var test = 5 + } + + return test; + } + + console.log(test(1)); + + function test2 (abc) { + function test1 () { + console.log('inside', abc.item); + } + + console.log('тест', abc); + + var abc = {}; + + return abc.item = 15, test1(); + }; + + var regexptest = /version\\/(\\d+)/i; + console.log(regexptest); + + test2(22); + console.log(105.4); + console.log(true, false); + + var sA = 'shorthand1'; + var sB = 'shorthand2'; + + console.log({sA, sB}); + + try { + } catch (error) { + console.log(error); + } + + function foo () { + return function () { + var sum1 = 10 + 20; + var sum2 = 20 + 30; + var sum3 = 30 + 50; + var sub = sum3 - sum2; + + return sum1 + sub; + } + } + + console.log(foo()()); + + if (true) { + console.log(\`1\`); + console.log(\`2\`); + console.log(\`3\`); + console.log(\`4\`); + console.log(\`5\`); + } })(); `, { diff --git a/test/functional-tests/node-transformers/obfuscating-transformers/variable-declaration-transformer/VariableDeclarationTransformer.spec.ts b/test/functional-tests/node-transformers/obfuscating-transformers/variable-declaration-transformer/VariableDeclarationTransformer.spec.ts index df211160..35cdaa66 100644 --- a/test/functional-tests/node-transformers/obfuscating-transformers/variable-declaration-transformer/VariableDeclarationTransformer.spec.ts +++ b/test/functional-tests/node-transformers/obfuscating-transformers/variable-declaration-transformer/VariableDeclarationTransformer.spec.ts @@ -200,11 +200,39 @@ describe('VariableDeclarationTransformer', () => { const obfuscatedCode: string = obfuscationResult.getObfuscatedCode(); it('shouldn\'t transform object pattern variable declarator', () => { - const objectPatternVariableDeclarator: RegExp = /var *\{ *bar *\} *= *\{ *'\\x62\\x61\\x72' *: *'\\x66\\x6f\\x6f' *\};/; + const objectPatternVariableDeclaratorMatch: RegExp = /var *\{ *bar *\} *= *\{ *'\\x62\\x61\\x72' *: *'\\x66\\x6f\\x6f' *\};/; const variableUsageMatch: RegExp = /console\['\\x6c\\x6f\\x67'\]\(bar\);/; - assert.match(obfuscatedCode, objectPatternVariableDeclarator); + assert.match(obfuscatedCode, objectPatternVariableDeclaratorMatch); assert.match(obfuscatedCode, variableUsageMatch); }); }); + + describe('array pattern as variable declarator', () => { + const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( + readFileAsString(__dirname + '/fixtures/array-pattern.js'), + { + ...NO_CUSTOM_NODES_PRESET + } + ); + const obfuscatedCode: string = obfuscationResult.getObfuscatedCode(); + + const objectPatternVariableDeclaratorMatch: RegExp = /var *\[ *(_0x([a-f0-9]){4,6}), *(_0x([a-f0-9]){4,6}) *\] *= *\[0x1, *0x2\];/; + const variableUsageMatch: RegExp = /console\['\\x6c\\x6f\\x67'\]\((_0x([a-f0-9]){4,6}), *(_0x([a-f0-9]){4,6})\);/; + + const objectPatternIdentifierName1: string = obfuscatedCode.match(objectPatternVariableDeclaratorMatch)![1]; + const objectPatternIdentifierName2: string = obfuscatedCode.match(objectPatternVariableDeclaratorMatch)![2]; + const identifierName1: string = obfuscatedCode.match(variableUsageMatch)![1]; + const identifierName2: string = obfuscatedCode.match(variableUsageMatch)![2]; + + it('should transform array pattern variable declarator', () => { + assert.match(obfuscatedCode, objectPatternVariableDeclaratorMatch); + assert.match(obfuscatedCode, variableUsageMatch); + }); + + it('should keep same identifier names same for identifiers in variable declaration and after variable declaration', () => { + assert.equal(objectPatternIdentifierName1, identifierName1); + assert.equal(objectPatternIdentifierName2, identifierName2); + }); + }); }); diff --git a/test/functional-tests/node-transformers/obfuscating-transformers/variable-declaration-transformer/fixtures/array-pattern.js b/test/functional-tests/node-transformers/obfuscating-transformers/variable-declaration-transformer/fixtures/array-pattern.js new file mode 100644 index 00000000..067b9ae1 --- /dev/null +++ b/test/functional-tests/node-transformers/obfuscating-transformers/variable-declaration-transformer/fixtures/array-pattern.js @@ -0,0 +1,5 @@ +function foo () { + var [bar, baz] = [1, 2]; + + console.log(bar, baz); +} \ No newline at end of file diff --git a/test/functional-tests/node-transformers/obfuscating-transformers/variable-declaration-transformer/fixtures/object-pattern.js b/test/functional-tests/node-transformers/obfuscating-transformers/variable-declaration-transformer/fixtures/object-pattern.js index c921f760..9af1be22 100644 --- a/test/functional-tests/node-transformers/obfuscating-transformers/variable-declaration-transformer/fixtures/object-pattern.js +++ b/test/functional-tests/node-transformers/obfuscating-transformers/variable-declaration-transformer/fixtures/object-pattern.js @@ -1,4 +1,5 @@ (function () { var { bar } = { bar: 'foo' }; + console.log(bar); })(); From 658e24b02a28ff557e5621fb1e069eb76ec2cb4d Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Fri, 13 Jan 2017 22:29:51 +0300 Subject: [PATCH 06/28] 0.9.0-dev.11 --- dist/index.js | 5 ++--- package.json | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/dist/index.js b/dist/index.js index 0f22eb4e..eef2228d 100644 --- a/dist/index.js +++ b/dist/index.js @@ -90,7 +90,7 @@ module.exports = /******/ __webpack_require__.p = ""; /******/ /******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 151); +/******/ return __webpack_require__(__webpack_require__.s = 150); /******/ }) /************************************************************************/ /******/ ([ @@ -8149,8 +8149,7 @@ module.exports = require("mkdirp"); module.exports = require("reflect-metadata"); /***/ }), -/* 150 */, -/* 151 */ +/* 150 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; diff --git a/package.json b/package.json index 1faf9117..2eb72f30 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "javascript-obfuscator", - "version": "0.9.0-dev.10", + "version": "0.9.0-dev.11", "description": "JavaScript obfuscator", "keywords": [ "obfuscator", From 9b9c0382ed8cd08271f11a12d1c5707b492d8e85 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Sat, 14 Jan 2017 13:07:39 +0300 Subject: [PATCH 07/28] 0.9.0-beta.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1faf9117..ebe7d829 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "javascript-obfuscator", - "version": "0.9.0-dev.10", + "version": "0.9.0-beta.1", "description": "JavaScript obfuscator", "keywords": [ "obfuscator", From 6bc386c7c59293730958d056051abc63cd699b2b Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Sat, 14 Jan 2017 13:16:49 +0300 Subject: [PATCH 08/28] 0.9.0-beta.1 --- CHANGELOG.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 33c1dffa..d90b6771 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,14 @@ Change Log === +v0.9.0-beta.1 +--- +* **New option:** `controlFlowFlattening` allows to enable/disable **Control Flow flattening**. Control flow flattening is a structure transformation of the source code that hinders program comprehension. +* **New option:** `controlFlowFlatteningThreshold` allows to set percentage of nodes that will affected by `controlFlowFlattening`. +* Better `es2015` support: correct obfuscation of `TemplateLiteral`, `ArrayPattern`, `AssignmentPattern` nodes. +* Obfuscation performance boost. +* Huge internal refactoring. +* Various bug fixes. + v0.8.6 --- * additional fixes for https://github.com/javascript-obfuscator/javascript-obfuscator/issues/29 From 80fd367677163c9fb63ef3468f2099412460d3bb Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Sat, 14 Jan 2017 16:45:01 +0300 Subject: [PATCH 09/28] readme note --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 991941cf..7ee83716 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ JavaScript obfuscator for Node.js is a free obfuscator with wide number of features which provides protection for your source code. * without any limits and sending data to a server; -* compatible with ES6; +* compatible with `es2015`; * tested on Angular2 bundle. Online version: [javascriptobfuscator.herokuapp.com](https://javascriptobfuscator.herokuapp.com) @@ -25,6 +25,8 @@ Example of obfuscated code: [gist.github.com](https://gist.github.com/sanex3339/ [![Build Status](https://travis-ci.org/javascript-obfuscator/javascript-obfuscator.svg?branch=master)](https://travis-ci.org/javascript-obfuscator/javascript-obfuscator) [![Coverage Status](https://coveralls.io/repos/github/javascript-obfuscator/javascript-obfuscator/badge.svg?branch=master)](https://coveralls.io/github/javascript-obfuscator/javascript-obfuscator?branch=master) +*NOTE! the README on the master branch might not match that of the latest stable release!* + ## :warning: Important #####Obfuscate only the code that belongs to you. From 43f3c30958e0e4064b4fb6e2f4556f74ec7d034f Mon Sep 17 00:00:00 2001 From: J Bruni Date: Sat, 14 Jan 2017 17:55:53 -0200 Subject: [PATCH 10/28] Update README.md English language fix --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 7ee83716..1e54e3df 100644 --- a/README.md +++ b/README.md @@ -411,7 +411,7 @@ Available values: * `true` (`boolean`): encode `stringArray` values using `base64` * `false` (`boolean`): don't encode `stringArray` values * `'base64'` (`string`): encode `stringArray` values using `base64` -* `'rc4'` (`string`): encode `stringArray` values using `rc4`. **About 30-50% slower then `base64`, but more harder to get initial values.** It is recommended to disable [`unicodeEscapeSequence`](#unicodeescapesequence) option with `rc4` encoding to prevent very large size of obfuscated code. +* `'rc4'` (`string`): encode `stringArray` values using `rc4`. **About 30-50% slower than `base64`, but more harder to get initial values.** It is recommended to disable [`unicodeEscapeSequence`](#unicodeescapesequence) option with `rc4` encoding to prevent very large size of obfuscated code. ### `stringArrayThreshold` Type: `number` Default: `0.8` Min: `0` Max: `1` @@ -434,7 +434,7 @@ Unicode escape sequence increases code size greatly. It is recommended to disabl ## Preset Options ### High obfuscation, low performance -Performance will 50-100% slower then without obfuscation +Performance will 50-100% slower than without obfuscation ```javascript { @@ -455,7 +455,7 @@ Performance will 50-100% slower then without obfuscation ### Medium obfuscation, optimal performance -Performance will 30-35% slower then without obfuscation +Performance will 30-35% slower than without obfuscation ```javascript { @@ -476,7 +476,7 @@ Performance will 30-35% slower then without obfuscation ### Low obfuscation, High performance -Performance will slightly slower then without obfuscation +Performance will slightly slower than without obfuscation ```javascript { @@ -515,4 +515,4 @@ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. From 146a1f6a07d117dc94c09c51f5a98b043d914059 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Sun, 15 Jan 2017 18:23:53 +0300 Subject: [PATCH 11/28] copyright year update --- README.md | 2 +- dist/index.js | 2 +- package.json | 2 +- webpack.config.js | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 1e54e3df..07c182f2 100644 --- a/README.md +++ b/README.md @@ -495,7 +495,7 @@ Performance will slightly slower than without obfuscation ``` ## License -Copyright (C) 2016 [Timofey Kachalov](http://github.com/sanex3339). +Copyright (C) 2017 [Timofey Kachalov](http://github.com/sanex3339). Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/dist/index.js b/dist/index.js index eef2228d..537d3418 100644 --- a/dist/index.js +++ b/dist/index.js @@ -1,5 +1,5 @@ /* -Copyright (C) 2016 Timofey Kachalov +Copyright (C) 2017 Timofey Kachalov Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/package.json b/package.json index ebe7d829..0c6a7c85 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "lodash": "4.17.4", "mkdirp": "0.5.1", "reflect-metadata": "0.1.9", - "source-map-support": "0.4.8", + "source-map-support": "0.4.9", "string-template": "1.0.0", "tslib": "1.5.0" }, diff --git a/webpack.config.js b/webpack.config.js index 69610fb0..fe0d83fd 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -6,7 +6,7 @@ var fs = require("fs"), CheckerPlugin = require('awesome-typescript-loader').CheckerPlugin; function getLicenseText () { - return "/*\nCopyright (C) 2016 Timofey Kachalov \n\n" + + return "/*\nCopyright (C) 2017 Timofey Kachalov \n\n" + fs.readFileSync('./LICENSE.BSD', 'utf8') + "\n*/"; } From 6d352b00480e188bf55090d3c6293999b38781ad Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Sun, 15 Jan 2017 23:01:50 +0300 Subject: [PATCH 12/28] update webpack to rc.5 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0c6a7c85..b81dac0b 100644 --- a/package.json +++ b/package.json @@ -64,7 +64,7 @@ "tslint": "4.3.1", "tslint-loader": "3.3.0", "typescript": "2.1.5", - "webpack": "2.2.0-rc.4", + "webpack": "2.2.0-rc.5", "webpack-node-externals": "1.5.4" }, "repository": { From 9ff5b03d62ede41cae42d4372534496ba4b784e0 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Mon, 16 Jan 2017 13:14:07 +0300 Subject: [PATCH 13/28] renamed `obfuscated` node property to `obfuscatedNode` --- dist/index.js | 67 ++++++++++--------- src/declarations/ESTree.d.ts | 3 +- .../CatchClauseTransformer.ts | 2 +- .../FunctionTransformer.ts | 2 +- .../VariableDeclarationTransformer.ts | 2 +- src/node/NodeUtils.ts | 2 +- src/node/Nodes.ts | 54 +++++++-------- 7 files changed, 66 insertions(+), 66 deletions(-) diff --git a/dist/index.js b/dist/index.js index 537d3418..0635a405 100644 --- a/dist/index.js +++ b/dist/index.js @@ -90,7 +90,7 @@ module.exports = /******/ __webpack_require__.p = ""; /******/ /******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 150); +/******/ return __webpack_require__(__webpack_require__.s = 151); /******/ }) /************************************************************************/ /******/ ([ @@ -342,7 +342,7 @@ var NodeUtils = function () { value = parentNode || node; } node.parentNode = value; - node.obfuscated = false; + node.obfuscatedNode = false; } }); return astTree; @@ -1086,7 +1086,7 @@ var Nodes = function () { type: NodeType_1.NodeType.Program, body: body, sourceType: 'script', - obfuscated: false + obfuscatedNode: false }; } }, { @@ -1097,7 +1097,7 @@ var Nodes = function () { operator: operator, left: left, right: right, - obfuscated: false + obfuscatedNode: false }; } }, { @@ -1108,7 +1108,7 @@ var Nodes = function () { operator: operator, left: left, right: right, - obfuscated: false + obfuscatedNode: false }; } }, { @@ -1119,7 +1119,7 @@ var Nodes = function () { return { type: NodeType_1.NodeType.BlockStatement, body: body, - obfuscated: false + obfuscatedNode: false }; } }, { @@ -1127,7 +1127,7 @@ var Nodes = function () { value: function getBreakStatement(label) { var breakStatementNode = { type: NodeType_1.NodeType.BreakStatement, - obfuscated: false + obfuscatedNode: false }; if (label) { breakStatementNode.label = label; @@ -1143,7 +1143,7 @@ var Nodes = function () { type: NodeType_1.NodeType.CatchClause, param: Nodes.getIdentifierNode('err'), body: Nodes.getBlockStatementNode(body), - obfuscated: false + obfuscatedNode: false }; } }, { @@ -1155,7 +1155,7 @@ var Nodes = function () { type: NodeType_1.NodeType.CallExpression, callee: callee, arguments: args, - obfuscated: false + obfuscatedNode: false }; } }, { @@ -1163,7 +1163,7 @@ var Nodes = function () { value: function getContinueStatement(label) { var continueStatementNode = { type: NodeType_1.NodeType.ContinueStatement, - obfuscated: false + obfuscatedNode: false }; if (label) { continueStatementNode.label = label; @@ -1176,7 +1176,7 @@ var Nodes = function () { return { type: NodeType_1.NodeType.ExpressionStatement, expression: expression, - obfuscated: false + obfuscatedNode: false }; } }, { @@ -1188,7 +1188,7 @@ var Nodes = function () { params: params, body: body, generator: false, - obfuscated: false + obfuscatedNode: false }; } }, { @@ -1199,7 +1199,7 @@ var Nodes = function () { params: params, body: body, generator: false, - obfuscated: false + obfuscatedNode: false }; } }, { @@ -1209,7 +1209,7 @@ var Nodes = function () { type: NodeType_1.NodeType.IfStatement, test: test, consequent: consequent, - obfuscated: false + obfuscatedNode: false }; } }, { @@ -1218,7 +1218,7 @@ var Nodes = function () { return { type: NodeType_1.NodeType.Identifier, name: name, - obfuscated: false + obfuscatedNode: false }; } }, { @@ -1228,7 +1228,7 @@ var Nodes = function () { type: NodeType_1.NodeType.LabeledStatement, label: label, body: body, - obfuscated: false + obfuscatedNode: false }; } }, { @@ -1242,7 +1242,7 @@ var Nodes = function () { content: "'" + value + "'", precedence: escodegen.Precedence.Primary }, - obfuscated: false + obfuscatedNode: false }; } }, { @@ -1253,7 +1253,7 @@ var Nodes = function () { operator: operator, left: left, right: right, - obfuscated: false + obfuscatedNode: false }; } }, { @@ -1266,7 +1266,7 @@ var Nodes = function () { computed: computed, object: object, property: property, - obfuscated: false + obfuscatedNode: false }; } }, { @@ -1275,7 +1275,7 @@ var Nodes = function () { return { type: NodeType_1.NodeType.ObjectExpression, properties: properties, - obfuscated: false + obfuscatedNode: false }; } }, { @@ -1291,7 +1291,7 @@ var Nodes = function () { method: false, shorthand: false, computed: computed, - obfuscated: false + obfuscatedNode: false }; } }, { @@ -1304,7 +1304,7 @@ var Nodes = function () { operator: operator, argument: argument, prefix: prefix, - obfuscated: false + obfuscatedNode: false }; } }, { @@ -1313,7 +1313,7 @@ var Nodes = function () { return { type: NodeType_1.NodeType.ReturnStatement, argument: argument, - obfuscated: false + obfuscatedNode: false }; } }, { @@ -1323,7 +1323,7 @@ var Nodes = function () { type: NodeType_1.NodeType.SwitchStatement, discriminant: discriminant, cases: cases, - obfuscated: false + obfuscatedNode: false }; } }, { @@ -1333,7 +1333,7 @@ var Nodes = function () { type: NodeType_1.NodeType.SwitchCase, test: test, consequent: consequent, - obfuscated: false + obfuscatedNode: false }; } }, { @@ -1344,7 +1344,7 @@ var Nodes = function () { operator: operator, argument: argumentExpr, prefix: false, - obfuscated: false + obfuscatedNode: false }; } }, { @@ -1357,7 +1357,7 @@ var Nodes = function () { type: NodeType_1.NodeType.VariableDeclaration, declarations: declarations, kind: kind, - obfuscated: false + obfuscatedNode: false }; } }, { @@ -1367,7 +1367,7 @@ var Nodes = function () { type: NodeType_1.NodeType.VariableDeclarator, id: id, init: init, - obfuscated: false + obfuscatedNode: false }; } }, { @@ -1377,7 +1377,7 @@ var Nodes = function () { type: NodeType_1.NodeType.WhileStatement, test: test, body: body, - obfuscated: false + obfuscatedNode: false }; } }]); @@ -5838,7 +5838,7 @@ var CatchClauseTransformer = function (_AbstractNodeTransfor) { var newNodeName = _this2.identifierReplacer.replace(node.name, nodeIdentifier); if (node.name !== newNodeName) { node.name = newNodeName; - node.obfuscated = true; + node.obfuscatedNode = true; } } } @@ -6071,7 +6071,7 @@ var FunctionTransformer = function (_AbstractNodeTransfor) { var newNodeName = _this3.identifierReplacer.replace(node.name, nodeIdentifier); if (node.name !== newNodeName) { node.name = newNodeName; - node.obfuscated = true; + node.obfuscatedNode = true; } } } @@ -6468,7 +6468,7 @@ var VariableDeclarationTransformer = function (_AbstractNodeTransfor) { replaceableIdentifiersForCurrentScope = []; estraverse.replace(scopeNode, { enter: function enter(node, parentNode) { - if (!node.obfuscated && Node_1.Node.isReplaceableIdentifierNode(node, parentNode)) { + if (!node.obfuscatedNode && Node_1.Node.isReplaceableIdentifierNode(node, parentNode)) { var newNodeName = _this3.identifierReplacer.replace(node.name, nodeIdentifier); if (node.name !== newNodeName) { node.name = newNodeName; @@ -8149,7 +8149,8 @@ module.exports = require("mkdirp"); module.exports = require("reflect-metadata"); /***/ }), -/* 150 */ +/* 150 */, +/* 151 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; diff --git a/src/declarations/ESTree.d.ts b/src/declarations/ESTree.d.ts index 16ba7f6a..be3c25c8 100644 --- a/src/declarations/ESTree.d.ts +++ b/src/declarations/ESTree.d.ts @@ -4,9 +4,8 @@ import * as ESTree from 'estree'; declare module 'estree' { interface BaseNode { - obfuscated?: boolean; + obfuscatedNode?: boolean; parentNode?: ESTree.Node; - skippedByControlFlow?: boolean; } interface SimpleLiteral extends ESTree.BaseNode, ESTree.BaseExpression { diff --git a/src/node-transformers/obfuscating-transformers/CatchClauseTransformer.ts b/src/node-transformers/obfuscating-transformers/CatchClauseTransformer.ts index 18c71153..e2427902 100644 --- a/src/node-transformers/obfuscating-transformers/CatchClauseTransformer.ts +++ b/src/node-transformers/obfuscating-transformers/CatchClauseTransformer.ts @@ -76,7 +76,7 @@ export class CatchClauseTransformer extends AbstractNodeTransformer { if (node.name !== newNodeName) { node.name = newNodeName; - node.obfuscated = true; + node.obfuscatedNode = true; } } } diff --git a/src/node-transformers/obfuscating-transformers/FunctionTransformer.ts b/src/node-transformers/obfuscating-transformers/FunctionTransformer.ts index 03a83725..ecfb00bf 100644 --- a/src/node-transformers/obfuscating-transformers/FunctionTransformer.ts +++ b/src/node-transformers/obfuscating-transformers/FunctionTransformer.ts @@ -93,7 +93,7 @@ export class FunctionTransformer extends AbstractNodeTransformer { if (node.name !== newNodeName) { node.name = newNodeName; - node.obfuscated = true; + node.obfuscatedNode = true; } } } diff --git a/src/node-transformers/obfuscating-transformers/VariableDeclarationTransformer.ts b/src/node-transformers/obfuscating-transformers/VariableDeclarationTransformer.ts index 17c174fc..85e270b7 100644 --- a/src/node-transformers/obfuscating-transformers/VariableDeclarationTransformer.ts +++ b/src/node-transformers/obfuscating-transformers/VariableDeclarationTransformer.ts @@ -115,7 +115,7 @@ export class VariableDeclarationTransformer extends AbstractNodeTransformer { estraverse.replace(scopeNode, { enter: (node: ESTree.Node, parentNode: ESTree.Node): any => { - if (!node.obfuscated && Node.isReplaceableIdentifierNode(node, parentNode)) { + if (!node.obfuscatedNode && Node.isReplaceableIdentifierNode(node, parentNode)) { const newNodeName: string = this.identifierReplacer.replace(node.name, nodeIdentifier); if (node.name !== newNodeName) { diff --git a/src/node/NodeUtils.ts b/src/node/NodeUtils.ts index fb4edfaa..fcf90629 100644 --- a/src/node/NodeUtils.ts +++ b/src/node/NodeUtils.ts @@ -177,7 +177,7 @@ export class NodeUtils { } node.parentNode = value; - node.obfuscated = false; + node.obfuscatedNode = false; } }); diff --git a/src/node/Nodes.ts b/src/node/Nodes.ts index f9e09e12..b6c01b86 100644 --- a/src/node/Nodes.ts +++ b/src/node/Nodes.ts @@ -15,7 +15,7 @@ export class Nodes { type: NodeType.Program, body, sourceType: 'script', - obfuscated: false + obfuscatedNode: false }; } @@ -35,7 +35,7 @@ export class Nodes { operator, left, right, - obfuscated: false + obfuscatedNode: false }; } @@ -55,7 +55,7 @@ export class Nodes { operator, left, right, - obfuscated: false + obfuscatedNode: false }; } @@ -67,7 +67,7 @@ export class Nodes { return { type: NodeType.BlockStatement, body, - obfuscated: false + obfuscatedNode: false }; } @@ -78,7 +78,7 @@ export class Nodes { public static getBreakStatement (label?: ESTree.Identifier): ESTree.BreakStatement { const breakStatementNode: ESTree.BreakStatement = { type: NodeType.BreakStatement, - obfuscated: false + obfuscatedNode: false }; if (label) { @@ -97,7 +97,7 @@ export class Nodes { type: NodeType.CatchClause, param: Nodes.getIdentifierNode('err'), body: Nodes.getBlockStatementNode(body), - obfuscated: false + obfuscatedNode: false }; } @@ -114,7 +114,7 @@ export class Nodes { type: NodeType.CallExpression, callee, arguments: args, - obfuscated: false + obfuscatedNode: false }; } @@ -125,7 +125,7 @@ export class Nodes { public static getContinueStatement (label?: ESTree.Identifier): ESTree.ContinueStatement { const continueStatementNode: ESTree.ContinueStatement = { type: NodeType.ContinueStatement, - obfuscated: false + obfuscatedNode: false }; if (label) { @@ -143,7 +143,7 @@ export class Nodes { return { type: NodeType.ExpressionStatement, expression, - obfuscated: false + obfuscatedNode: false }; } @@ -164,7 +164,7 @@ export class Nodes { params, body, generator: false, - obfuscated: false + obfuscatedNode: false }; } @@ -182,7 +182,7 @@ export class Nodes { params, body, generator: false, - obfuscated: false + obfuscatedNode: false }; } @@ -196,7 +196,7 @@ export class Nodes { type: NodeType.IfStatement, test, consequent, - obfuscated: false + obfuscatedNode: false }; } @@ -208,7 +208,7 @@ export class Nodes { return { type: NodeType.Identifier, name, - obfuscated: false + obfuscatedNode: false }; } @@ -222,7 +222,7 @@ export class Nodes { type: NodeType.LabeledStatement, label, body, - obfuscated: false + obfuscatedNode: false }; } @@ -239,7 +239,7 @@ export class Nodes { content: `'${value}'`, precedence: escodegen.Precedence.Primary }, - obfuscated: false + obfuscatedNode: false }; } @@ -259,7 +259,7 @@ export class Nodes { operator, left, right, - obfuscated: false + obfuscatedNode: false }; } @@ -279,7 +279,7 @@ export class Nodes { computed, object, property, - obfuscated: false + obfuscatedNode: false }; } @@ -291,7 +291,7 @@ export class Nodes { return { type: NodeType.ObjectExpression, properties, - obfuscated: false + obfuscatedNode: false }; } @@ -311,7 +311,7 @@ export class Nodes { method: false, shorthand: false, computed, - obfuscated: false + obfuscatedNode: false }; } @@ -331,7 +331,7 @@ export class Nodes { operator, argument, prefix, - obfuscated: false + obfuscatedNode: false }; } @@ -343,7 +343,7 @@ export class Nodes { return { type: NodeType.ReturnStatement, argument, - obfuscated: false + obfuscatedNode: false }; } @@ -360,7 +360,7 @@ export class Nodes { type: NodeType.SwitchStatement, discriminant, cases, - obfuscated: false + obfuscatedNode: false }; } @@ -374,7 +374,7 @@ export class Nodes { type: NodeType.SwitchCase, test, consequent, - obfuscated: false + obfuscatedNode: false }; } @@ -389,7 +389,7 @@ export class Nodes { operator, argument: argumentExpr, prefix: false, - obfuscated: false + obfuscatedNode: false }; } @@ -406,7 +406,7 @@ export class Nodes { type: NodeType.VariableDeclaration, declarations, kind, - obfuscated: false + obfuscatedNode: false }; } @@ -420,7 +420,7 @@ export class Nodes { type: NodeType.VariableDeclarator, id, init, - obfuscated: false + obfuscatedNode: false }; } @@ -434,7 +434,7 @@ export class Nodes { type: NodeType.WhileStatement, test, body, - obfuscated: false + obfuscatedNode: false }; } } From 1df16519e2e32b48fbb1401dfd6ae83177fc278f Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Mon, 16 Jan 2017 15:44:18 +0300 Subject: [PATCH 14/28] ArrayStorage refactoring --- dist/index.js | 17 ++++++++++---- package.json | 2 +- src/interfaces/storages/IStorage.d.ts | 2 +- .../replacers/StringLiteralReplacer.ts | 2 +- src/storages/ArrayStorage.ts | 23 ++++++++++++++----- 5 files changed, 32 insertions(+), 14 deletions(-) diff --git a/dist/index.js b/dist/index.js index 0635a405..0e60c34e 100644 --- a/dist/index.js +++ b/dist/index.js @@ -6773,7 +6773,7 @@ var StringLiteralReplacer = StringLiteralReplacer_1 = function (_AbstractReplace } var indexOfValue = this.stringArrayStorage.getLength(); var hexadecimalIndex = "" + Utils_1.Utils.hexadecimalPrefix + Utils_1.Utils.decToHex(indexOfValue); - this.stringArrayStorage.set(null, value); + this.stringArrayStorage.set(this.stringArrayStorage.getLength(), value); this.stringLiteralHexadecimalIndexCache.set(value, hexadecimalIndex); return hexadecimalIndex; } @@ -7599,6 +7599,8 @@ var RandomGeneratorUtils_1 = __webpack_require__(9); var ArrayStorage = function () { function ArrayStorage() { (0, _classCallCheck3.default)(this, ArrayStorage); + + this.storageLength = 0; } (0, _createClass3.default)(ArrayStorage, [{ @@ -7618,7 +7620,7 @@ var ArrayStorage = function () { }, { key: "getLength", value: function getLength() { - return this.storage.length; + return this.storageLength; } }, { key: "getStorage", @@ -7649,14 +7651,19 @@ var ArrayStorage = function () { }, { key: "set", value: function set(key, value) { - this.storage.push(value); + if (key === this.storageLength) { + this.storage.push(value); + } else { + this.storage.splice(key, 0, value); + } + this.storageLength++; } }]); return ArrayStorage; }(); -tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", String)], ArrayStorage.prototype, "storageId", void 0); tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", Array)], ArrayStorage.prototype, "storage", void 0); -ArrayStorage = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__metadata("design:paramtypes", [])], ArrayStorage); +tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", String)], ArrayStorage.prototype, "storageId", void 0); +ArrayStorage = tslib_1.__decorate([inversify_1.injectable()], ArrayStorage); exports.ArrayStorage = ArrayStorage; /***/ }), diff --git a/package.json b/package.json index b81dac0b..07fe7b83 100644 --- a/package.json +++ b/package.json @@ -64,7 +64,7 @@ "tslint": "4.3.1", "tslint-loader": "3.3.0", "typescript": "2.1.5", - "webpack": "2.2.0-rc.5", + "webpack": "2.2.0-rc.6", "webpack-node-externals": "1.5.4" }, "repository": { diff --git a/src/interfaces/storages/IStorage.d.ts b/src/interfaces/storages/IStorage.d.ts index 5540fb01..f76fab01 100644 --- a/src/interfaces/storages/IStorage.d.ts +++ b/src/interfaces/storages/IStorage.d.ts @@ -43,7 +43,7 @@ export interface IStorage extends IInitializable { * @param key * @param value */ - set (key: string | number | null, value: T): void; + set (key: string | number, value: T): void; /** * @returns string diff --git a/src/node-transformers/obfuscating-transformers/replacers/StringLiteralReplacer.ts b/src/node-transformers/obfuscating-transformers/replacers/StringLiteralReplacer.ts index 10f5523a..6a540e0b 100644 --- a/src/node-transformers/obfuscating-transformers/replacers/StringLiteralReplacer.ts +++ b/src/node-transformers/obfuscating-transformers/replacers/StringLiteralReplacer.ts @@ -105,7 +105,7 @@ export class StringLiteralReplacer extends AbstractReplacer { const indexOfValue: number = this.stringArrayStorage.getLength(); const hexadecimalIndex: string = `${Utils.hexadecimalPrefix}${Utils.decToHex(indexOfValue)}`; - this.stringArrayStorage.set(null, value); + this.stringArrayStorage.set(this.stringArrayStorage.getLength(), value); this.stringLiteralHexadecimalIndexCache.set(value, hexadecimalIndex); return hexadecimalIndex; diff --git a/src/storages/ArrayStorage.ts b/src/storages/ArrayStorage.ts index 22cae049..66209d5c 100644 --- a/src/storages/ArrayStorage.ts +++ b/src/storages/ArrayStorage.ts @@ -8,6 +8,12 @@ import { RandomGeneratorUtils } from '../utils/RandomGeneratorUtils'; @injectable() export abstract class ArrayStorage implements IStorage { + /** + * @type {T[]} + */ + @initializable() + protected storage: T[]; + /** * @type {string} */ @@ -15,10 +21,9 @@ export abstract class ArrayStorage implements IStorage { protected storageId: string; /** - * @type {T[]} + * @type {number} */ - @initializable() - protected storage: T[]; + private storageLength: number = 0; /** * @param key @@ -46,7 +51,7 @@ export abstract class ArrayStorage implements IStorage { * @returns {number} */ public getLength (): number { - return this.storage.length; + return this.storageLength; } /** @@ -87,7 +92,13 @@ export abstract class ArrayStorage implements IStorage { * @param key * @param value */ - public set (key: string | null, value: T): void { - this.storage.push(value); + public set (key: number, value: T): void { + if (key === this.storageLength) { + this.storage.push(value); + } else { + this.storage.splice(key, 0, value); + } + + this.storageLength++; } } From a18e5445d9db9b1a6867053031057efdcace4a94 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Tue, 17 Jan 2017 02:03:39 +0300 Subject: [PATCH 15/28] ArrayStorage refactoring --- dist/index.js | 1065 ++++++++++------- package.json | 1 + src/Obfuscator.ts | 161 ++- .../NodeTransformersModule.ts | 33 +- src/enums/VisitorDirection.ts | 6 - .../node-transformers/INodeTransformer.d.ts | 8 +- .../AbstractNodeTransformer.ts | 8 +- .../BlockStatementControlFlowTransformer.ts | 17 +- .../FunctionControlFlowTransformer.ts | 16 +- .../MemberExpressionTransformer.ts | 17 +- .../MethodDefinitionTransformer.ts | 16 +- .../TemplateLiteralTransformer.ts | 16 +- .../CatchClauseTransformer.ts | 16 +- .../FunctionDeclarationTransformer.ts | 15 +- .../FunctionTransformer.ts | 20 +- .../LabeledStatementTransformer.ts | 16 +- .../LiteralTransformer.ts | 16 +- .../ObjectExpressionTransformer.ts | 17 +- .../VariableDeclarationTransformer.ts | 15 +- .../replacers/StringLiteralReplacer.ts | 6 +- src/node/Node.ts | 25 + .../container/TNodeTransformersFactory.d.ts | 2 +- 22 files changed, 969 insertions(+), 543 deletions(-) delete mode 100644 src/enums/VisitorDirection.ts diff --git a/dist/index.js b/dist/index.js index 0e60c34e..8b430d2f 100644 --- a/dist/index.js +++ b/dist/index.js @@ -90,7 +90,7 @@ module.exports = /******/ __webpack_require__.p = ""; /******/ /******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 151); +/******/ return __webpack_require__(__webpack_require__.s = 150); /******/ }) /************************************************************************/ /******/ ([ @@ -124,7 +124,7 @@ module.exports = require("tslib"); "use strict"; -var _symbol = __webpack_require__(139); +var _symbol = __webpack_require__(138); var _symbol2 = _interopRequireDefault(_symbol); @@ -199,8 +199,8 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de var escodegen = __webpack_require__(28); var esprima = __webpack_require__(49); var estraverse = __webpack_require__(17); -var NodeType_1 = __webpack_require__(18); -var Node_1 = __webpack_require__(12); +var NodeType_1 = __webpack_require__(19); +var Node_1 = __webpack_require__(11); var Nodes_1 = __webpack_require__(20); var NodeUtils = function () { @@ -384,7 +384,7 @@ exports.NodeUtils = NodeUtils; "use strict"; -var _set = __webpack_require__(138); +var _set = __webpack_require__(137); var _set2 = _interopRequireDefault(_set); @@ -398,7 +398,7 @@ var _createClass3 = _interopRequireDefault(_createClass2); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -var chance_1 = __webpack_require__(142); +var chance_1 = __webpack_require__(140); var Utils_1 = __webpack_require__(14); var RandomGeneratorUtils = function () { @@ -483,11 +483,11 @@ exports.RandomGeneratorUtils = RandomGeneratorUtils; "use strict"; -var _defineProperty = __webpack_require__(136); +var _defineProperty = __webpack_require__(135); var _defineProperty2 = _interopRequireDefault(_defineProperty); -var _getOwnPropertyDescriptor = __webpack_require__(137); +var _getOwnPropertyDescriptor = __webpack_require__(136); var _getOwnPropertyDescriptor2 = _interopRequireDefault(_getOwnPropertyDescriptor); @@ -534,12 +534,6 @@ exports.initializable = initializable; /***/ }), /* 11 */ -/***/ (function(module, exports) { - -module.exports = require("babel-runtime/core-js/map"); - -/***/ }), -/* 12 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -555,7 +549,7 @@ var _createClass3 = _interopRequireDefault(_createClass2); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -var NodeType_1 = __webpack_require__(18); +var NodeType_1 = __webpack_require__(19); var Node = function () { function Node() { @@ -587,6 +581,11 @@ var Node = function () { value: function isCallExpressionNode(node) { return node.type === NodeType_1.NodeType.CallExpression; } + }, { + key: "isCatchClauseNode", + value: function isCatchClauseNode(node) { + return node.type === NodeType_1.NodeType.CatchClause; + } }, { key: "isContinueStatementNode", value: function isContinueStatementNode(node) { @@ -640,6 +639,11 @@ var Node = function () { value: function isMemberExpressionNode(node) { return node.type === NodeType_1.NodeType.MemberExpression; } + }, { + key: "isMethodDefinitionNode", + value: function isMethodDefinitionNode(node) { + return node.type === NodeType_1.NodeType.MethodDefinition; + } }, { key: "isObjectPatternNode", value: function isObjectPatternNode(node) { @@ -670,6 +674,11 @@ var Node = function () { var parentNodeIsMemberExpressionNode = Node.isMemberExpressionNode(parentNode) && parentNode.computed === false && parentNode.property === node; return !parentNodeIsPropertyNode && !parentNodeIsMemberExpressionNode && !Node.isLabelIdentifierNode(node, parentNode); } + }, { + key: "isTemplateLiteralNode", + value: function isTemplateLiteralNode(node) { + return node.type === NodeType_1.NodeType.TemplateLiteral; + } }, { key: "isUnaryExpressionNode", value: function isUnaryExpressionNode(node) { @@ -696,6 +705,12 @@ var Node = function () { exports.Node = Node; +/***/ }), +/* 12 */ +/***/ (function(module, exports) { + +module.exports = require("babel-runtime/core-js/map"); + /***/ }), /* 13 */ /***/ (function(module, exports, __webpack_require__) { @@ -753,7 +768,7 @@ exports.AbstractCustomNode = AbstractCustomNode; "use strict"; -var _map = __webpack_require__(11); +var _map = __webpack_require__(12); var _map2 = _interopRequireDefault(_map); @@ -783,7 +798,7 @@ var _createClass3 = _interopRequireDefault(_createClass2); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -var _ = __webpack_require__(147); +var _ = __webpack_require__(145); var JSFuck_1 = __webpack_require__(36); var RandomGeneratorUtils_1 = __webpack_require__(9); @@ -1002,6 +1017,12 @@ module.exports = require("estraverse"); /***/ }), /* 18 */ +/***/ (function(module, exports) { + +module.exports = require("string-template"); + +/***/ }), +/* 19 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -1046,12 +1067,6 @@ exports.NodeType = Utils_1.Utils.strEnumify({ WhileStatement: 'WhileStatement' }); -/***/ }), -/* 19 */ -/***/ (function(module, exports) { - -module.exports = require("string-template"); - /***/ }), /* 20 */ /***/ (function(module, exports, __webpack_require__) { @@ -1070,7 +1085,7 @@ var _createClass3 = _interopRequireDefault(_createClass2); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var escodegen = __webpack_require__(28); -var NodeType_1 = __webpack_require__(18); +var NodeType_1 = __webpack_require__(19); var Nodes = function () { function Nodes() { @@ -1442,9 +1457,9 @@ var _createClass3 = _interopRequireDefault(_createClass2); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -__webpack_require__(149); +__webpack_require__(148); if (!global._babelPolyfill && parseInt(process.version.split('.')[0], 10) < 4) { - __webpack_require__(134); + __webpack_require__(133); } var ServiceIdentifiers_1 = __webpack_require__(4); var InversifyContainerFacade_1 = __webpack_require__(57); @@ -2027,7 +2042,7 @@ var NodeTransformers; "use strict"; -var _map = __webpack_require__(11); +var _map = __webpack_require__(12); var _map2 = _interopRequireDefault(_map); @@ -2101,7 +2116,7 @@ var AbstractControlFlowReplacer_1; "use strict"; -var _map = __webpack_require__(11); +var _map = __webpack_require__(12); var _map2 = _interopRequireDefault(_map); @@ -2132,7 +2147,7 @@ var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); var AbstractControlFlowReplacer_1 = __webpack_require__(41); var CustomNodes_1 = __webpack_require__(15); -var Node_1 = __webpack_require__(12); +var Node_1 = __webpack_require__(11); var ExpressionWithOperatorControlFlowReplacer = function (_AbstractControlFlowR) { (0, _inherits3.default)(ExpressionWithOperatorControlFlowReplacer, _AbstractControlFlowR); @@ -2209,7 +2224,7 @@ var _toConsumableArray2 = __webpack_require__(24); var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2); -var _map = __webpack_require__(11); +var _map = __webpack_require__(12); var _map2 = _interopRequireDefault(_map); @@ -2458,15 +2473,11 @@ exports.ObfuscationResult = ObfuscationResult; "use strict"; -var _defineProperty2 = __webpack_require__(140); - -var _defineProperty3 = _interopRequireDefault(_defineProperty2); - var _toConsumableArray2 = __webpack_require__(24); var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2); -var _map = __webpack_require__(11); +var _map = __webpack_require__(12); var _map2 = _interopRequireDefault(_map); @@ -2485,15 +2496,15 @@ var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); var estraverse = __webpack_require__(17); var NodeTransformers_1 = __webpack_require__(40); -var NodeType_1 = __webpack_require__(18); var ObfuscationEvents_1 = __webpack_require__(22); -var VisitorDirection_1 = __webpack_require__(86); -var Node_1 = __webpack_require__(12); +var Node_1 = __webpack_require__(11); var NodeUtils_1 = __webpack_require__(8); var Obfuscator = Obfuscator_1 = function () { function Obfuscator(stackTraceAnalyzer, obfuscationEventEmitter, customNodeGroupStorage, nodeTransformersFactory, options) { (0, _classCallCheck3.default)(this, Obfuscator); + this.cachedEnterVisitors = new _map2.default(); + this.cachedLeaveVisitors = new _map2.default(); this.stackTraceAnalyzer = stackTraceAnalyzer; this.obfuscationEventEmitter = obfuscationEventEmitter; this.customNodeGroupStorage = customNodeGroupStorage; @@ -2517,30 +2528,81 @@ var Obfuscator = Obfuscator_1 = function () { }); this.obfuscationEventEmitter.emit(ObfuscationEvents_1.ObfuscationEvents.BeforeObfuscation, astTree, stackTraceData); if (this.options.controlFlowFlattening) { - astTree = this.transformAstTree(astTree, VisitorDirection_1.VisitorDirection.leave, this.nodeTransformersFactory(Obfuscator_1.controlFlowTransformersMap)); + astTree = this.transformAstTree(astTree, Obfuscator_1.controlFlowTransformersList); } - astTree = this.transformAstTree(astTree, VisitorDirection_1.VisitorDirection.enter, this.nodeTransformersFactory(new _map2.default([].concat((0, _toConsumableArray3.default)(Obfuscator_1.convertingTransformersMap), (0, _toConsumableArray3.default)(Obfuscator_1.obfuscatingTransformersMap))))); + console.time(); + astTree = this.transformAstTree(astTree, [].concat((0, _toConsumableArray3.default)(Obfuscator_1.convertingTransformersList), (0, _toConsumableArray3.default)(Obfuscator_1.obfuscatingTransformersList))); + console.timeEnd(); this.obfuscationEventEmitter.emit(ObfuscationEvents_1.ObfuscationEvents.AfterObfuscation, astTree, stackTraceData); return astTree; } }, { key: "transformAstTree", - value: function transformAstTree(astTree, direction, nodeTransformersConcreteFactory) { - estraverse.replace(astTree, (0, _defineProperty3.default)({}, direction, function (node, parentNode) { - var nodeTransformers = nodeTransformersConcreteFactory(node.type); - nodeTransformers.forEach(function (nodeTransformer) { - node = nodeTransformer.transformNode(node, parentNode); - }); - return node; + value: function transformAstTree(astTree, nodeTransformers) { + var _this2 = this; + + var mergedVisitors = this.mergeTransformerVisitors(nodeTransformers.map(function (nodeTransformer) { + return _this2.nodeTransformersFactory(nodeTransformer).getVisitor(); })); + estraverse.replace(astTree, mergedVisitors); return astTree; } + }, { + key: "mergeTransformerVisitors", + value: function mergeTransformerVisitors(visitors) { + var _this3 = this; + + var enterVisitors = visitors.filter(function (visitor) { + return visitor.enter !== undefined; + }).map(function (visitor) { + return visitor.enter; + }); + var leaveVisitors = visitors.filter(function (visitor) { + return visitor.leave !== undefined; + }).map(function (visitor) { + return visitor.leave; + }); + return { + enter: function enter(node, parentNode) { + var nodeVisitors = void 0; + var saveToCache = true; + if (_this3.cachedEnterVisitors.has(node.type)) { + nodeVisitors = _this3.cachedEnterVisitors.get(node.type); + saveToCache = false; + } else { + nodeVisitors = enterVisitors; + } + nodeVisitors.forEach(function (visitor) { + visitor.call(_this3, node, parentNode); + }); + if (saveToCache) { + _this3.cachedEnterVisitors.set(node.type, nodeVisitors); + } + }, + leave: function leave(node, parentNode) { + var nodeVisitors = void 0; + var saveToCache = true; + if (_this3.cachedLeaveVisitors.has(node.type)) { + nodeVisitors = _this3.cachedLeaveVisitors.get(node.type); + saveToCache = false; + } else { + nodeVisitors = leaveVisitors; + } + nodeVisitors.forEach(function (visitor) { + visitor.call(_this3, node, parentNode); + }); + if (saveToCache) { + _this3.cachedLeaveVisitors.set(node.type, nodeVisitors); + } + } + }; + } }]); return Obfuscator; }(); -Obfuscator.controlFlowTransformersMap = new _map2.default([[NodeType_1.NodeType.BlockStatement, [NodeTransformers_1.NodeTransformers.BlockStatementControlFlowTransformer]], [NodeType_1.NodeType.FunctionDeclaration, [NodeTransformers_1.NodeTransformers.FunctionControlFlowTransformer]], [NodeType_1.NodeType.FunctionExpression, [NodeTransformers_1.NodeTransformers.FunctionControlFlowTransformer]]]); -Obfuscator.convertingTransformersMap = new _map2.default([[NodeType_1.NodeType.MemberExpression, [NodeTransformers_1.NodeTransformers.MemberExpressionTransformer]], [NodeType_1.NodeType.MethodDefinition, [NodeTransformers_1.NodeTransformers.MethodDefinitionTransformer]], [NodeType_1.NodeType.TemplateLiteral, [NodeTransformers_1.NodeTransformers.TemplateLiteralTransformer]]]); -Obfuscator.obfuscatingTransformersMap = new _map2.default([[NodeType_1.NodeType.ArrowFunctionExpression, [NodeTransformers_1.NodeTransformers.FunctionTransformer]], [NodeType_1.NodeType.ClassDeclaration, [NodeTransformers_1.NodeTransformers.FunctionDeclarationTransformer]], [NodeType_1.NodeType.CatchClause, [NodeTransformers_1.NodeTransformers.CatchClauseTransformer]], [NodeType_1.NodeType.FunctionDeclaration, [NodeTransformers_1.NodeTransformers.FunctionDeclarationTransformer, NodeTransformers_1.NodeTransformers.FunctionTransformer]], [NodeType_1.NodeType.FunctionExpression, [NodeTransformers_1.NodeTransformers.FunctionTransformer]], [NodeType_1.NodeType.ObjectExpression, [NodeTransformers_1.NodeTransformers.ObjectExpressionTransformer]], [NodeType_1.NodeType.VariableDeclaration, [NodeTransformers_1.NodeTransformers.VariableDeclarationTransformer]], [NodeType_1.NodeType.LabeledStatement, [NodeTransformers_1.NodeTransformers.LabeledStatementTransformer]], [NodeType_1.NodeType.Literal, [NodeTransformers_1.NodeTransformers.LiteralTransformer]]]); +Obfuscator.controlFlowTransformersList = [NodeTransformers_1.NodeTransformers.BlockStatementControlFlowTransformer, NodeTransformers_1.NodeTransformers.FunctionControlFlowTransformer, NodeTransformers_1.NodeTransformers.FunctionControlFlowTransformer]; +Obfuscator.convertingTransformersList = [NodeTransformers_1.NodeTransformers.MemberExpressionTransformer, NodeTransformers_1.NodeTransformers.MethodDefinitionTransformer, NodeTransformers_1.NodeTransformers.TemplateLiteralTransformer]; +Obfuscator.obfuscatingTransformersList = [NodeTransformers_1.NodeTransformers.FunctionTransformer, NodeTransformers_1.NodeTransformers.FunctionDeclarationTransformer, NodeTransformers_1.NodeTransformers.CatchClauseTransformer, NodeTransformers_1.NodeTransformers.FunctionDeclarationTransformer, NodeTransformers_1.NodeTransformers.FunctionTransformer, NodeTransformers_1.NodeTransformers.FunctionTransformer, NodeTransformers_1.NodeTransformers.ObjectExpressionTransformer, NodeTransformers_1.NodeTransformers.VariableDeclarationTransformer, NodeTransformers_1.NodeTransformers.LiteralTransformer]; Obfuscator = Obfuscator_1 = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IStackTraceAnalyzer)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IObfuscationEventEmitter)), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.TCustomNodeGroupStorage)), tslib_1.__param(3, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.Factory__INodeTransformer)), tslib_1.__param(4, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Object, Object, Object, Function, Object])], Obfuscator); exports.Obfuscator = Obfuscator; var Obfuscator_1; @@ -2625,8 +2687,8 @@ var _createClass3 = _interopRequireDefault(_createClass2); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -var fs = __webpack_require__(146); -var mkdirp = __webpack_require__(148); +var fs = __webpack_require__(144); +var mkdirp = __webpack_require__(147); var path = __webpack_require__(50); var CLIUtils = function () { @@ -2726,7 +2788,7 @@ var _createClass3 = _interopRequireDefault(_createClass2); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var tslib_1 = __webpack_require__(3); -var commander = __webpack_require__(144); +var commander = __webpack_require__(142); var path = __webpack_require__(50); var SourceMapMode_1 = __webpack_require__(29); var StringArrayEncoding_1 = __webpack_require__(32); @@ -2887,10 +2949,10 @@ var NodeTransformersModule_1 = __webpack_require__(60); var StackTraceAnalyzerModule_1 = __webpack_require__(62); var StoragesModule_1 = __webpack_require__(63); var JavaScriptObfuscatorInternal_1 = __webpack_require__(51); -var ObfuscationEventEmitter_1 = __webpack_require__(87); +var ObfuscationEventEmitter_1 = __webpack_require__(86); var ObfuscationResult_1 = __webpack_require__(52); var Obfuscator_1 = __webpack_require__(53); -var Options_1 = __webpack_require__(107); +var Options_1 = __webpack_require__(106); var SourceMapCorrector_1 = __webpack_require__(54); var InversifyContainerFacade = function () { @@ -2944,7 +3006,7 @@ exports.InversifyContainerFacade = InversifyContainerFacade; "use strict"; -var _map = __webpack_require__(11); +var _map = __webpack_require__(12); var _map2 = _interopRequireDefault(_map); @@ -3028,7 +3090,7 @@ exports.customNodesModule = new inversify_1.ContainerModule(function (bind) { "use strict"; -var _map = __webpack_require__(11); +var _map = __webpack_require__(12); var _map2 = _interopRequireDefault(_map); @@ -3037,9 +3099,9 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); var NodeControlFlowReplacers_1 = __webpack_require__(39); -var BinaryExpressionControlFlowReplacer_1 = __webpack_require__(90); -var CallExpressionControlFlowReplacer_1 = __webpack_require__(91); -var LogicalExpressionControlFlowReplacer_1 = __webpack_require__(92); +var BinaryExpressionControlFlowReplacer_1 = __webpack_require__(89); +var CallExpressionControlFlowReplacer_1 = __webpack_require__(90); +var LogicalExpressionControlFlowReplacer_1 = __webpack_require__(91); exports.controlFlowTransformersModule = new inversify_1.ContainerModule(function (bind) { bind(ServiceIdentifiers_1.ServiceIdentifiers.IControlFlowReplacer).to(BinaryExpressionControlFlowReplacer_1.BinaryExpressionControlFlowReplacer).whenTargetNamed(NodeControlFlowReplacers_1.NodeControlFlowReplacers.BinaryExpressionControlFlowReplacer); bind(ServiceIdentifiers_1.ServiceIdentifiers.IControlFlowReplacer).to(CallExpressionControlFlowReplacer_1.CallExpressionControlFlowReplacer).whenTargetNamed(NodeControlFlowReplacers_1.NodeControlFlowReplacers.CallExpressionControlFlowReplacer); @@ -3064,7 +3126,7 @@ exports.controlFlowTransformersModule = new inversify_1.ContainerModule(function "use strict"; -var _map = __webpack_require__(11); +var _map = __webpack_require__(12); var _map2 = _interopRequireDefault(_map); @@ -3073,18 +3135,18 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); var NodeTransformers_1 = __webpack_require__(40); -var FunctionControlFlowTransformer_1 = __webpack_require__(89); -var BlockStatementControlFlowTransformer_1 = __webpack_require__(88); -var CatchClauseTransformer_1 = __webpack_require__(96); -var FunctionDeclarationTransformer_1 = __webpack_require__(97); -var FunctionTransformer_1 = __webpack_require__(98); -var LabeledStatementTransformer_1 = __webpack_require__(99); -var LiteralTransformer_1 = __webpack_require__(100); -var MemberExpressionTransformer_1 = __webpack_require__(93); -var MethodDefinitionTransformer_1 = __webpack_require__(94); -var ObjectExpressionTransformer_1 = __webpack_require__(101); -var TemplateLiteralTransformer_1 = __webpack_require__(95); -var VariableDeclarationTransformer_1 = __webpack_require__(102); +var FunctionControlFlowTransformer_1 = __webpack_require__(88); +var BlockStatementControlFlowTransformer_1 = __webpack_require__(87); +var CatchClauseTransformer_1 = __webpack_require__(95); +var FunctionDeclarationTransformer_1 = __webpack_require__(96); +var FunctionTransformer_1 = __webpack_require__(97); +var LabeledStatementTransformer_1 = __webpack_require__(98); +var LiteralTransformer_1 = __webpack_require__(99); +var MemberExpressionTransformer_1 = __webpack_require__(92); +var MethodDefinitionTransformer_1 = __webpack_require__(93); +var ObjectExpressionTransformer_1 = __webpack_require__(100); +var TemplateLiteralTransformer_1 = __webpack_require__(94); +var VariableDeclarationTransformer_1 = __webpack_require__(101); exports.nodeTransformersModule = new inversify_1.ContainerModule(function (bind) { bind(ServiceIdentifiers_1.ServiceIdentifiers.INodeTransformer).to(BlockStatementControlFlowTransformer_1.BlockStatementControlFlowTransformer).whenTargetNamed(NodeTransformers_1.NodeTransformers.BlockStatementControlFlowTransformer); bind(ServiceIdentifiers_1.ServiceIdentifiers.INodeTransformer).to(FunctionControlFlowTransformer_1.FunctionControlFlowTransformer).whenTargetNamed(NodeTransformers_1.NodeTransformers.FunctionControlFlowTransformer); @@ -3100,22 +3162,13 @@ exports.nodeTransformersModule = new inversify_1.ContainerModule(function (bind) bind(ServiceIdentifiers_1.ServiceIdentifiers.INodeTransformer).to(VariableDeclarationTransformer_1.VariableDeclarationTransformer).whenTargetNamed(NodeTransformers_1.NodeTransformers.VariableDeclarationTransformer); bind(ServiceIdentifiers_1.ServiceIdentifiers.Factory__INodeTransformer).toFactory(function (context) { var cache = new _map2.default(); - return function (nodeTransformersMap) { - return function (nodeType) { - var nodeTransformers = nodeTransformersMap.get(nodeType) || []; - var instancesArray = []; - nodeTransformers.forEach(function (transformer) { - var nodeTransformer = void 0; - if (cache.has(transformer)) { - nodeTransformer = cache.get(transformer); - } else { - nodeTransformer = context.container.getNamed(ServiceIdentifiers_1.ServiceIdentifiers.INodeTransformer, transformer); - cache.set(transformer, nodeTransformer); - } - instancesArray.push(nodeTransformer); - }); - return instancesArray; - }; + return function (nodeTransformerName) { + if (cache.has(nodeTransformerName)) { + return cache.get(nodeTransformerName); + } + var nodeTransformer = context.container.getNamed(ServiceIdentifiers_1.ServiceIdentifiers.INodeTransformer, nodeTransformerName); + cache.set(nodeTransformerName, nodeTransformer); + return nodeTransformer; }; }); }); @@ -3127,7 +3180,7 @@ exports.nodeTransformersModule = new inversify_1.ContainerModule(function (bind) "use strict"; -var _map = __webpack_require__(11); +var _map = __webpack_require__(12); var _map2 = _interopRequireDefault(_map); @@ -3136,10 +3189,10 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); var NodeObfuscationReplacers_1 = __webpack_require__(23); -var BooleanLiteralReplacer_1 = __webpack_require__(103); -var IdentifierReplacer_1 = __webpack_require__(104); -var NumberLiteralReplacer_1 = __webpack_require__(105); -var StringLiteralReplacer_1 = __webpack_require__(106); +var BooleanLiteralReplacer_1 = __webpack_require__(102); +var IdentifierReplacer_1 = __webpack_require__(103); +var NumberLiteralReplacer_1 = __webpack_require__(104); +var StringLiteralReplacer_1 = __webpack_require__(105); exports.obfuscatingTransformersModule = new inversify_1.ContainerModule(function (bind) { bind(ServiceIdentifiers_1.ServiceIdentifiers.IObfuscatorReplacer).to(BooleanLiteralReplacer_1.BooleanLiteralReplacer).whenTargetNamed(NodeObfuscationReplacers_1.NodeObfuscatorsReplacers.BooleanReplacer); bind(ServiceIdentifiers_1.ServiceIdentifiers.IObfuscatorReplacer).to(IdentifierReplacer_1.IdentifierReplacer).whenTargetNamed(NodeObfuscationReplacers_1.NodeObfuscatorsReplacers.IdentifierReplacer); @@ -3165,7 +3218,7 @@ exports.obfuscatingTransformersModule = new inversify_1.ContainerModule(function "use strict"; -var _map = __webpack_require__(11); +var _map = __webpack_require__(12); var _map2 = _interopRequireDefault(_map); @@ -3174,10 +3227,10 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); var CalleeDataExtractors_1 = __webpack_require__(37); -var FunctionDeclarationCalleeDataExtractor_1 = __webpack_require__(111); -var FunctionExpressionCalleeDataExtractor_1 = __webpack_require__(112); -var ObjectExpressionCalleeDataExtractor_1 = __webpack_require__(113); -var StackTraceAnalyzer_1 = __webpack_require__(110); +var FunctionDeclarationCalleeDataExtractor_1 = __webpack_require__(110); +var FunctionExpressionCalleeDataExtractor_1 = __webpack_require__(111); +var ObjectExpressionCalleeDataExtractor_1 = __webpack_require__(112); +var StackTraceAnalyzer_1 = __webpack_require__(109); exports.stackTraceAnalyzerModule = new inversify_1.ContainerModule(function (bind) { bind(ServiceIdentifiers_1.ServiceIdentifiers.IStackTraceAnalyzer).to(StackTraceAnalyzer_1.StackTraceAnalyzer).inSingletonScope(); bind(ServiceIdentifiers_1.ServiceIdentifiers.ICalleeDataExtractor).to(FunctionDeclarationCalleeDataExtractor_1.FunctionDeclarationCalleeDataExtractor).whenTargetNamed(CalleeDataExtractors_1.CalleeDataExtractors.FunctionDeclarationCalleeDataExtractor); @@ -3205,9 +3258,9 @@ exports.stackTraceAnalyzerModule = new inversify_1.ContainerModule(function (bin var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); -var ControlFlowStorage_1 = __webpack_require__(115); -var CustomNodeGroupStorage_1 = __webpack_require__(116); -var StringArrayStorage_1 = __webpack_require__(117); +var ControlFlowStorage_1 = __webpack_require__(114); +var CustomNodeGroupStorage_1 = __webpack_require__(115); +var StringArrayStorage_1 = __webpack_require__(116); exports.storagesModule = new inversify_1.ContainerModule(function (bind) { bind(ServiceIdentifiers_1.ServiceIdentifiers.TCustomNodeGroupStorage).to(CustomNodeGroupStorage_1.CustomNodeGroupStorage).inSingletonScope(); bind(ServiceIdentifiers_1.ServiceIdentifiers.TStringArrayStorage).to(StringArrayStorage_1.StringArrayStorage).inSingletonScope(); @@ -3252,8 +3305,8 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); -var format = __webpack_require__(19); -var ConsoleOutputDisableExpressionTemplate_1 = __webpack_require__(121); +var format = __webpack_require__(18); +var ConsoleOutputDisableExpressionTemplate_1 = __webpack_require__(120); var Initializable_1 = __webpack_require__(10); var AbstractCustomNode_1 = __webpack_require__(13); var NodeUtils_1 = __webpack_require__(8); @@ -3298,7 +3351,7 @@ exports.ConsoleOutputDisableExpressionNode = ConsoleOutputDisableExpressionNode; "use strict"; -var _map = __webpack_require__(11); +var _map = __webpack_require__(12); var _map2 = _interopRequireDefault(_map); @@ -3909,9 +3962,9 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); -var format = __webpack_require__(19); +var format = __webpack_require__(18); var Initializable_1 = __webpack_require__(10); -var DebufProtectionFunctionCallTemplate_1 = __webpack_require__(122); +var DebufProtectionFunctionCallTemplate_1 = __webpack_require__(121); var AbstractCustomNode_1 = __webpack_require__(13); var NodeUtils_1 = __webpack_require__(8); var DebugProtectionFunctionCallNode = function (_AbstractCustomNode_) { @@ -3978,9 +4031,9 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); -var format = __webpack_require__(19); +var format = __webpack_require__(18); var Initializable_1 = __webpack_require__(10); -var DebugProtectionFunctionIntervalTemplate_1 = __webpack_require__(123); +var DebugProtectionFunctionIntervalTemplate_1 = __webpack_require__(122); var AbstractCustomNode_1 = __webpack_require__(13); var NodeUtils_1 = __webpack_require__(8); var DebugProtectionFunctionIntervalNode = function (_AbstractCustomNode_) { @@ -4047,9 +4100,9 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); -var format = __webpack_require__(19); +var format = __webpack_require__(18); var Initializable_1 = __webpack_require__(10); -var DebugProtectionFunctionTemplate_1 = __webpack_require__(124); +var DebugProtectionFunctionTemplate_1 = __webpack_require__(123); var AbstractCustomNode_1 = __webpack_require__(13); var NodeUtils_1 = __webpack_require__(8); var DebugProtectionFunctionNode = function (_AbstractCustomNode_) { @@ -4091,7 +4144,7 @@ exports.DebugProtectionFunctionNode = DebugProtectionFunctionNode; "use strict"; -var _map = __webpack_require__(11); +var _map = __webpack_require__(12); var _map2 = _interopRequireDefault(_map); @@ -4218,9 +4271,9 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); -var format = __webpack_require__(19); +var format = __webpack_require__(18); var Initializable_1 = __webpack_require__(10); -var DomainLockNodeTemplate_1 = __webpack_require__(125); +var DomainLockNodeTemplate_1 = __webpack_require__(124); var AbstractCustomNode_1 = __webpack_require__(13); var CryptUtils_1 = __webpack_require__(34); var NodeUtils_1 = __webpack_require__(8); @@ -4274,7 +4327,7 @@ exports.DomainLockNode = DomainLockNode; "use strict"; -var _map = __webpack_require__(11); +var _map = __webpack_require__(12); var _map2 = _interopRequireDefault(_map); @@ -4394,10 +4447,10 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); -var format = __webpack_require__(19); +var format = __webpack_require__(18); var ObfuscationEvents_1 = __webpack_require__(22); var Initializable_1 = __webpack_require__(10); -var SingleNodeCallControllerTemplate_1 = __webpack_require__(120); +var SingleNodeCallControllerTemplate_1 = __webpack_require__(119); var NoCustomNodes_1 = __webpack_require__(31); var AbstractCustomNode_1 = __webpack_require__(13); var JavaScriptObfuscator_1 = __webpack_require__(25); @@ -4473,10 +4526,10 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); -var format = __webpack_require__(19); +var format = __webpack_require__(18); var Initializable_1 = __webpack_require__(10); var NoCustomNodes_1 = __webpack_require__(31); -var SelfDefendingTemplate_1 = __webpack_require__(126); +var SelfDefendingTemplate_1 = __webpack_require__(125); var AbstractCustomNode_1 = __webpack_require__(13); var JavaScriptObfuscator_1 = __webpack_require__(25); var NodeUtils_1 = __webpack_require__(8); @@ -4521,7 +4574,7 @@ exports.SelfDefendingUnicodeNode = SelfDefendingUnicodeNode; "use strict"; -var _map = __webpack_require__(11); +var _map = __webpack_require__(12); var _map2 = _interopRequireDefault(_map); @@ -4641,16 +4694,16 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); -var format = __webpack_require__(19); +var format = __webpack_require__(18); var StringArrayEncoding_1 = __webpack_require__(32); var Initializable_1 = __webpack_require__(10); var NoCustomNodes_1 = __webpack_require__(31); -var AtobTemplate_1 = __webpack_require__(118); -var Rc4Template_1 = __webpack_require__(119); -var SelfDefendingTemplate_1 = __webpack_require__(127); -var StringArrayBase64DecodeNodeTemplate_1 = __webpack_require__(128); -var StringArrayCallsWrapperTemplate_1 = __webpack_require__(129); -var StringArrayRC4DecodeNodeTemplate_1 = __webpack_require__(130); +var AtobTemplate_1 = __webpack_require__(117); +var Rc4Template_1 = __webpack_require__(118); +var SelfDefendingTemplate_1 = __webpack_require__(126); +var StringArrayBase64DecodeNodeTemplate_1 = __webpack_require__(127); +var StringArrayCallsWrapperTemplate_1 = __webpack_require__(128); +var StringArrayRC4DecodeNodeTemplate_1 = __webpack_require__(129); var AbstractCustomNode_1 = __webpack_require__(13); var JavaScriptObfuscator_1 = __webpack_require__(25); var NodeUtils_1 = __webpack_require__(8); @@ -4759,9 +4812,9 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); -var format = __webpack_require__(19); +var format = __webpack_require__(18); var Initializable_1 = __webpack_require__(10); -var StringArrayTemplate_1 = __webpack_require__(131); +var StringArrayTemplate_1 = __webpack_require__(130); var AbstractCustomNode_1 = __webpack_require__(13); var NodeUtils_1 = __webpack_require__(8); var StringArrayNode = function (_AbstractCustomNode_) { @@ -4839,11 +4892,11 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); -var format = __webpack_require__(19); +var format = __webpack_require__(18); var Initializable_1 = __webpack_require__(10); var NoCustomNodes_1 = __webpack_require__(31); -var SelfDefendingTemplate_1 = __webpack_require__(132); -var StringArrayRotateFunctionTemplate_1 = __webpack_require__(133); +var SelfDefendingTemplate_1 = __webpack_require__(131); +var StringArrayRotateFunctionTemplate_1 = __webpack_require__(132); var AbstractCustomNode_1 = __webpack_require__(13); var JavaScriptObfuscator_1 = __webpack_require__(25); var NodeUtils_1 = __webpack_require__(8); @@ -4907,7 +4960,7 @@ exports.StringArrayRotateFunctionNode = StringArrayRotateFunctionNode; "use strict"; -var _map = __webpack_require__(11); +var _map = __webpack_require__(12); var _map2 = _interopRequireDefault(_map); @@ -5017,19 +5070,6 @@ exports.StringArrayCustomNodeGroup = StringArrayCustomNodeGroup; "use strict"; -var Utils_1 = __webpack_require__(14); -exports.VisitorDirection = Utils_1.Utils.strEnumify({ - enter: 'enter', - leave: 'leave' -}); - -/***/ }), -/* 87 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - var _getPrototypeOf = __webpack_require__(5); var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); @@ -5050,7 +5090,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); -var events_1 = __webpack_require__(145); +var events_1 = __webpack_require__(143); inversify_1.decorate(inversify_1.injectable(), events_1.EventEmitter); var ObfuscationEventEmitter = function (_events_1$EventEmitte) { (0, _inherits3.default)(ObfuscationEventEmitter, _events_1$EventEmitte); @@ -5066,7 +5106,7 @@ ObfuscationEventEmitter = tslib_1.__decorate([inversify_1.injectable(), tslib_1. exports.ObfuscationEventEmitter = ObfuscationEventEmitter; /***/ }), -/* 88 */ +/* 87 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -5103,7 +5143,7 @@ var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); var CustomNodes_1 = __webpack_require__(15); var AbstractNodeTransformer_1 = __webpack_require__(16); -var Node_1 = __webpack_require__(12); +var Node_1 = __webpack_require__(11); var RandomGeneratorUtils_1 = __webpack_require__(9); var Utils_1 = __webpack_require__(14); var BlockStatementControlFlowTransformer = BlockStatementControlFlowTransformer_1 = function (_AbstractNodeTransfor) { @@ -5119,8 +5159,21 @@ var BlockStatementControlFlowTransformer = BlockStatementControlFlowTransformer_ } (0, _createClass3.default)(BlockStatementControlFlowTransformer, [{ + key: "getVisitor", + value: function getVisitor() { + var _this2 = this; + + return { + leave: function leave(node, parentNode) { + if (Node_1.Node.isBlockStatementNode(node)) { + _this2.transformNode(node, parentNode); + } + } + }; + } + }, { key: "transformNode", - value: function transformNode(blockStatementNode) { + value: function transformNode(blockStatementNode, parentNode) { if (RandomGeneratorUtils_1.RandomGeneratorUtils.getRandomFloat(0, 1) > this.options.controlFlowFlatteningThreshold || BlockStatementControlFlowTransformer_1.blockStatementHasProhibitedStatements(blockStatementNode)) { return blockStatementNode; } @@ -5154,13 +5207,13 @@ exports.BlockStatementControlFlowTransformer = BlockStatementControlFlowTransfor var BlockStatementControlFlowTransformer_1; /***/ }), -/* 89 */ +/* 88 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var _map = __webpack_require__(11); +var _map = __webpack_require__(12); var _map2 = _interopRequireDefault(_map); @@ -5191,9 +5244,9 @@ var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); var estraverse = __webpack_require__(17); var CustomNodes_1 = __webpack_require__(15); -var NodeType_1 = __webpack_require__(18); +var NodeType_1 = __webpack_require__(19); var AbstractNodeTransformer_1 = __webpack_require__(16); -var Node_1 = __webpack_require__(12); +var Node_1 = __webpack_require__(11); var NodeAppender_1 = __webpack_require__(26); var NodeControlFlowReplacers_1 = __webpack_require__(39); var NodeUtils_1 = __webpack_require__(8); @@ -5215,8 +5268,21 @@ var FunctionControlFlowTransformer = FunctionControlFlowTransformer_1 = function } (0, _createClass3.default)(FunctionControlFlowTransformer, [{ + key: "getVisitor", + value: function getVisitor() { + var _this2 = this; + + return { + leave: function leave(node, parentNode) { + if (Node_1.Node.isFunctionDeclarationNode(node) || Node_1.Node.isFunctionExpressionNode(node)) { + _this2.transformNode(node, parentNode); + } + } + }; + } + }, { key: "transformNode", - value: function transformNode(functionNode) { + value: function transformNode(functionNode, parentNode) { if (Node_1.Node.isArrowFunctionExpressionNode(functionNode)) { return functionNode; } @@ -5250,18 +5316,18 @@ var FunctionControlFlowTransformer = FunctionControlFlowTransformer_1 = function }, { key: "transformFunctionBody", value: function transformFunctionBody(functionNodeBody, controlFlowStorage) { - var _this2 = this; + var _this3 = this; estraverse.replace(functionNodeBody, { enter: function enter(node, parentNode) { if (!FunctionControlFlowTransformer_1.controlFlowReplacersMap.has(node.type)) { return node; } - if (RandomGeneratorUtils_1.RandomGeneratorUtils.getRandomFloat(0, 1) > _this2.options.controlFlowFlatteningThreshold) { + if (RandomGeneratorUtils_1.RandomGeneratorUtils.getRandomFloat(0, 1) > _this3.options.controlFlowFlatteningThreshold) { return node; } var controlFlowReplacerName = FunctionControlFlowTransformer_1.controlFlowReplacersMap.get(node.type); - return tslib_1.__assign({}, _this2.controlFlowReplacerFactory(controlFlowReplacerName).replace(node, parentNode, controlFlowStorage), { parentNode: parentNode }); + return tslib_1.__assign({}, _this3.controlFlowReplacerFactory(controlFlowReplacerName).replace(node, parentNode, controlFlowStorage), { parentNode: parentNode }); } }); } @@ -5293,7 +5359,7 @@ exports.FunctionControlFlowTransformer = FunctionControlFlowTransformer; var FunctionControlFlowTransformer_1; /***/ }), -/* 90 */ +/* 89 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -5352,7 +5418,7 @@ exports.BinaryExpressionControlFlowReplacer = BinaryExpressionControlFlowReplace var BinaryExpressionControlFlowReplacer_1; /***/ }), -/* 91 */ +/* 90 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -5385,7 +5451,7 @@ var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); var CustomNodes_1 = __webpack_require__(15); var AbstractControlFlowReplacer_1 = __webpack_require__(41); -var Node_1 = __webpack_require__(12); +var Node_1 = __webpack_require__(11); var CallExpressionControlFlowReplacer = CallExpressionControlFlowReplacer_1 = function (_AbstractControlFlowR) { (0, _inherits3.default)(CallExpressionControlFlowReplacer, _AbstractControlFlowR); @@ -5428,7 +5494,7 @@ exports.CallExpressionControlFlowReplacer = CallExpressionControlFlowReplacer; var CallExpressionControlFlowReplacer_1; /***/ }), -/* 92 */ +/* 91 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -5461,7 +5527,7 @@ var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); var CustomNodes_1 = __webpack_require__(15); var ExpressionWithOperatorControlFlowReplacer_1 = __webpack_require__(42); -var Node_1 = __webpack_require__(12); +var Node_1 = __webpack_require__(11); var NodeUtils_1 = __webpack_require__(8); var LogicalExpressionControlFlowReplacer = LogicalExpressionControlFlowReplacer_1 = function (_ExpressionWithOperat) { (0, _inherits3.default)(LogicalExpressionControlFlowReplacer, _ExpressionWithOperat); @@ -5504,6 +5570,84 @@ LogicalExpressionControlFlowReplacer = LogicalExpressionControlFlowReplacer_1 = exports.LogicalExpressionControlFlowReplacer = LogicalExpressionControlFlowReplacer; var LogicalExpressionControlFlowReplacer_1; +/***/ }), +/* 92 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _getPrototypeOf = __webpack_require__(5); + +var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); + +var _classCallCheck2 = __webpack_require__(0); + +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = __webpack_require__(1); + +var _createClass3 = _interopRequireDefault(_createClass2); + +var _possibleConstructorReturn2 = __webpack_require__(7); + +var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + +var _inherits2 = __webpack_require__(6); + +var _inherits3 = _interopRequireDefault(_inherits2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var tslib_1 = __webpack_require__(3); +var inversify_1 = __webpack_require__(2); +var ServiceIdentifiers_1 = __webpack_require__(4); +var NodeType_1 = __webpack_require__(19); +var AbstractNodeTransformer_1 = __webpack_require__(16); +var Node_1 = __webpack_require__(11); +var MemberExpressionTransformer = function (_AbstractNodeTransfor) { + (0, _inherits3.default)(MemberExpressionTransformer, _AbstractNodeTransfor); + + function MemberExpressionTransformer(options) { + (0, _classCallCheck3.default)(this, MemberExpressionTransformer); + return (0, _possibleConstructorReturn3.default)(this, (MemberExpressionTransformer.__proto__ || (0, _getPrototypeOf2.default)(MemberExpressionTransformer)).call(this, options)); + } + + (0, _createClass3.default)(MemberExpressionTransformer, [{ + key: "getVisitor", + value: function getVisitor() { + var _this2 = this; + + return { + enter: function enter(node, parentNode) { + if (Node_1.Node.isMemberExpressionNode(node)) { + _this2.transformNode(node, parentNode); + } + } + }; + } + }, { + key: "transformNode", + value: function transformNode(memberExpressionNode, parentNode) { + if (Node_1.Node.isIdentifierNode(memberExpressionNode.property)) { + if (memberExpressionNode.computed) { + return memberExpressionNode; + } + memberExpressionNode.computed = true; + memberExpressionNode.property = { + type: NodeType_1.NodeType.Literal, + value: memberExpressionNode.property.name, + raw: "'" + memberExpressionNode.property.name + "'" + }; + } + return memberExpressionNode; + } + }]); + return MemberExpressionTransformer; +}(AbstractNodeTransformer_1.AbstractNodeTransformer); +MemberExpressionTransformer = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Object])], MemberExpressionTransformer); +exports.MemberExpressionTransformer = MemberExpressionTransformer; + /***/ }), /* 93 */ /***/ (function(module, exports, __webpack_require__) { @@ -5536,74 +5680,9 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); -var NodeType_1 = __webpack_require__(18); +var NodeType_1 = __webpack_require__(19); var AbstractNodeTransformer_1 = __webpack_require__(16); -var Node_1 = __webpack_require__(12); -var MemberExpressionTransformer = function (_AbstractNodeTransfor) { - (0, _inherits3.default)(MemberExpressionTransformer, _AbstractNodeTransfor); - - function MemberExpressionTransformer(options) { - (0, _classCallCheck3.default)(this, MemberExpressionTransformer); - return (0, _possibleConstructorReturn3.default)(this, (MemberExpressionTransformer.__proto__ || (0, _getPrototypeOf2.default)(MemberExpressionTransformer)).call(this, options)); - } - - (0, _createClass3.default)(MemberExpressionTransformer, [{ - key: "transformNode", - value: function transformNode(memberExpressionNode) { - if (Node_1.Node.isIdentifierNode(memberExpressionNode.property)) { - if (memberExpressionNode.computed) { - return memberExpressionNode; - } - memberExpressionNode.computed = true; - memberExpressionNode.property = { - type: NodeType_1.NodeType.Literal, - value: memberExpressionNode.property.name, - raw: "'" + memberExpressionNode.property.name + "'" - }; - } - return memberExpressionNode; - } - }]); - return MemberExpressionTransformer; -}(AbstractNodeTransformer_1.AbstractNodeTransformer); -MemberExpressionTransformer = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Object])], MemberExpressionTransformer); -exports.MemberExpressionTransformer = MemberExpressionTransformer; - -/***/ }), -/* 94 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _getPrototypeOf = __webpack_require__(5); - -var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); - -var _classCallCheck2 = __webpack_require__(0); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _createClass2 = __webpack_require__(1); - -var _createClass3 = _interopRequireDefault(_createClass2); - -var _possibleConstructorReturn2 = __webpack_require__(7); - -var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); - -var _inherits2 = __webpack_require__(6); - -var _inherits3 = _interopRequireDefault(_inherits2); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var tslib_1 = __webpack_require__(3); -var inversify_1 = __webpack_require__(2); -var ServiceIdentifiers_1 = __webpack_require__(4); -var NodeType_1 = __webpack_require__(18); -var AbstractNodeTransformer_1 = __webpack_require__(16); -var Node_1 = __webpack_require__(12); +var Node_1 = __webpack_require__(11); var MethodDefinitionTransformer = MethodDefinitionTransformer_1 = function (_AbstractNodeTransfor) { (0, _inherits3.default)(MethodDefinitionTransformer, _AbstractNodeTransfor); @@ -5613,6 +5692,19 @@ var MethodDefinitionTransformer = MethodDefinitionTransformer_1 = function (_Abs } (0, _createClass3.default)(MethodDefinitionTransformer, [{ + key: "getVisitor", + value: function getVisitor() { + var _this2 = this; + + return { + enter: function enter(node, parentNode) { + if (Node_1.Node.isMethodDefinitionNode(node)) { + _this2.transformNode(node, parentNode); + } + } + }; + } + }, { key: "transformNode", value: function transformNode(methodDefinitionNode, parentNode) { if (Node_1.Node.isIdentifierNode(methodDefinitionNode.key) && !MethodDefinitionTransformer_1.ignoredNames.includes(methodDefinitionNode.key.name) && methodDefinitionNode.computed === false) { @@ -5634,7 +5726,7 @@ exports.MethodDefinitionTransformer = MethodDefinitionTransformer; var MethodDefinitionTransformer_1; /***/ }), -/* 95 */ +/* 94 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -5670,7 +5762,7 @@ var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); var AbstractNodeTransformer_1 = __webpack_require__(16); -var Node_1 = __webpack_require__(12); +var Node_1 = __webpack_require__(11); var Nodes_1 = __webpack_require__(20); var TemplateLiteralTransformer = TemplateLiteralTransformer_1 = function (_AbstractNodeTransfor) { (0, _inherits3.default)(TemplateLiteralTransformer, _AbstractNodeTransfor); @@ -5681,6 +5773,19 @@ var TemplateLiteralTransformer = TemplateLiteralTransformer_1 = function (_Abstr } (0, _createClass3.default)(TemplateLiteralTransformer, [{ + key: "getVisitor", + value: function getVisitor() { + var _this2 = this; + + return { + enter: function enter(node, parentNode) { + if (Node_1.Node.isTemplateLiteralNode(node)) { + _this2.transformNode(node, parentNode); + } + } + }; + } + }, { key: "transformNode", value: function transformNode(templateLiteralNode, parentNode) { var templateLiteralExpressions = templateLiteralNode.expressions; @@ -5765,7 +5870,7 @@ exports.TemplateLiteralTransformer = TemplateLiteralTransformer; var TemplateLiteralTransformer_1; /***/ }), -/* 96 */ +/* 95 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -5799,7 +5904,7 @@ var ServiceIdentifiers_1 = __webpack_require__(4); var estraverse = __webpack_require__(17); var NodeObfuscationReplacers_1 = __webpack_require__(23); var AbstractNodeTransformer_1 = __webpack_require__(16); -var Node_1 = __webpack_require__(12); +var Node_1 = __webpack_require__(11); var CatchClauseTransformer = function (_AbstractNodeTransfor) { (0, _inherits3.default)(CatchClauseTransformer, _AbstractNodeTransfor); @@ -5813,8 +5918,21 @@ var CatchClauseTransformer = function (_AbstractNodeTransfor) { } (0, _createClass3.default)(CatchClauseTransformer, [{ + key: "getVisitor", + value: function getVisitor() { + var _this2 = this; + + return { + enter: function enter(node, parentNode) { + if (Node_1.Node.isCatchClauseNode(node)) { + _this2.transformNode(node, parentNode); + } + } + }; + } + }, { key: "transformNode", - value: function transformNode(catchClauseNode) { + value: function transformNode(catchClauseNode, parentNode) { var nodeIdentifier = this.nodeIdentifier++; this.storeCatchClauseParam(catchClauseNode, nodeIdentifier); this.replaceCatchClauseParam(catchClauseNode, nodeIdentifier); @@ -5830,12 +5948,12 @@ var CatchClauseTransformer = function (_AbstractNodeTransfor) { }, { key: "replaceCatchClauseParam", value: function replaceCatchClauseParam(catchClauseNode, nodeIdentifier) { - var _this2 = this; + var _this3 = this; estraverse.replace(catchClauseNode, { enter: function enter(node, parentNode) { if (Node_1.Node.isReplaceableIdentifierNode(node, parentNode)) { - var newNodeName = _this2.identifierReplacer.replace(node.name, nodeIdentifier); + var newNodeName = _this3.identifierReplacer.replace(node.name, nodeIdentifier); if (node.name !== newNodeName) { node.name = newNodeName; node.obfuscatedNode = true; @@ -5851,7 +5969,7 @@ CatchClauseTransformer = tslib_1.__decorate([inversify_1.injectable(), tslib_1._ exports.CatchClauseTransformer = CatchClauseTransformer; /***/ }), -/* 97 */ +/* 96 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -5861,7 +5979,7 @@ var _getIterator2 = __webpack_require__(21); var _getIterator3 = _interopRequireDefault(_getIterator2); -var _map = __webpack_require__(11); +var _map = __webpack_require__(12); var _map2 = _interopRequireDefault(_map); @@ -5892,9 +6010,9 @@ var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); var estraverse = __webpack_require__(17); var NodeObfuscationReplacers_1 = __webpack_require__(23); -var NodeType_1 = __webpack_require__(18); +var NodeType_1 = __webpack_require__(19); var AbstractNodeTransformer_1 = __webpack_require__(16); -var Node_1 = __webpack_require__(12); +var Node_1 = __webpack_require__(11); var NodeUtils_1 = __webpack_require__(8); var FunctionDeclarationTransformer = function (_AbstractNodeTransfor) { (0, _inherits3.default)(FunctionDeclarationTransformer, _AbstractNodeTransfor); @@ -5910,6 +6028,19 @@ var FunctionDeclarationTransformer = function (_AbstractNodeTransfor) { } (0, _createClass3.default)(FunctionDeclarationTransformer, [{ + key: "getVisitor", + value: function getVisitor() { + var _this2 = this; + + return { + enter: function enter(node, parentNode) { + if (Node_1.Node.isFunctionDeclarationNode(node)) { + _this2.transformNode(node, parentNode); + } + } + }; + } + }, { key: "transformNode", value: function transformNode(functionDeclarationNode, parentNode) { var nodeIdentifier = this.nodeIdentifier++; @@ -5929,7 +6060,7 @@ var FunctionDeclarationTransformer = function (_AbstractNodeTransfor) { }, { key: "replaceFunctionName", value: function replaceFunctionName(scopeNode, nodeIdentifier) { - var _this2 = this; + var _this3 = this; var replaceableIdentifiersForCurrentScope = void 0; if (this.replaceableIdentifiers.has(scopeNode)) { @@ -5965,7 +6096,7 @@ var FunctionDeclarationTransformer = function (_AbstractNodeTransfor) { estraverse.replace(scopeNode, { enter: function enter(node, parentNode) { if (Node_1.Node.isReplaceableIdentifierNode(node, parentNode)) { - var newNodeName = _this2.identifierReplacer.replace(node.name, nodeIdentifier); + var newNodeName = _this3.identifierReplacer.replace(node.name, nodeIdentifier); if (node.name !== newNodeName) { node.name = newNodeName; } else { @@ -5982,6 +6113,124 @@ var FunctionDeclarationTransformer = function (_AbstractNodeTransfor) { FunctionDeclarationTransformer = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.Factory__IObfuscatorReplacer)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Object])], FunctionDeclarationTransformer); exports.FunctionDeclarationTransformer = FunctionDeclarationTransformer; +/***/ }), +/* 97 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _getPrototypeOf = __webpack_require__(5); + +var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); + +var _classCallCheck2 = __webpack_require__(0); + +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = __webpack_require__(1); + +var _createClass3 = _interopRequireDefault(_createClass2); + +var _possibleConstructorReturn2 = __webpack_require__(7); + +var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + +var _inherits2 = __webpack_require__(6); + +var _inherits3 = _interopRequireDefault(_inherits2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var tslib_1 = __webpack_require__(3); +var inversify_1 = __webpack_require__(2); +var ServiceIdentifiers_1 = __webpack_require__(4); +var estraverse = __webpack_require__(17); +var NodeObfuscationReplacers_1 = __webpack_require__(23); +var AbstractNodeTransformer_1 = __webpack_require__(16); +var Node_1 = __webpack_require__(11); +var FunctionTransformer = function (_AbstractNodeTransfor) { + (0, _inherits3.default)(FunctionTransformer, _AbstractNodeTransfor); + + function FunctionTransformer(nodeObfuscatorsReplacersFactory, options) { + (0, _classCallCheck3.default)(this, FunctionTransformer); + + var _this = (0, _possibleConstructorReturn3.default)(this, (FunctionTransformer.__proto__ || (0, _getPrototypeOf2.default)(FunctionTransformer)).call(this, options)); + + _this.identifierReplacer = nodeObfuscatorsReplacersFactory(NodeObfuscationReplacers_1.NodeObfuscatorsReplacers.IdentifierReplacer); + return _this; + } + + (0, _createClass3.default)(FunctionTransformer, [{ + key: "getVisitor", + value: function getVisitor() { + var _this2 = this; + + return { + enter: function enter(node, parentNode) { + if (Node_1.Node.isFunctionDeclarationNode(node) || Node_1.Node.isFunctionExpressionNode(node) || Node_1.Node.isArrowFunctionExpressionNode(node)) { + _this2.transformNode(node, parentNode); + } + } + }; + } + }, { + key: "transformNode", + value: function transformNode(functionNode, parentNode) { + var nodeIdentifier = this.nodeIdentifier++; + this.storeFunctionParams(functionNode, nodeIdentifier); + this.replaceFunctionParams(functionNode, nodeIdentifier); + return functionNode; + } + }, { + key: "storeFunctionParams", + value: function storeFunctionParams(functionNode, nodeIdentifier) { + var _this3 = this; + + functionNode.params.forEach(function (paramsNode) { + if (Node_1.Node.isObjectPatternNode(paramsNode)) { + return estraverse.VisitorOption.Skip; + } + estraverse.traverse(paramsNode, { + enter: function enter(node) { + if (Node_1.Node.isAssignmentPatternNode(node) && Node_1.Node.isIdentifierNode(node.left)) { + _this3.identifierReplacer.storeNames(node.left.name, nodeIdentifier); + return estraverse.VisitorOption.Skip; + } + if (Node_1.Node.isIdentifierNode(node)) { + _this3.identifierReplacer.storeNames(node.name, nodeIdentifier); + } + } + }); + }); + } + }, { + key: "replaceFunctionParams", + value: function replaceFunctionParams(functionNode, nodeIdentifier) { + var _this4 = this; + + var traverseVisitor = { + enter: function enter(node, parentNode) { + if (Node_1.Node.isReplaceableIdentifierNode(node, parentNode)) { + var newNodeName = _this4.identifierReplacer.replace(node.name, nodeIdentifier); + if (node.name !== newNodeName) { + node.name = newNodeName; + node.obfuscatedNode = true; + } + } + } + }; + functionNode.params.forEach(function (paramsNode) { + return estraverse.replace(paramsNode, traverseVisitor); + }); + estraverse.replace(functionNode.body, traverseVisitor); + } + }]); + return FunctionTransformer; +}(AbstractNodeTransformer_1.AbstractNodeTransformer); +FunctionTransformer = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.Factory__IObfuscatorReplacer)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Object])], FunctionTransformer); +exports.FunctionTransformer = FunctionTransformer; + /***/ }), /* 98 */ /***/ (function(module, exports, __webpack_require__) { @@ -6017,112 +6266,7 @@ var ServiceIdentifiers_1 = __webpack_require__(4); var estraverse = __webpack_require__(17); var NodeObfuscationReplacers_1 = __webpack_require__(23); var AbstractNodeTransformer_1 = __webpack_require__(16); -var Node_1 = __webpack_require__(12); -var FunctionTransformer = function (_AbstractNodeTransfor) { - (0, _inherits3.default)(FunctionTransformer, _AbstractNodeTransfor); - - function FunctionTransformer(nodeObfuscatorsReplacersFactory, options) { - (0, _classCallCheck3.default)(this, FunctionTransformer); - - var _this = (0, _possibleConstructorReturn3.default)(this, (FunctionTransformer.__proto__ || (0, _getPrototypeOf2.default)(FunctionTransformer)).call(this, options)); - - _this.identifierReplacer = nodeObfuscatorsReplacersFactory(NodeObfuscationReplacers_1.NodeObfuscatorsReplacers.IdentifierReplacer); - return _this; - } - - (0, _createClass3.default)(FunctionTransformer, [{ - key: "transformNode", - value: function transformNode(functionNode) { - var nodeIdentifier = this.nodeIdentifier++; - this.storeFunctionParams(functionNode, nodeIdentifier); - this.replaceFunctionParams(functionNode, nodeIdentifier); - return functionNode; - } - }, { - key: "storeFunctionParams", - value: function storeFunctionParams(functionNode, nodeIdentifier) { - var _this2 = this; - - functionNode.params.forEach(function (paramsNode) { - if (Node_1.Node.isObjectPatternNode(paramsNode)) { - return estraverse.VisitorOption.Skip; - } - estraverse.traverse(paramsNode, { - enter: function enter(node) { - if (Node_1.Node.isAssignmentPatternNode(node) && Node_1.Node.isIdentifierNode(node.left)) { - _this2.identifierReplacer.storeNames(node.left.name, nodeIdentifier); - return estraverse.VisitorOption.Skip; - } - if (Node_1.Node.isIdentifierNode(node)) { - _this2.identifierReplacer.storeNames(node.name, nodeIdentifier); - } - } - }); - }); - } - }, { - key: "replaceFunctionParams", - value: function replaceFunctionParams(functionNode, nodeIdentifier) { - var _this3 = this; - - var traverseVisitor = { - enter: function enter(node, parentNode) { - if (Node_1.Node.isReplaceableIdentifierNode(node, parentNode)) { - var newNodeName = _this3.identifierReplacer.replace(node.name, nodeIdentifier); - if (node.name !== newNodeName) { - node.name = newNodeName; - node.obfuscatedNode = true; - } - } - } - }; - functionNode.params.forEach(function (paramsNode) { - return estraverse.replace(paramsNode, traverseVisitor); - }); - estraverse.replace(functionNode.body, traverseVisitor); - } - }]); - return FunctionTransformer; -}(AbstractNodeTransformer_1.AbstractNodeTransformer); -FunctionTransformer = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.Factory__IObfuscatorReplacer)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Function, Object])], FunctionTransformer); -exports.FunctionTransformer = FunctionTransformer; - -/***/ }), -/* 99 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _getPrototypeOf = __webpack_require__(5); - -var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); - -var _classCallCheck2 = __webpack_require__(0); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _createClass2 = __webpack_require__(1); - -var _createClass3 = _interopRequireDefault(_createClass2); - -var _possibleConstructorReturn2 = __webpack_require__(7); - -var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); - -var _inherits2 = __webpack_require__(6); - -var _inherits3 = _interopRequireDefault(_inherits2); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var tslib_1 = __webpack_require__(3); -var inversify_1 = __webpack_require__(2); -var ServiceIdentifiers_1 = __webpack_require__(4); -var estraverse = __webpack_require__(17); -var NodeObfuscationReplacers_1 = __webpack_require__(23); -var AbstractNodeTransformer_1 = __webpack_require__(16); -var Node_1 = __webpack_require__(12); +var Node_1 = __webpack_require__(11); var LabeledStatementTransformer = function (_AbstractNodeTransfor) { (0, _inherits3.default)(LabeledStatementTransformer, _AbstractNodeTransfor); @@ -6136,8 +6280,21 @@ var LabeledStatementTransformer = function (_AbstractNodeTransfor) { } (0, _createClass3.default)(LabeledStatementTransformer, [{ + key: "getVisitor", + value: function getVisitor() { + var _this2 = this; + + return { + enter: function enter(node, parentNode) { + if (Node_1.Node.isLabeledStatementNode(node)) { + _this2.transformNode(node, parentNode); + } + } + }; + } + }, { key: "transformNode", - value: function transformNode(labeledStatementNode) { + value: function transformNode(labeledStatementNode, parentNode) { var nodeIdentifier = this.nodeIdentifier++; this.storeLabeledStatementName(labeledStatementNode, nodeIdentifier); this.replaceLabeledStatementName(labeledStatementNode, nodeIdentifier); @@ -6151,12 +6308,12 @@ var LabeledStatementTransformer = function (_AbstractNodeTransfor) { }, { key: "replaceLabeledStatementName", value: function replaceLabeledStatementName(labeledStatementNode, nodeIdentifier) { - var _this2 = this; + var _this3 = this; estraverse.replace(labeledStatementNode, { enter: function enter(node, parentNode) { if (Node_1.Node.isLabelIdentifierNode(node, parentNode)) { - node.name = _this2.identifierReplacer.replace(node.name, nodeIdentifier); + node.name = _this3.identifierReplacer.replace(node.name, nodeIdentifier); } } }); @@ -6168,13 +6325,13 @@ LabeledStatementTransformer = tslib_1.__decorate([inversify_1.injectable(), tsli exports.LabeledStatementTransformer = LabeledStatementTransformer; /***/ }), -/* 100 */ +/* 99 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var _typeof2 = __webpack_require__(141); +var _typeof2 = __webpack_require__(139); var _typeof3 = _interopRequireDefault(_typeof2); @@ -6206,7 +6363,7 @@ var ServiceIdentifiers_1 = __webpack_require__(4); var escodegen = __webpack_require__(28); var NodeObfuscationReplacers_1 = __webpack_require__(23); var AbstractNodeTransformer_1 = __webpack_require__(16); -var Node_1 = __webpack_require__(12); +var Node_1 = __webpack_require__(11); var LiteralTransformer = function (_AbstractNodeTransfor) { (0, _inherits3.default)(LiteralTransformer, _AbstractNodeTransfor); @@ -6220,6 +6377,19 @@ var LiteralTransformer = function (_AbstractNodeTransfor) { } (0, _createClass3.default)(LiteralTransformer, [{ + key: "getVisitor", + value: function getVisitor() { + var _this2 = this; + + return { + enter: function enter(node, parentNode) { + if (Node_1.Node.isLiteralNode(node)) { + _this2.transformNode(node, parentNode); + } + } + }; + } + }, { key: "transformNode", value: function transformNode(literalNode, parentNode) { if (Node_1.Node.isPropertyNode(parentNode) && parentNode.key === literalNode) { @@ -6252,7 +6422,7 @@ LiteralTransformer = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__par exports.LiteralTransformer = LiteralTransformer; /***/ }), -/* 101 */ +/* 100 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -6284,9 +6454,9 @@ var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); var escodegen = __webpack_require__(28); -var NodeType_1 = __webpack_require__(18); +var NodeType_1 = __webpack_require__(19); var AbstractNodeTransformer_1 = __webpack_require__(16); -var Node_1 = __webpack_require__(12); +var Node_1 = __webpack_require__(11); var Utils_1 = __webpack_require__(14); var ObjectExpressionTransformer = ObjectExpressionTransformer_1 = function (_AbstractNodeTransfor) { (0, _inherits3.default)(ObjectExpressionTransformer, _AbstractNodeTransfor); @@ -6297,8 +6467,21 @@ var ObjectExpressionTransformer = ObjectExpressionTransformer_1 = function (_Abs } (0, _createClass3.default)(ObjectExpressionTransformer, [{ + key: "getVisitor", + value: function getVisitor() { + var _this2 = this; + + return { + enter: function enter(node, parentNode) { + if (Node_1.Node.isObjectExpressionNode(node)) { + _this2.transformNode(node, parentNode); + } + } + }; + } + }, { key: "transformNode", - value: function transformNode(objectExpressionNode) { + value: function transformNode(objectExpressionNode, parentNode) { objectExpressionNode.properties.forEach(function (property) { if (property.shorthand) { property.shorthand = false; @@ -6343,7 +6526,7 @@ exports.ObjectExpressionTransformer = ObjectExpressionTransformer; var ObjectExpressionTransformer_1; /***/ }), -/* 102 */ +/* 101 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -6353,7 +6536,7 @@ var _getIterator2 = __webpack_require__(21); var _getIterator3 = _interopRequireDefault(_getIterator2); -var _map = __webpack_require__(11); +var _map = __webpack_require__(12); var _map2 = _interopRequireDefault(_map); @@ -6384,9 +6567,9 @@ var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); var estraverse = __webpack_require__(17); var NodeObfuscationReplacers_1 = __webpack_require__(23); -var NodeType_1 = __webpack_require__(18); +var NodeType_1 = __webpack_require__(19); var AbstractNodeTransformer_1 = __webpack_require__(16); -var Node_1 = __webpack_require__(12); +var Node_1 = __webpack_require__(11); var NodeUtils_1 = __webpack_require__(8); var VariableDeclarationTransformer = function (_AbstractNodeTransfor) { (0, _inherits3.default)(VariableDeclarationTransformer, _AbstractNodeTransfor); @@ -6402,6 +6585,19 @@ var VariableDeclarationTransformer = function (_AbstractNodeTransfor) { } (0, _createClass3.default)(VariableDeclarationTransformer, [{ + key: "getVisitor", + value: function getVisitor() { + var _this2 = this; + + return { + enter: function enter(node, parentNode) { + if (Node_1.Node.isVariableDeclarationNode(node)) { + _this2.transformNode(node, parentNode); + } + } + }; + } + }, { key: "transformNode", value: function transformNode(variableDeclarationNode, parentNode) { var blockScopeOfVariableDeclarationNode = NodeUtils_1.NodeUtils.getBlockScopesOfNode(variableDeclarationNode)[0]; @@ -6417,7 +6613,7 @@ var VariableDeclarationTransformer = function (_AbstractNodeTransfor) { }, { key: "storeVariableNames", value: function storeVariableNames(variableDeclarationNode, nodeIdentifier) { - var _this2 = this; + var _this3 = this; variableDeclarationNode.declarations.forEach(function (declarationNode) { if (Node_1.Node.isObjectPatternNode(declarationNode.id)) { @@ -6425,7 +6621,7 @@ var VariableDeclarationTransformer = function (_AbstractNodeTransfor) { } NodeUtils_1.NodeUtils.typedTraverse(declarationNode.id, NodeType_1.NodeType.Identifier, { enter: function enter(node) { - return _this2.identifierReplacer.storeNames(node.name, nodeIdentifier); + return _this3.identifierReplacer.storeNames(node.name, nodeIdentifier); } }); }); @@ -6433,7 +6629,7 @@ var VariableDeclarationTransformer = function (_AbstractNodeTransfor) { }, { key: "replaceVariableNames", value: function replaceVariableNames(scopeNode, nodeIdentifier) { - var _this3 = this; + var _this4 = this; var replaceableIdentifiersForCurrentScope = void 0; if (this.replaceableIdentifiers.has(scopeNode)) { @@ -6469,7 +6665,7 @@ var VariableDeclarationTransformer = function (_AbstractNodeTransfor) { estraverse.replace(scopeNode, { enter: function enter(node, parentNode) { if (!node.obfuscatedNode && Node_1.Node.isReplaceableIdentifierNode(node, parentNode)) { - var newNodeName = _this3.identifierReplacer.replace(node.name, nodeIdentifier); + var newNodeName = _this4.identifierReplacer.replace(node.name, nodeIdentifier); if (node.name !== newNodeName) { node.name = newNodeName; } else { @@ -6487,7 +6683,7 @@ VariableDeclarationTransformer = tslib_1.__decorate([inversify_1.injectable(), t exports.VariableDeclarationTransformer = VariableDeclarationTransformer; /***/ }), -/* 103 */ +/* 102 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -6540,13 +6736,13 @@ BooleanLiteralReplacer = tslib_1.__decorate([inversify_1.injectable(), tslib_1._ exports.BooleanLiteralReplacer = BooleanLiteralReplacer; /***/ }), -/* 104 */ +/* 103 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var _map = __webpack_require__(11); +var _map = __webpack_require__(12); var _map2 = _interopRequireDefault(_map); @@ -6619,13 +6815,13 @@ IdentifierReplacer = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__par exports.IdentifierReplacer = IdentifierReplacer; /***/ }), -/* 105 */ +/* 104 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var _map = __webpack_require__(11); +var _map = __webpack_require__(12); var _map2 = _interopRequireDefault(_map); @@ -6690,13 +6886,13 @@ NumberLiteralReplacer = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__ exports.NumberLiteralReplacer = NumberLiteralReplacer; /***/ }), -/* 106 */ +/* 105 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var _map = __webpack_require__(11); +var _map = __webpack_require__(12); var _map2 = _interopRequireDefault(_map); @@ -6771,9 +6967,9 @@ var StringLiteralReplacer = StringLiteralReplacer_1 = function (_AbstractReplace if (this.stringLiteralHexadecimalIndexCache.has(value)) { return this.stringLiteralHexadecimalIndexCache.get(value); } - var indexOfValue = this.stringArrayStorage.getLength(); - var hexadecimalIndex = "" + Utils_1.Utils.hexadecimalPrefix + Utils_1.Utils.decToHex(indexOfValue); - this.stringArrayStorage.set(this.stringArrayStorage.getLength(), value); + var stringArrayStorageLength = this.stringArrayStorage.getLength(); + var hexadecimalIndex = "" + Utils_1.Utils.hexadecimalPrefix + Utils_1.Utils.decToHex(stringArrayStorageLength); + this.stringArrayStorage.set(stringArrayStorageLength, value); this.stringLiteralHexadecimalIndexCache.set(value, hexadecimalIndex); return hexadecimalIndex; } @@ -6820,13 +7016,13 @@ exports.StringLiteralReplacer = StringLiteralReplacer; var StringLiteralReplacer_1; /***/ }), -/* 107 */ +/* 106 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var _assign = __webpack_require__(135); +var _assign = __webpack_require__(134); var _assign2 = _interopRequireDefault(_assign); @@ -6838,10 +7034,10 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); -var class_validator_1 = __webpack_require__(143); +var class_validator_1 = __webpack_require__(141); var Default_1 = __webpack_require__(43); -var OptionsNormalizer_1 = __webpack_require__(108); -var ValidationErrorsFormatter_1 = __webpack_require__(109); +var OptionsNormalizer_1 = __webpack_require__(107); +var ValidationErrorsFormatter_1 = __webpack_require__(108); var Options = Options_1 = function Options(inputOptions) { (0, _classCallCheck3.default)(this, Options); @@ -6890,7 +7086,7 @@ exports.Options = Options; var Options_1; /***/ }), -/* 108 */ +/* 107 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -7075,7 +7271,7 @@ OptionsNormalizer.normalizerRules = [OptionsNormalizer.controlFlowFlatteningThre exports.OptionsNormalizer = OptionsNormalizer; /***/ }), -/* 109 */ +/* 108 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -7151,7 +7347,7 @@ var ValidationErrorsFormatter = function () { exports.ValidationErrorsFormatter = ValidationErrorsFormatter; /***/ }), -/* 110 */ +/* 109 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -7172,7 +7368,7 @@ var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); var estraverse = __webpack_require__(17); var CalleeDataExtractors_1 = __webpack_require__(37); -var Node_1 = __webpack_require__(12); +var Node_1 = __webpack_require__(11); var NodeUtils_1 = __webpack_require__(8); var StackTraceAnalyzer = StackTraceAnalyzer_1 = function () { function StackTraceAnalyzer(calleeDataExtractorsFactory) { @@ -7258,7 +7454,7 @@ exports.StackTraceAnalyzer = StackTraceAnalyzer; var StackTraceAnalyzer_1; /***/ }), -/* 111 */ +/* 110 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -7290,7 +7486,7 @@ var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); var estraverse = __webpack_require__(17); var AbstractCalleeDataExtractor_1 = __webpack_require__(33); -var Node_1 = __webpack_require__(12); +var Node_1 = __webpack_require__(11); var NodeUtils_1 = __webpack_require__(8); var FunctionDeclarationCalleeDataExtractor = function (_AbstractCalleeDataEx) { (0, _inherits3.default)(FunctionDeclarationCalleeDataExtractor, _AbstractCalleeDataEx); @@ -7336,7 +7532,7 @@ FunctionDeclarationCalleeDataExtractor = tslib_1.__decorate([inversify_1.injecta exports.FunctionDeclarationCalleeDataExtractor = FunctionDeclarationCalleeDataExtractor; /***/ }), -/* 112 */ +/* 111 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -7368,7 +7564,7 @@ var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); var estraverse = __webpack_require__(17); var AbstractCalleeDataExtractor_1 = __webpack_require__(33); -var Node_1 = __webpack_require__(12); +var Node_1 = __webpack_require__(11); var NodeUtils_1 = __webpack_require__(8); var FunctionExpressionCalleeDataExtractor = function (_AbstractCalleeDataEx) { (0, _inherits3.default)(FunctionExpressionCalleeDataExtractor, _AbstractCalleeDataEx); @@ -7417,7 +7613,7 @@ FunctionExpressionCalleeDataExtractor = tslib_1.__decorate([inversify_1.injectab exports.FunctionExpressionCalleeDataExtractor = FunctionExpressionCalleeDataExtractor; /***/ }), -/* 113 */ +/* 112 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -7452,7 +7648,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); var estraverse = __webpack_require__(17); -var Node_1 = __webpack_require__(12); +var Node_1 = __webpack_require__(11); var NodeUtils_1 = __webpack_require__(8); var AbstractCalleeDataExtractor_1 = __webpack_require__(33); var ObjectExpressionCalleeDataExtractor = function (_AbstractCalleeDataEx) { @@ -7572,7 +7768,7 @@ ObjectExpressionCalleeDataExtractor = tslib_1.__decorate([inversify_1.injectable exports.ObjectExpressionCalleeDataExtractor = ObjectExpressionCalleeDataExtractor; /***/ }), -/* 114 */ +/* 113 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -7667,7 +7863,7 @@ ArrayStorage = tslib_1.__decorate([inversify_1.injectable()], ArrayStorage); exports.ArrayStorage = ArrayStorage; /***/ }), -/* 115 */ +/* 114 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -7711,13 +7907,13 @@ var ControlFlowStorage = function (_MapStorage_1$MapStor) { exports.ControlFlowStorage = ControlFlowStorage; /***/ }), -/* 116 */ +/* 115 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var _map = __webpack_require__(11); +var _map = __webpack_require__(12); var _map2 = _interopRequireDefault(_map); @@ -7787,7 +7983,7 @@ exports.CustomNodeGroupStorage = CustomNodeGroupStorage; var CustomNodeGroupStorage_1; /***/ }), -/* 117 */ +/* 116 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -7821,7 +8017,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); -var ArrayStorage_1 = __webpack_require__(114); +var ArrayStorage_1 = __webpack_require__(113); var RandomGeneratorUtils_1 = __webpack_require__(9); var Utils_1 = __webpack_require__(14); var StringArrayStorage = function (_ArrayStorage_1$Array) { @@ -7865,7 +8061,7 @@ StringArrayStorage = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__met exports.StringArrayStorage = StringArrayStorage; /***/ }), -/* 118 */ +/* 117 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -7877,7 +8073,7 @@ function AtobTemplate() { exports.AtobTemplate = AtobTemplate; /***/ }), -/* 119 */ +/* 118 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -7889,7 +8085,7 @@ function Rc4Template() { exports.Rc4Template = Rc4Template; /***/ }), -/* 120 */ +/* 119 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -7901,7 +8097,7 @@ function SingleNodeCallControllerTemplate() { exports.SingleNodeCallControllerTemplate = SingleNodeCallControllerTemplate; /***/ }), -/* 121 */ +/* 120 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -7913,7 +8109,7 @@ function ConsoleOutputDisableExpressionTemplate() { exports.ConsoleOutputDisableExpressionTemplate = ConsoleOutputDisableExpressionTemplate; /***/ }), -/* 122 */ +/* 121 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -7925,7 +8121,7 @@ function DebugProtectionFunctionCallTemplate() { exports.DebugProtectionFunctionCallTemplate = DebugProtectionFunctionCallTemplate; /***/ }), -/* 123 */ +/* 122 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -7937,7 +8133,7 @@ function DebugProtectionFunctionIntervalTemplate() { exports.DebugProtectionFunctionIntervalTemplate = DebugProtectionFunctionIntervalTemplate; /***/ }), -/* 124 */ +/* 123 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -7949,7 +8145,7 @@ function DebugProtectionFunctionTemplate() { exports.DebugProtectionFunctionTemplate = DebugProtectionFunctionTemplate; /***/ }), -/* 125 */ +/* 124 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -7961,7 +8157,7 @@ function DomainLockNodeTemplate() { exports.DomainLockNodeTemplate = DomainLockNodeTemplate; /***/ }), -/* 126 */ +/* 125 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -7974,7 +8170,7 @@ function SelfDefendingTemplate() { exports.SelfDefendingTemplate = SelfDefendingTemplate; /***/ }), -/* 127 */ +/* 126 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -7987,7 +8183,7 @@ function SelfDefendingTemplate() { exports.SelfDefendingTemplate = SelfDefendingTemplate; /***/ }), -/* 128 */ +/* 127 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -7999,7 +8195,7 @@ function StringArrayBase64DecodeNodeTemplate() { exports.StringArrayBase64DecodeNodeTemplate = StringArrayBase64DecodeNodeTemplate; /***/ }), -/* 129 */ +/* 128 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -8011,7 +8207,7 @@ function StringArrayCallsWrapperTemplate() { exports.StringArrayCallsWrapperTemplate = StringArrayCallsWrapperTemplate; /***/ }), -/* 130 */ +/* 129 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -8023,7 +8219,7 @@ function StringArrayRc4DecodeNodeTemplate() { exports.StringArrayRc4DecodeNodeTemplate = StringArrayRc4DecodeNodeTemplate; /***/ }), -/* 131 */ +/* 130 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -8035,7 +8231,7 @@ function StringArrayTemplate() { exports.StringArrayTemplate = StringArrayTemplate; /***/ }), -/* 132 */ +/* 131 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -8048,7 +8244,7 @@ function SelfDefendingTemplate() { exports.SelfDefendingTemplate = SelfDefendingTemplate; /***/ }), -/* 133 */ +/* 132 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -8060,104 +8256,99 @@ function StringArrayRotateFunctionTemplate() { exports.StringArrayRotateFunctionTemplate = StringArrayRotateFunctionTemplate; /***/ }), -/* 134 */ +/* 133 */ /***/ (function(module, exports) { module.exports = require("babel-polyfill"); /***/ }), -/* 135 */ +/* 134 */ /***/ (function(module, exports) { module.exports = require("babel-runtime/core-js/object/assign"); /***/ }), -/* 136 */ +/* 135 */ /***/ (function(module, exports) { module.exports = require("babel-runtime/core-js/object/define-property"); /***/ }), -/* 137 */ +/* 136 */ /***/ (function(module, exports) { module.exports = require("babel-runtime/core-js/object/get-own-property-descriptor"); /***/ }), -/* 138 */ +/* 137 */ /***/ (function(module, exports) { module.exports = require("babel-runtime/core-js/set"); /***/ }), -/* 139 */ +/* 138 */ /***/ (function(module, exports) { module.exports = require("babel-runtime/core-js/symbol"); /***/ }), -/* 140 */ -/***/ (function(module, exports) { - -module.exports = require("babel-runtime/helpers/defineProperty"); - -/***/ }), -/* 141 */ +/* 139 */ /***/ (function(module, exports) { module.exports = require("babel-runtime/helpers/typeof"); /***/ }), -/* 142 */ +/* 140 */ /***/ (function(module, exports) { module.exports = require("chance"); /***/ }), -/* 143 */ +/* 141 */ /***/ (function(module, exports) { module.exports = require("class-validator"); /***/ }), -/* 144 */ +/* 142 */ /***/ (function(module, exports) { module.exports = require("commander"); /***/ }), -/* 145 */ +/* 143 */ /***/ (function(module, exports) { module.exports = require("events"); /***/ }), -/* 146 */ +/* 144 */ /***/ (function(module, exports) { module.exports = require("fs"); /***/ }), -/* 147 */ +/* 145 */ /***/ (function(module, exports) { module.exports = require("lodash"); /***/ }), -/* 148 */ +/* 146 */, +/* 147 */ /***/ (function(module, exports) { module.exports = require("mkdirp"); /***/ }), -/* 149 */ +/* 148 */ /***/ (function(module, exports) { module.exports = require("reflect-metadata"); /***/ }), -/* 150 */, -/* 151 */ +/* 149 */, +/* 150 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; diff --git a/package.json b/package.json index 07fe7b83..35aa4122 100644 --- a/package.json +++ b/package.json @@ -30,6 +30,7 @@ "estraverse": "4.2.0", "inversify": "3.0.0", "lodash": "4.17.4", + "merge-estraverse-visitors": "^1.0.0", "mkdirp": "0.5.1", "reflect-metadata": "0.1.9", "source-map-support": "0.4.9", diff --git a/src/Obfuscator.ts b/src/Obfuscator.ts index 30045ecb..d38a6e15 100644 --- a/src/Obfuscator.ts +++ b/src/Obfuscator.ts @@ -5,21 +5,17 @@ import * as estraverse from 'estraverse'; import * as ESTree from 'estree'; import { TNodeTransformersFactory } from './types/container/TNodeTransformersFactory'; -import { TVisitorDirection } from './types/TVisitorDirection'; import { ICustomNodeGroup } from './interfaces/custom-nodes/ICustomNodeGroup'; import { IObfuscationEventEmitter } from './interfaces/event-emitters/IObfuscationEventEmitter'; import { IObfuscator } from './interfaces/IObfuscator'; import { IOptions } from './interfaces/options/IOptions'; -import { INodeTransformer } from './interfaces/node-transformers/INodeTransformer'; import { IStackTraceAnalyzer } from './interfaces/stack-trace-analyzer/IStackTraceAnalyzer'; import { IStackTraceData } from './interfaces/stack-trace-analyzer/IStackTraceData'; import { IStorage } from './interfaces/storages/IStorage'; import { NodeTransformers } from './enums/container/NodeTransformers'; -import { NodeType } from './enums/NodeType'; import { ObfuscationEvents } from './enums/ObfuscationEvents'; -import { VisitorDirection } from './enums/VisitorDirection'; import { Node } from './node/Node'; import { NodeUtils } from './node/NodeUtils'; @@ -27,40 +23,47 @@ import { NodeUtils } from './node/NodeUtils'; @injectable() export class Obfuscator implements IObfuscator { /** - * @type {Map} + * @type {NodeTransformers[]} */ - private static readonly controlFlowTransformersMap: Map = new Map([ - [NodeType.BlockStatement, [NodeTransformers.BlockStatementControlFlowTransformer]], - [NodeType.FunctionDeclaration, [NodeTransformers.FunctionControlFlowTransformer]], - [NodeType.FunctionExpression, [NodeTransformers.FunctionControlFlowTransformer]] - ]); + private static readonly controlFlowTransformersList: NodeTransformers[] = [ + NodeTransformers.BlockStatementControlFlowTransformer, + NodeTransformers.FunctionControlFlowTransformer, + NodeTransformers.FunctionControlFlowTransformer + ]; /** - * @type {Map} + * @type {NodeTransformers[]} */ - private static readonly convertingTransformersMap: Map = new Map([ - [NodeType.MemberExpression, [NodeTransformers.MemberExpressionTransformer]], - [NodeType.MethodDefinition, [NodeTransformers.MethodDefinitionTransformer]], - [NodeType.TemplateLiteral, [NodeTransformers.TemplateLiteralTransformer]], - ]); + private static readonly convertingTransformersList: NodeTransformers[] = [ + NodeTransformers.MemberExpressionTransformer, + NodeTransformers.MethodDefinitionTransformer, + NodeTransformers.TemplateLiteralTransformer + ]; /** - * @type {Map} + * @type {NodeTransformers[]} */ - private static readonly obfuscatingTransformersMap: Map = new Map([ - [NodeType.ArrowFunctionExpression, [NodeTransformers.FunctionTransformer]], - [NodeType.ClassDeclaration, [NodeTransformers.FunctionDeclarationTransformer]], - [NodeType.CatchClause, [NodeTransformers.CatchClauseTransformer]], - [NodeType.FunctionDeclaration, [ - NodeTransformers.FunctionDeclarationTransformer, - NodeTransformers.FunctionTransformer - ]], - [NodeType.FunctionExpression, [NodeTransformers.FunctionTransformer]], - [NodeType.ObjectExpression, [NodeTransformers.ObjectExpressionTransformer]], - [NodeType.VariableDeclaration, [NodeTransformers.VariableDeclarationTransformer]], - [NodeType.LabeledStatement, [NodeTransformers.LabeledStatementTransformer]], - [NodeType.Literal, [NodeTransformers.LiteralTransformer]] - ]); + private static readonly obfuscatingTransformersList: NodeTransformers[] = [ + NodeTransformers.FunctionTransformer, + NodeTransformers.FunctionDeclarationTransformer, + NodeTransformers.CatchClauseTransformer, + NodeTransformers.FunctionDeclarationTransformer, + NodeTransformers.FunctionTransformer, + NodeTransformers.FunctionTransformer, + NodeTransformers.ObjectExpressionTransformer, + NodeTransformers.VariableDeclarationTransformer, + NodeTransformers.LiteralTransformer + ]; + + /** + * @type {Map} + */ + private readonly cachedEnterVisitors: Map = new Map(); + + /** + * @type {Map} + */ + private readonly cachedLeaveVisitors: Map = new Map(); /** * @type {IStorage} @@ -139,22 +142,20 @@ export class Obfuscator implements IObfuscator { if (this.options.controlFlowFlattening) { astTree = this.transformAstTree( astTree, - VisitorDirection.leave, - this.nodeTransformersFactory(Obfuscator.controlFlowTransformersMap) + Obfuscator.controlFlowTransformersList ); } // second pass: nodes obfuscation + console.time(); astTree = this.transformAstTree( astTree, - VisitorDirection.enter, - this.nodeTransformersFactory( - new Map([ - ...Obfuscator.convertingTransformersMap, - ...Obfuscator.obfuscatingTransformersMap - ]) - ) + [ + ...Obfuscator.convertingTransformersList, + ...Obfuscator.obfuscatingTransformersList + ] ); + console.timeEnd(); this.obfuscationEventEmitter.emit(ObfuscationEvents.AfterObfuscation, astTree, stackTraceData); @@ -163,26 +164,78 @@ export class Obfuscator implements IObfuscator { /** * @param astTree - * @param direction - * @param nodeTransformersConcreteFactory + * @param nodeTransformers */ private transformAstTree ( astTree: ESTree.Program, - direction: TVisitorDirection, - nodeTransformersConcreteFactory: (nodeType: string) => INodeTransformer[] + nodeTransformers: NodeTransformers[] ): ESTree.Program { - estraverse.replace(astTree, { - [direction]: (node: ESTree.Node, parentNode: ESTree.Node): ESTree.Node => { - const nodeTransformers: INodeTransformer[] = nodeTransformersConcreteFactory(node.type); + const mergedVisitors: estraverse.Visitor = this.mergeTransformerVisitors( + nodeTransformers.map((nodeTransformer: NodeTransformers): estraverse.Visitor => { + return this.nodeTransformersFactory(nodeTransformer).getVisitor(); + }) + ); - nodeTransformers.forEach((nodeTransformer: INodeTransformer) => { - node = nodeTransformer.transformNode(node, parentNode); - }); - - return node; - } - }); + estraverse.replace(astTree, mergedVisitors); return astTree; } + + /** + * @param visitors + * @return {estraverse.Visitor} + */ + private mergeTransformerVisitors (visitors: estraverse.Visitor[]): estraverse.Visitor { + const enterVisitors: any[] = visitors.filter((visitor: estraverse.Visitor) => { + return visitor.enter !== undefined; + }).map((visitor: estraverse.Visitor) => { + return visitor.enter; + }); + const leaveVisitors: any[] = visitors.filter((visitor: estraverse.Visitor) => { + return visitor.leave !== undefined; + }).map((visitor: estraverse.Visitor) => { + return visitor.leave; + }); + + return { + enter: (node: ESTree.Node, parentNode: ESTree.Node) => { + let nodeVisitors: estraverse.Visitor[]; + let saveToCache: boolean = true; + + if (this.cachedEnterVisitors.has(node.type)) { + nodeVisitors = this.cachedEnterVisitors.get(node.type); + saveToCache = false; + } else { + nodeVisitors = enterVisitors; + } + + nodeVisitors.forEach((visitor: any) => { + visitor.call(this, node, parentNode); + }); + + if (saveToCache) { + this.cachedEnterVisitors.set(node.type, nodeVisitors); + } + }, + leave: (node: ESTree.Node, parentNode: ESTree.Node) => { + let nodeVisitors: estraverse.Visitor[]; + let saveToCache: boolean = true; + + if (this.cachedLeaveVisitors.has(node.type)) { + nodeVisitors = this.cachedLeaveVisitors.get(node.type); + saveToCache = false; + } else { + nodeVisitors = leaveVisitors; + } + + nodeVisitors.forEach((visitor: any) => { + visitor.call(this, node, parentNode); + }); + + if (saveToCache) { + this.cachedLeaveVisitors.set(node.type, nodeVisitors); + } + } + }; + } } diff --git a/src/container/modules/node-transformers/NodeTransformersModule.ts b/src/container/modules/node-transformers/NodeTransformersModule.ts index 1286ef03..c7ea4574 100644 --- a/src/container/modules/node-transformers/NodeTransformersModule.ts +++ b/src/container/modules/node-transformers/NodeTransformersModule.ts @@ -72,31 +72,24 @@ export const nodeTransformersModule: interfaces.ContainerModule = new ContainerM .whenTargetNamed(NodeTransformers.VariableDeclarationTransformer); // node transformers factory - bind(ServiceIdentifiers.Factory__INodeTransformer) - .toFactory((context: interfaces.Context) => { + bind(ServiceIdentifiers.Factory__INodeTransformer) + .toFactory((context: interfaces.Context) => { const cache: Map = new Map(); - return (nodeTransformersMap: Map) => (nodeType: string) => { - const nodeTransformers: NodeTransformers[] = nodeTransformersMap.get(nodeType) || []; - const instancesArray: INodeTransformer[] = []; + return (nodeTransformerName: NodeTransformers) => { + if (cache.has(nodeTransformerName)) { + return cache.get(nodeTransformerName); + } - nodeTransformers.forEach((transformer: NodeTransformers) => { - let nodeTransformer: INodeTransformer; + const nodeTransformer: INodeTransformer = context.container + .getNamed( + ServiceIdentifiers.INodeTransformer, + nodeTransformerName + ); - if (cache.has(transformer)) { - nodeTransformer = cache.get(transformer); - } else { - nodeTransformer = context.container.getNamed( - ServiceIdentifiers.INodeTransformer, - transformer - ); - cache.set(transformer, nodeTransformer); - } + cache.set(nodeTransformerName, nodeTransformer); - instancesArray.push(nodeTransformer); - }); - - return instancesArray; + return nodeTransformer; }; }); }); diff --git a/src/enums/VisitorDirection.ts b/src/enums/VisitorDirection.ts deleted file mode 100644 index 38a1c124..00000000 --- a/src/enums/VisitorDirection.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Utils } from '../utils/Utils'; - -export const VisitorDirection: any = Utils.strEnumify({ - enter: 'enter', - leave: 'leave' -}); diff --git a/src/interfaces/node-transformers/INodeTransformer.d.ts b/src/interfaces/node-transformers/INodeTransformer.d.ts index 0aeca52e..f455a53d 100644 --- a/src/interfaces/node-transformers/INodeTransformer.d.ts +++ b/src/interfaces/node-transformers/INodeTransformer.d.ts @@ -1,10 +1,8 @@ -import * as ESTree from 'estree'; +import * as estraverse from 'estraverse'; export interface INodeTransformer { /** - * @param node - * @param parentNode - * @returns {ESTree.Node} + * @returns {estraverse.Visitor} */ - transformNode (node: ESTree.Node, parentNode: ESTree.Node): ESTree.Node; + getVisitor (): estraverse.Visitor; } diff --git a/src/node-transformers/AbstractNodeTransformer.ts b/src/node-transformers/AbstractNodeTransformer.ts index 7724b087..345244cf 100644 --- a/src/node-transformers/AbstractNodeTransformer.ts +++ b/src/node-transformers/AbstractNodeTransformer.ts @@ -1,7 +1,7 @@ import { injectable, inject } from 'inversify'; import { ServiceIdentifiers } from '../container/ServiceIdentifiers'; -import * as ESTree from 'estree'; +import * as estraverse from 'estraverse'; import { INodeTransformer } from '../interfaces/node-transformers/INodeTransformer'; import { IOptions } from '../interfaces/options/IOptions'; @@ -30,9 +30,7 @@ export abstract class AbstractNodeTransformer implements INodeTransformer { } /** - * @param node - * @param parentNode - * @returns {ESTree.Node} + * @returns {estraverse.Visitor} */ - public abstract transformNode (node: ESTree.Node, parentNode: ESTree.Node): ESTree.Node; + public abstract getVisitor (): estraverse.Visitor; } diff --git a/src/node-transformers/control-flow-transformers/BlockStatementControlFlowTransformer.ts b/src/node-transformers/control-flow-transformers/BlockStatementControlFlowTransformer.ts index df9c6fe8..f10c2855 100644 --- a/src/node-transformers/control-flow-transformers/BlockStatementControlFlowTransformer.ts +++ b/src/node-transformers/control-flow-transformers/BlockStatementControlFlowTransformer.ts @@ -1,6 +1,7 @@ import { injectable, inject } from 'inversify'; import { ServiceIdentifiers } from '../../container/ServiceIdentifiers'; +import * as estraverse from 'estraverse'; import * as ESTree from 'estree'; import { TCustomNodeFactory } from '../../types/container/TCustomNodeFactory'; @@ -49,11 +50,25 @@ export class BlockStatementControlFlowTransformer extends AbstractNodeTransforme }); } + /** + * @return {estraverse.Visitor} + */ + public getVisitor (): estraverse.Visitor { + return { + leave: (node: ESTree.Node, parentNode: ESTree.Node) => { + if (Node.isBlockStatementNode(node)) { + this.transformNode(node, parentNode); + } + } + }; + } + /** * @param blockStatementNode + * @param parentNode * @returns {ESTree.Node} */ - public transformNode (blockStatementNode: ESTree.BlockStatement): ESTree.Node { + private transformNode (blockStatementNode: ESTree.BlockStatement, parentNode: ESTree.Node): ESTree.Node { if ( RandomGeneratorUtils.getRandomFloat(0, 1) > this.options.controlFlowFlatteningThreshold || BlockStatementControlFlowTransformer.blockStatementHasProhibitedStatements(blockStatementNode) diff --git a/src/node-transformers/control-flow-transformers/FunctionControlFlowTransformer.ts b/src/node-transformers/control-flow-transformers/FunctionControlFlowTransformer.ts index 3a6ee8d8..c84b4aa7 100644 --- a/src/node-transformers/control-flow-transformers/FunctionControlFlowTransformer.ts +++ b/src/node-transformers/control-flow-transformers/FunctionControlFlowTransformer.ts @@ -112,11 +112,25 @@ export class FunctionControlFlowTransformer extends AbstractNodeTransformer { return RandomGeneratorUtils.getRandomGenerator().pickone(blockScopesOfNode); } + /** + * @return {estraverse.Visitor} + */ + public getVisitor (): estraverse.Visitor { + return { + leave: (node: ESTree.Node, parentNode: ESTree.Node) => { + if (Node.isFunctionDeclarationNode(node) || Node.isFunctionExpressionNode(node)) { + this.transformNode(node, parentNode); + } + } + }; + } + /** * @param functionNode + * @param parentNode * @returns {ESTree.Node} */ - public transformNode (functionNode: ESTree.Function): ESTree.Node { + private transformNode (functionNode: ESTree.Function, parentNode: ESTree.Node): ESTree.Node { if (Node.isArrowFunctionExpressionNode(functionNode)) { return functionNode; } diff --git a/src/node-transformers/converting-transformers/MemberExpressionTransformer.ts b/src/node-transformers/converting-transformers/MemberExpressionTransformer.ts index 8e00cad2..108b9971 100644 --- a/src/node-transformers/converting-transformers/MemberExpressionTransformer.ts +++ b/src/node-transformers/converting-transformers/MemberExpressionTransformer.ts @@ -1,6 +1,7 @@ import { injectable, inject } from 'inversify'; import { ServiceIdentifiers } from '../../container/ServiceIdentifiers'; +import * as estraverse from 'estraverse'; import * as ESTree from 'estree'; import { IOptions } from '../../interfaces/options/IOptions'; @@ -21,6 +22,19 @@ export class MemberExpressionTransformer extends AbstractNodeTransformer { super(options); } + /** + * @return {estraverse.Visitor} + */ + public getVisitor (): estraverse.Visitor { + return { + enter: (node: ESTree.Node, parentNode: ESTree.Node) => { + if (Node.isMemberExpressionNode(node)) { + this.transformNode(node, parentNode); + } + } + }; + } + /** * replaces: * object.identifier = 1; @@ -34,9 +48,10 @@ export class MemberExpressionTransformer extends AbstractNodeTransformer { * Literal node will be obfuscated by LiteralTransformer * * @param memberExpressionNode + * @param parentNode * @returns {ESTree.Node} */ - public transformNode (memberExpressionNode: ESTree.MemberExpression): ESTree.Node { + private transformNode (memberExpressionNode: ESTree.MemberExpression, parentNode: ESTree.Node): ESTree.Node { if (Node.isIdentifierNode(memberExpressionNode.property)) { if (memberExpressionNode.computed) { return memberExpressionNode; diff --git a/src/node-transformers/converting-transformers/MethodDefinitionTransformer.ts b/src/node-transformers/converting-transformers/MethodDefinitionTransformer.ts index 13ab7e1c..9d944c47 100644 --- a/src/node-transformers/converting-transformers/MethodDefinitionTransformer.ts +++ b/src/node-transformers/converting-transformers/MethodDefinitionTransformer.ts @@ -1,6 +1,7 @@ import { injectable, inject } from 'inversify'; import { ServiceIdentifiers } from '../../container/ServiceIdentifiers'; +import * as estraverse from 'estraverse'; import * as ESTree from 'estree'; import { IOptions } from '../../interfaces/options/IOptions'; @@ -35,6 +36,19 @@ export class MethodDefinitionTransformer extends AbstractNodeTransformer { super(options); } + /** + * @return {estraverse.Visitor} + */ + public getVisitor (): estraverse.Visitor { + return { + enter: (node: ESTree.Node, parentNode: ESTree.Node) => { + if (Node.isMethodDefinitionNode(node)) { + this.transformNode(node, parentNode); + } + } + }; + } + /** * replaces: * object.identifier = 1; @@ -50,7 +64,7 @@ export class MethodDefinitionTransformer extends AbstractNodeTransformer { * @param parentNode * @returns {ESTree.Node} */ - public transformNode (methodDefinitionNode: ESTree.MethodDefinition, parentNode: ESTree.Node): ESTree.Node { + private transformNode (methodDefinitionNode: ESTree.MethodDefinition, parentNode: ESTree.Node): ESTree.Node { if ( Node.isIdentifierNode(methodDefinitionNode.key) && !MethodDefinitionTransformer.ignoredNames.includes(methodDefinitionNode.key.name) && diff --git a/src/node-transformers/converting-transformers/TemplateLiteralTransformer.ts b/src/node-transformers/converting-transformers/TemplateLiteralTransformer.ts index c390ed4d..67b29f78 100644 --- a/src/node-transformers/converting-transformers/TemplateLiteralTransformer.ts +++ b/src/node-transformers/converting-transformers/TemplateLiteralTransformer.ts @@ -1,6 +1,7 @@ import { injectable, inject } from 'inversify'; import { ServiceIdentifiers } from '../../container/ServiceIdentifiers'; +import * as estraverse from 'estraverse'; import * as ESTree from 'estree'; import { IOptions } from '../../interfaces/options/IOptions'; @@ -32,12 +33,25 @@ export class TemplateLiteralTransformer extends AbstractNodeTransformer { return node && Node.isLiteralNode(node) && typeof node.value === 'string'; } + /** + * @return {estraverse.Visitor} + */ + public getVisitor (): estraverse.Visitor { + return { + enter: (node: ESTree.Node, parentNode: ESTree.Node) => { + if (Node.isTemplateLiteralNode(node)) { + this.transformNode(node, parentNode); + } + } + }; + } + /** * @param templateLiteralNode * @param parentNode * @returns {ESTree.Node} */ - public transformNode (templateLiteralNode: ESTree.TemplateLiteral, parentNode: ESTree.Node): ESTree.Node { + private transformNode (templateLiteralNode: ESTree.TemplateLiteral, parentNode: ESTree.Node): ESTree.Node { const templateLiteralExpressions: ESTree.Expression[] = templateLiteralNode.expressions; let nodes: (ESTree.Literal | ESTree.Expression)[] = []; diff --git a/src/node-transformers/obfuscating-transformers/CatchClauseTransformer.ts b/src/node-transformers/obfuscating-transformers/CatchClauseTransformer.ts index e2427902..4e02fe22 100644 --- a/src/node-transformers/obfuscating-transformers/CatchClauseTransformer.ts +++ b/src/node-transformers/obfuscating-transformers/CatchClauseTransformer.ts @@ -41,11 +41,25 @@ export class CatchClauseTransformer extends AbstractNodeTransformer { this.identifierReplacer = replacersFactory(NodeObfuscatorsReplacers.IdentifierReplacer); } + /** + * @return {estraverse.Visitor} + */ + public getVisitor (): estraverse.Visitor { + return { + enter: (node: ESTree.Node, parentNode: ESTree.Node) => { + if (Node.isCatchClauseNode(node)) { + this.transformNode(node, parentNode); + } + } + }; + } + /** * @param catchClauseNode + * @param parentNode * @returns {ESTree.Node} */ - public transformNode (catchClauseNode: ESTree.CatchClause): ESTree.Node { + private transformNode (catchClauseNode: ESTree.CatchClause, parentNode: ESTree.Node): ESTree.Node { const nodeIdentifier: number = this.nodeIdentifier++; this.storeCatchClauseParam(catchClauseNode, nodeIdentifier); diff --git a/src/node-transformers/obfuscating-transformers/FunctionDeclarationTransformer.ts b/src/node-transformers/obfuscating-transformers/FunctionDeclarationTransformer.ts index 2b7a2850..bc0180b1 100644 --- a/src/node-transformers/obfuscating-transformers/FunctionDeclarationTransformer.ts +++ b/src/node-transformers/obfuscating-transformers/FunctionDeclarationTransformer.ts @@ -51,12 +51,25 @@ export class FunctionDeclarationTransformer extends AbstractNodeTransformer { this.identifierReplacer = nodeObfuscatorsReplacersFactory(NodeObfuscatorsReplacers.IdentifierReplacer); } + /** + * @return {estraverse.Visitor} + */ + public getVisitor (): estraverse.Visitor { + return { + enter: (node: ESTree.Node, parentNode: ESTree.Node) => { + if (Node.isFunctionDeclarationNode(node)) { + this.transformNode(node, parentNode); + } + } + }; + } + /** * @param functionDeclarationNode * @param parentNode * @returns {ESTree.Node} */ - public transformNode (functionDeclarationNode: ESTree.FunctionDeclaration, parentNode: ESTree.Node): ESTree.Node { + private transformNode (functionDeclarationNode: ESTree.FunctionDeclaration, parentNode: ESTree.Node): ESTree.Node { const nodeIdentifier: number = this.nodeIdentifier++; const blockScopeOfFunctionDeclarationNode: TNodeWithBlockStatement = NodeUtils .getBlockScopesOfNode(functionDeclarationNode)[0]; diff --git a/src/node-transformers/obfuscating-transformers/FunctionTransformer.ts b/src/node-transformers/obfuscating-transformers/FunctionTransformer.ts index ecfb00bf..cdddf89f 100644 --- a/src/node-transformers/obfuscating-transformers/FunctionTransformer.ts +++ b/src/node-transformers/obfuscating-transformers/FunctionTransformer.ts @@ -41,11 +41,29 @@ export class FunctionTransformer extends AbstractNodeTransformer { this.identifierReplacer = nodeObfuscatorsReplacersFactory(NodeObfuscatorsReplacers.IdentifierReplacer); } + /** + * @return {estraverse.Visitor} + */ + public getVisitor (): estraverse.Visitor { + return { + enter: (node: ESTree.Node, parentNode: ESTree.Node) => { + if ( + Node.isFunctionDeclarationNode(node) || + Node.isFunctionExpressionNode(node) || + Node.isArrowFunctionExpressionNode(node) + ) { + this.transformNode(node, parentNode); + } + } + }; + } + /** * @param functionNode + * @param parentNode * @returns {ESTree.Node} */ - public transformNode (functionNode: ESTree.Function): ESTree.Node { + private transformNode (functionNode: ESTree.Function, parentNode: ESTree.Node): ESTree.Node { const nodeIdentifier: number = this.nodeIdentifier++; this.storeFunctionParams(functionNode, nodeIdentifier); diff --git a/src/node-transformers/obfuscating-transformers/LabeledStatementTransformer.ts b/src/node-transformers/obfuscating-transformers/LabeledStatementTransformer.ts index 32512e2f..2080fb2c 100644 --- a/src/node-transformers/obfuscating-transformers/LabeledStatementTransformer.ts +++ b/src/node-transformers/obfuscating-transformers/LabeledStatementTransformer.ts @@ -49,11 +49,25 @@ export class LabeledStatementTransformer extends AbstractNodeTransformer { this.identifierReplacer = nodeObfuscatorsReplacersFactory(NodeObfuscatorsReplacers.IdentifierReplacer); } + /** + * @return {estraverse.Visitor} + */ + public getVisitor (): estraverse.Visitor { + return { + enter: (node: ESTree.Node, parentNode: ESTree.Node) => { + if (Node.isLabeledStatementNode(node)) { + this.transformNode(node, parentNode); + } + } + }; + } + /** * @param labeledStatementNode + * @param parentNode * @returns {ESTree.Node} */ - public transformNode (labeledStatementNode: ESTree.LabeledStatement): ESTree.Node { + private transformNode (labeledStatementNode: ESTree.LabeledStatement, parentNode: ESTree.Node): ESTree.Node { const nodeIdentifier: number = this.nodeIdentifier++; this.storeLabeledStatementName(labeledStatementNode, nodeIdentifier); diff --git a/src/node-transformers/obfuscating-transformers/LiteralTransformer.ts b/src/node-transformers/obfuscating-transformers/LiteralTransformer.ts index d90eb7de..a4034e41 100644 --- a/src/node-transformers/obfuscating-transformers/LiteralTransformer.ts +++ b/src/node-transformers/obfuscating-transformers/LiteralTransformer.ts @@ -2,6 +2,7 @@ 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 { IOptions } from '../../interfaces/options/IOptions'; @@ -32,12 +33,25 @@ export class LiteralTransformer extends AbstractNodeTransformer { this.replacersFactory = replacersFactory; } + /** + * @return {estraverse.Visitor} + */ + public getVisitor (): estraverse.Visitor { + return { + enter: (node: ESTree.Node, parentNode: ESTree.Node) => { + if (Node.isLiteralNode(node)) { + this.transformNode(node, parentNode); + } + } + }; + } + /** * @param literalNode * @param parentNode * @returns {ESTree.Node} */ - public transformNode (literalNode: ESTree.Literal, parentNode: ESTree.Node): ESTree.Node { + private transformNode (literalNode: ESTree.Literal, parentNode: ESTree.Node): ESTree.Node { if (Node.isPropertyNode(parentNode) && parentNode.key === literalNode) { return literalNode; } diff --git a/src/node-transformers/obfuscating-transformers/ObjectExpressionTransformer.ts b/src/node-transformers/obfuscating-transformers/ObjectExpressionTransformer.ts index 8beddd29..7eef875f 100644 --- a/src/node-transformers/obfuscating-transformers/ObjectExpressionTransformer.ts +++ b/src/node-transformers/obfuscating-transformers/ObjectExpressionTransformer.ts @@ -2,6 +2,7 @@ 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 { IOptions } from '../../interfaces/options/IOptions'; @@ -64,11 +65,25 @@ export class ObjectExpressionTransformer extends AbstractNodeTransformer { }; } + /** + * @return {estraverse.Visitor} + */ + public getVisitor (): estraverse.Visitor { + return { + enter: (node: ESTree.Node, parentNode: ESTree.Node) => { + if (Node.isObjectExpressionNode(node)) { + this.transformNode(node, parentNode); + } + } + }; + } + /** * @param objectExpressionNode + * @param parentNode * @returns {ESTree.Node} */ - public transformNode (objectExpressionNode: ESTree.ObjectExpression): ESTree.Node { + private transformNode (objectExpressionNode: ESTree.ObjectExpression, parentNode: ESTree.Node): ESTree.Node { objectExpressionNode.properties .forEach((property: ESTree.Property) => { if (property.shorthand) { diff --git a/src/node-transformers/obfuscating-transformers/VariableDeclarationTransformer.ts b/src/node-transformers/obfuscating-transformers/VariableDeclarationTransformer.ts index 85e270b7..6cf1d9d5 100644 --- a/src/node-transformers/obfuscating-transformers/VariableDeclarationTransformer.ts +++ b/src/node-transformers/obfuscating-transformers/VariableDeclarationTransformer.ts @@ -52,12 +52,25 @@ export class VariableDeclarationTransformer extends AbstractNodeTransformer { this.identifierReplacer = replacersFactory(NodeObfuscatorsReplacers.IdentifierReplacer); } + /** + * @return {estraverse.Visitor} + */ + public getVisitor (): estraverse.Visitor { + return { + enter: (node: ESTree.Node, parentNode: ESTree.Node) => { + if (Node.isVariableDeclarationNode(node)) { + this.transformNode(node, parentNode); + } + } + }; + } + /** * @param variableDeclarationNode * @param parentNode * @returns {ESTree.Node} */ - public transformNode (variableDeclarationNode: ESTree.VariableDeclaration, parentNode: ESTree.Node): ESTree.Node { + private transformNode (variableDeclarationNode: ESTree.VariableDeclaration, parentNode: ESTree.Node): ESTree.Node { const blockScopeOfVariableDeclarationNode: TNodeWithBlockStatement = NodeUtils .getBlockScopesOfNode(variableDeclarationNode)[0]; diff --git a/src/node-transformers/obfuscating-transformers/replacers/StringLiteralReplacer.ts b/src/node-transformers/obfuscating-transformers/replacers/StringLiteralReplacer.ts index 6a540e0b..668238d0 100644 --- a/src/node-transformers/obfuscating-transformers/replacers/StringLiteralReplacer.ts +++ b/src/node-transformers/obfuscating-transformers/replacers/StringLiteralReplacer.ts @@ -102,10 +102,10 @@ export class StringLiteralReplacer extends AbstractReplacer { return this.stringLiteralHexadecimalIndexCache.get(value); } - const indexOfValue: number = this.stringArrayStorage.getLength(); - const hexadecimalIndex: string = `${Utils.hexadecimalPrefix}${Utils.decToHex(indexOfValue)}`; + const stringArrayStorageLength: number = this.stringArrayStorage.getLength(); + const hexadecimalIndex: string = `${Utils.hexadecimalPrefix}${Utils.decToHex(stringArrayStorageLength)}`; - this.stringArrayStorage.set(this.stringArrayStorage.getLength(), value); + this.stringArrayStorage.set(stringArrayStorageLength, value); this.stringLiteralHexadecimalIndexCache.set(value, hexadecimalIndex); return hexadecimalIndex; diff --git a/src/node/Node.ts b/src/node/Node.ts index c5e84bc0..060c7fdf 100644 --- a/src/node/Node.ts +++ b/src/node/Node.ts @@ -45,6 +45,14 @@ export class Node { return node.type === NodeType.CallExpression; } + /** + * @param node + * @returns {boolean} + */ + public static isCatchClauseNode (node: ESTree.Node): node is ESTree.CatchClause { + return node.type === NodeType.CatchClause; + } + /** * @param node * @returns {boolean} @@ -130,6 +138,14 @@ export class Node { return node.type === NodeType.MemberExpression; } + /** + * @param node + * @returns {boolean} + */ + public static isMethodDefinitionNode (node: ESTree.Node): node is ESTree.MethodDefinition { + return node.type === NodeType.MethodDefinition; + } + /** * @param node * @returns {boolean} @@ -184,6 +200,15 @@ export class Node { return !parentNodeIsPropertyNode && !parentNodeIsMemberExpressionNode && !Node.isLabelIdentifierNode(node, parentNode); } + /** + * + * @param node + * @returns {boolean} + */ + public static isTemplateLiteralNode (node: ESTree.Node): node is ESTree.TemplateLiteral { + return node.type === NodeType.TemplateLiteral; + } + /** * * @param node diff --git a/src/types/container/TNodeTransformersFactory.d.ts b/src/types/container/TNodeTransformersFactory.d.ts index b74bf7f9..75da1a83 100644 --- a/src/types/container/TNodeTransformersFactory.d.ts +++ b/src/types/container/TNodeTransformersFactory.d.ts @@ -2,4 +2,4 @@ import { INodeTransformer } from '../../interfaces/node-transformers/INodeTransf import { NodeTransformers } from '../../enums/container/NodeTransformers'; -export type TNodeTransformersFactory = (nodeTransformersMap: Map) => (nodeType: string) => INodeTransformer[]; +export type TNodeTransformersFactory = (nodeTransformerName: NodeTransformers) => INodeTransformer; From 041ce3b5e7b75fa9b59382e0d5d3cacad27c5f8d Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Tue, 17 Jan 2017 13:15:24 +0300 Subject: [PATCH 16/28] transformers as visitor: first working prototype --- dist/index.js | 213 +++++++++--------- src/Obfuscator.ts | 97 ++++---- .../BlockStatementControlFlowTransformer.ts | 2 +- .../FunctionControlFlowTransformer.ts | 2 +- .../MemberExpressionTransformer.ts | 2 +- .../MethodDefinitionTransformer.ts | 2 +- .../TemplateLiteralTransformer.ts | 2 +- .../CatchClauseTransformer.ts | 2 +- .../FunctionDeclarationTransformer.ts | 2 +- .../FunctionTransformer.ts | 2 +- .../LabeledStatementTransformer.ts | 2 +- .../LiteralTransformer.ts | 2 +- .../ObjectExpressionTransformer.ts | 2 +- .../VariableDeclarationTransformer.ts | 2 +- 14 files changed, 164 insertions(+), 170 deletions(-) diff --git a/dist/index.js b/dist/index.js index 8b430d2f..aac1ac16 100644 --- a/dist/index.js +++ b/dist/index.js @@ -90,7 +90,7 @@ module.exports = /******/ __webpack_require__.p = ""; /******/ /******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 150); +/******/ return __webpack_require__(__webpack_require__.s = 149); /******/ }) /************************************************************************/ /******/ ([ @@ -200,7 +200,7 @@ var escodegen = __webpack_require__(28); var esprima = __webpack_require__(49); var estraverse = __webpack_require__(17); var NodeType_1 = __webpack_require__(19); -var Node_1 = __webpack_require__(11); +var Node_1 = __webpack_require__(12); var Nodes_1 = __webpack_require__(20); var NodeUtils = function () { @@ -534,6 +534,12 @@ exports.initializable = initializable; /***/ }), /* 11 */ +/***/ (function(module, exports) { + +module.exports = require("babel-runtime/core-js/map"); + +/***/ }), +/* 12 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -705,12 +711,6 @@ var Node = function () { exports.Node = Node; -/***/ }), -/* 12 */ -/***/ (function(module, exports) { - -module.exports = require("babel-runtime/core-js/map"); - /***/ }), /* 13 */ /***/ (function(module, exports, __webpack_require__) { @@ -768,7 +768,7 @@ exports.AbstractCustomNode = AbstractCustomNode; "use strict"; -var _map = __webpack_require__(12); +var _map = __webpack_require__(11); var _map2 = _interopRequireDefault(_map); @@ -1457,7 +1457,7 @@ var _createClass3 = _interopRequireDefault(_createClass2); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -__webpack_require__(148); +__webpack_require__(147); if (!global._babelPolyfill && parseInt(process.version.split('.')[0], 10) < 4) { __webpack_require__(133); } @@ -2042,7 +2042,7 @@ var NodeTransformers; "use strict"; -var _map = __webpack_require__(12); +var _map = __webpack_require__(11); var _map2 = _interopRequireDefault(_map); @@ -2116,7 +2116,7 @@ var AbstractControlFlowReplacer_1; "use strict"; -var _map = __webpack_require__(12); +var _map = __webpack_require__(11); var _map2 = _interopRequireDefault(_map); @@ -2147,7 +2147,7 @@ var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); var AbstractControlFlowReplacer_1 = __webpack_require__(41); var CustomNodes_1 = __webpack_require__(15); -var Node_1 = __webpack_require__(11); +var Node_1 = __webpack_require__(12); var ExpressionWithOperatorControlFlowReplacer = function (_AbstractControlFlowR) { (0, _inherits3.default)(ExpressionWithOperatorControlFlowReplacer, _AbstractControlFlowR); @@ -2224,7 +2224,7 @@ var _toConsumableArray2 = __webpack_require__(24); var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2); -var _map = __webpack_require__(12); +var _map = __webpack_require__(11); var _map2 = _interopRequireDefault(_map); @@ -2477,7 +2477,7 @@ var _toConsumableArray2 = __webpack_require__(24); var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2); -var _map = __webpack_require__(12); +var _map = __webpack_require__(11); var _map2 = _interopRequireDefault(_map); @@ -2497,7 +2497,7 @@ var ServiceIdentifiers_1 = __webpack_require__(4); var estraverse = __webpack_require__(17); var NodeTransformers_1 = __webpack_require__(40); var ObfuscationEvents_1 = __webpack_require__(22); -var Node_1 = __webpack_require__(11); +var Node_1 = __webpack_require__(12); var NodeUtils_1 = __webpack_require__(8); var Obfuscator = Obfuscator_1 = function () { function Obfuscator(stackTraceAnalyzer, obfuscationEventEmitter, customNodeGroupStorage, nodeTransformersFactory, options) { @@ -2550,59 +2550,53 @@ var Obfuscator = Obfuscator_1 = function () { }, { key: "mergeTransformerVisitors", value: function mergeTransformerVisitors(visitors) { + var enterVisitor = this.getVisitorForDirection(visitors.filter(function (visitor) { + return visitor.enter !== undefined; + }), 'enter', this.cachedEnterVisitors); + var leaveVisitor = this.getVisitorForDirection(visitors.filter(function (visitor) { + return visitor.leave !== undefined; + }), 'leave', this.cachedLeaveVisitors); + return { + enter: enterVisitor, + leave: leaveVisitor + }; + } + }, { + key: "getVisitorForDirection", + value: function getVisitorForDirection(visitors, direction, cache) { var _this3 = this; - var enterVisitors = visitors.filter(function (visitor) { - return visitor.enter !== undefined; - }).map(function (visitor) { - return visitor.enter; - }); - var leaveVisitors = visitors.filter(function (visitor) { - return visitor.leave !== undefined; - }).map(function (visitor) { - return visitor.leave; - }); - return { - enter: function enter(node, parentNode) { - var nodeVisitors = void 0; - var saveToCache = true; - if (_this3.cachedEnterVisitors.has(node.type)) { - nodeVisitors = _this3.cachedEnterVisitors.get(node.type); - saveToCache = false; - } else { - nodeVisitors = enterVisitors; + if (!visitors.length) { + return null; + } + return function (node, parentNode) { + if (cache.has(node.type)) { + var cachedVisitorsForNode = cache.get(node.type); + if (!cachedVisitorsForNode.length) { + return; } - nodeVisitors.forEach(function (visitor) { - visitor.call(_this3, node, parentNode); + cachedVisitorsForNode.forEach(function (visitor) { + node = visitor[direction].call(_this3, node, parentNode); }); - if (saveToCache) { - _this3.cachedEnterVisitors.set(node.type, nodeVisitors); - } - }, - leave: function leave(node, parentNode) { - var nodeVisitors = void 0; - var saveToCache = true; - if (_this3.cachedLeaveVisitors.has(node.type)) { - nodeVisitors = _this3.cachedLeaveVisitors.get(node.type); - saveToCache = false; - } else { - nodeVisitors = leaveVisitors; - } - nodeVisitors.forEach(function (visitor) { - visitor.call(_this3, node, parentNode); + } else { + var visitorsForNode = visitors.filter(function (visitor) { + var result = visitor[direction].call(_this3, node, parentNode); + if (result) { + node = result; + } + return result; }); - if (saveToCache) { - _this3.cachedLeaveVisitors.set(node.type, nodeVisitors); - } + cache.set(node.type, visitorsForNode); } + return node; }; } }]); return Obfuscator; }(); -Obfuscator.controlFlowTransformersList = [NodeTransformers_1.NodeTransformers.BlockStatementControlFlowTransformer, NodeTransformers_1.NodeTransformers.FunctionControlFlowTransformer, NodeTransformers_1.NodeTransformers.FunctionControlFlowTransformer]; +Obfuscator.controlFlowTransformersList = [NodeTransformers_1.NodeTransformers.BlockStatementControlFlowTransformer, NodeTransformers_1.NodeTransformers.FunctionControlFlowTransformer]; Obfuscator.convertingTransformersList = [NodeTransformers_1.NodeTransformers.MemberExpressionTransformer, NodeTransformers_1.NodeTransformers.MethodDefinitionTransformer, NodeTransformers_1.NodeTransformers.TemplateLiteralTransformer]; -Obfuscator.obfuscatingTransformersList = [NodeTransformers_1.NodeTransformers.FunctionTransformer, NodeTransformers_1.NodeTransformers.FunctionDeclarationTransformer, NodeTransformers_1.NodeTransformers.CatchClauseTransformer, NodeTransformers_1.NodeTransformers.FunctionDeclarationTransformer, NodeTransformers_1.NodeTransformers.FunctionTransformer, NodeTransformers_1.NodeTransformers.FunctionTransformer, NodeTransformers_1.NodeTransformers.ObjectExpressionTransformer, NodeTransformers_1.NodeTransformers.VariableDeclarationTransformer, NodeTransformers_1.NodeTransformers.LiteralTransformer]; +Obfuscator.obfuscatingTransformersList = [NodeTransformers_1.NodeTransformers.CatchClauseTransformer, NodeTransformers_1.NodeTransformers.FunctionDeclarationTransformer, NodeTransformers_1.NodeTransformers.FunctionTransformer, NodeTransformers_1.NodeTransformers.LabeledStatementTransformer, NodeTransformers_1.NodeTransformers.LiteralTransformer, NodeTransformers_1.NodeTransformers.ObjectExpressionTransformer, NodeTransformers_1.NodeTransformers.VariableDeclarationTransformer]; Obfuscator = Obfuscator_1 = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IStackTraceAnalyzer)), tslib_1.__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IObfuscationEventEmitter)), tslib_1.__param(2, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.TCustomNodeGroupStorage)), tslib_1.__param(3, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.Factory__INodeTransformer)), tslib_1.__param(4, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IOptions)), tslib_1.__metadata("design:paramtypes", [Object, Object, Object, Function, Object])], Obfuscator); exports.Obfuscator = Obfuscator; var Obfuscator_1; @@ -2688,7 +2682,7 @@ var _createClass3 = _interopRequireDefault(_createClass2); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var fs = __webpack_require__(144); -var mkdirp = __webpack_require__(147); +var mkdirp = __webpack_require__(146); var path = __webpack_require__(50); var CLIUtils = function () { @@ -3006,7 +3000,7 @@ exports.InversifyContainerFacade = InversifyContainerFacade; "use strict"; -var _map = __webpack_require__(12); +var _map = __webpack_require__(11); var _map2 = _interopRequireDefault(_map); @@ -3090,7 +3084,7 @@ exports.customNodesModule = new inversify_1.ContainerModule(function (bind) { "use strict"; -var _map = __webpack_require__(12); +var _map = __webpack_require__(11); var _map2 = _interopRequireDefault(_map); @@ -3126,7 +3120,7 @@ exports.controlFlowTransformersModule = new inversify_1.ContainerModule(function "use strict"; -var _map = __webpack_require__(12); +var _map = __webpack_require__(11); var _map2 = _interopRequireDefault(_map); @@ -3180,7 +3174,7 @@ exports.nodeTransformersModule = new inversify_1.ContainerModule(function (bind) "use strict"; -var _map = __webpack_require__(12); +var _map = __webpack_require__(11); var _map2 = _interopRequireDefault(_map); @@ -3218,7 +3212,7 @@ exports.obfuscatingTransformersModule = new inversify_1.ContainerModule(function "use strict"; -var _map = __webpack_require__(12); +var _map = __webpack_require__(11); var _map2 = _interopRequireDefault(_map); @@ -3351,7 +3345,7 @@ exports.ConsoleOutputDisableExpressionNode = ConsoleOutputDisableExpressionNode; "use strict"; -var _map = __webpack_require__(12); +var _map = __webpack_require__(11); var _map2 = _interopRequireDefault(_map); @@ -4144,7 +4138,7 @@ exports.DebugProtectionFunctionNode = DebugProtectionFunctionNode; "use strict"; -var _map = __webpack_require__(12); +var _map = __webpack_require__(11); var _map2 = _interopRequireDefault(_map); @@ -4327,7 +4321,7 @@ exports.DomainLockNode = DomainLockNode; "use strict"; -var _map = __webpack_require__(12); +var _map = __webpack_require__(11); var _map2 = _interopRequireDefault(_map); @@ -4574,7 +4568,7 @@ exports.SelfDefendingUnicodeNode = SelfDefendingUnicodeNode; "use strict"; -var _map = __webpack_require__(12); +var _map = __webpack_require__(11); var _map2 = _interopRequireDefault(_map); @@ -4960,7 +4954,7 @@ exports.StringArrayRotateFunctionNode = StringArrayRotateFunctionNode; "use strict"; -var _map = __webpack_require__(12); +var _map = __webpack_require__(11); var _map2 = _interopRequireDefault(_map); @@ -5143,7 +5137,7 @@ var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); var CustomNodes_1 = __webpack_require__(15); var AbstractNodeTransformer_1 = __webpack_require__(16); -var Node_1 = __webpack_require__(11); +var Node_1 = __webpack_require__(12); var RandomGeneratorUtils_1 = __webpack_require__(9); var Utils_1 = __webpack_require__(14); var BlockStatementControlFlowTransformer = BlockStatementControlFlowTransformer_1 = function (_AbstractNodeTransfor) { @@ -5166,7 +5160,7 @@ var BlockStatementControlFlowTransformer = BlockStatementControlFlowTransformer_ return { leave: function leave(node, parentNode) { if (Node_1.Node.isBlockStatementNode(node)) { - _this2.transformNode(node, parentNode); + return _this2.transformNode(node, parentNode); } } }; @@ -5213,7 +5207,7 @@ var BlockStatementControlFlowTransformer_1; "use strict"; -var _map = __webpack_require__(12); +var _map = __webpack_require__(11); var _map2 = _interopRequireDefault(_map); @@ -5246,7 +5240,7 @@ var estraverse = __webpack_require__(17); var CustomNodes_1 = __webpack_require__(15); var NodeType_1 = __webpack_require__(19); var AbstractNodeTransformer_1 = __webpack_require__(16); -var Node_1 = __webpack_require__(11); +var Node_1 = __webpack_require__(12); var NodeAppender_1 = __webpack_require__(26); var NodeControlFlowReplacers_1 = __webpack_require__(39); var NodeUtils_1 = __webpack_require__(8); @@ -5275,7 +5269,7 @@ var FunctionControlFlowTransformer = FunctionControlFlowTransformer_1 = function return { leave: function leave(node, parentNode) { if (Node_1.Node.isFunctionDeclarationNode(node) || Node_1.Node.isFunctionExpressionNode(node)) { - _this2.transformNode(node, parentNode); + return _this2.transformNode(node, parentNode); } } }; @@ -5451,7 +5445,7 @@ var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); var CustomNodes_1 = __webpack_require__(15); var AbstractControlFlowReplacer_1 = __webpack_require__(41); -var Node_1 = __webpack_require__(11); +var Node_1 = __webpack_require__(12); var CallExpressionControlFlowReplacer = CallExpressionControlFlowReplacer_1 = function (_AbstractControlFlowR) { (0, _inherits3.default)(CallExpressionControlFlowReplacer, _AbstractControlFlowR); @@ -5527,7 +5521,7 @@ var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); var CustomNodes_1 = __webpack_require__(15); var ExpressionWithOperatorControlFlowReplacer_1 = __webpack_require__(42); -var Node_1 = __webpack_require__(11); +var Node_1 = __webpack_require__(12); var NodeUtils_1 = __webpack_require__(8); var LogicalExpressionControlFlowReplacer = LogicalExpressionControlFlowReplacer_1 = function (_ExpressionWithOperat) { (0, _inherits3.default)(LogicalExpressionControlFlowReplacer, _ExpressionWithOperat); @@ -5604,7 +5598,7 @@ var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); var NodeType_1 = __webpack_require__(19); var AbstractNodeTransformer_1 = __webpack_require__(16); -var Node_1 = __webpack_require__(11); +var Node_1 = __webpack_require__(12); var MemberExpressionTransformer = function (_AbstractNodeTransfor) { (0, _inherits3.default)(MemberExpressionTransformer, _AbstractNodeTransfor); @@ -5621,7 +5615,7 @@ var MemberExpressionTransformer = function (_AbstractNodeTransfor) { return { enter: function enter(node, parentNode) { if (Node_1.Node.isMemberExpressionNode(node)) { - _this2.transformNode(node, parentNode); + return _this2.transformNode(node, parentNode); } } }; @@ -5682,7 +5676,7 @@ var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); var NodeType_1 = __webpack_require__(19); var AbstractNodeTransformer_1 = __webpack_require__(16); -var Node_1 = __webpack_require__(11); +var Node_1 = __webpack_require__(12); var MethodDefinitionTransformer = MethodDefinitionTransformer_1 = function (_AbstractNodeTransfor) { (0, _inherits3.default)(MethodDefinitionTransformer, _AbstractNodeTransfor); @@ -5699,7 +5693,7 @@ var MethodDefinitionTransformer = MethodDefinitionTransformer_1 = function (_Abs return { enter: function enter(node, parentNode) { if (Node_1.Node.isMethodDefinitionNode(node)) { - _this2.transformNode(node, parentNode); + return _this2.transformNode(node, parentNode); } } }; @@ -5762,7 +5756,7 @@ var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); var AbstractNodeTransformer_1 = __webpack_require__(16); -var Node_1 = __webpack_require__(11); +var Node_1 = __webpack_require__(12); var Nodes_1 = __webpack_require__(20); var TemplateLiteralTransformer = TemplateLiteralTransformer_1 = function (_AbstractNodeTransfor) { (0, _inherits3.default)(TemplateLiteralTransformer, _AbstractNodeTransfor); @@ -5780,7 +5774,7 @@ var TemplateLiteralTransformer = TemplateLiteralTransformer_1 = function (_Abstr return { enter: function enter(node, parentNode) { if (Node_1.Node.isTemplateLiteralNode(node)) { - _this2.transformNode(node, parentNode); + return _this2.transformNode(node, parentNode); } } }; @@ -5904,7 +5898,7 @@ var ServiceIdentifiers_1 = __webpack_require__(4); var estraverse = __webpack_require__(17); var NodeObfuscationReplacers_1 = __webpack_require__(23); var AbstractNodeTransformer_1 = __webpack_require__(16); -var Node_1 = __webpack_require__(11); +var Node_1 = __webpack_require__(12); var CatchClauseTransformer = function (_AbstractNodeTransfor) { (0, _inherits3.default)(CatchClauseTransformer, _AbstractNodeTransfor); @@ -5925,7 +5919,7 @@ var CatchClauseTransformer = function (_AbstractNodeTransfor) { return { enter: function enter(node, parentNode) { if (Node_1.Node.isCatchClauseNode(node)) { - _this2.transformNode(node, parentNode); + return _this2.transformNode(node, parentNode); } } }; @@ -5979,7 +5973,7 @@ var _getIterator2 = __webpack_require__(21); var _getIterator3 = _interopRequireDefault(_getIterator2); -var _map = __webpack_require__(12); +var _map = __webpack_require__(11); var _map2 = _interopRequireDefault(_map); @@ -6012,7 +6006,7 @@ var estraverse = __webpack_require__(17); var NodeObfuscationReplacers_1 = __webpack_require__(23); var NodeType_1 = __webpack_require__(19); var AbstractNodeTransformer_1 = __webpack_require__(16); -var Node_1 = __webpack_require__(11); +var Node_1 = __webpack_require__(12); var NodeUtils_1 = __webpack_require__(8); var FunctionDeclarationTransformer = function (_AbstractNodeTransfor) { (0, _inherits3.default)(FunctionDeclarationTransformer, _AbstractNodeTransfor); @@ -6035,7 +6029,7 @@ var FunctionDeclarationTransformer = function (_AbstractNodeTransfor) { return { enter: function enter(node, parentNode) { if (Node_1.Node.isFunctionDeclarationNode(node)) { - _this2.transformNode(node, parentNode); + return _this2.transformNode(node, parentNode); } } }; @@ -6148,7 +6142,7 @@ var ServiceIdentifiers_1 = __webpack_require__(4); var estraverse = __webpack_require__(17); var NodeObfuscationReplacers_1 = __webpack_require__(23); var AbstractNodeTransformer_1 = __webpack_require__(16); -var Node_1 = __webpack_require__(11); +var Node_1 = __webpack_require__(12); var FunctionTransformer = function (_AbstractNodeTransfor) { (0, _inherits3.default)(FunctionTransformer, _AbstractNodeTransfor); @@ -6169,7 +6163,7 @@ var FunctionTransformer = function (_AbstractNodeTransfor) { return { enter: function enter(node, parentNode) { if (Node_1.Node.isFunctionDeclarationNode(node) || Node_1.Node.isFunctionExpressionNode(node) || Node_1.Node.isArrowFunctionExpressionNode(node)) { - _this2.transformNode(node, parentNode); + return _this2.transformNode(node, parentNode); } } }; @@ -6266,7 +6260,7 @@ var ServiceIdentifiers_1 = __webpack_require__(4); var estraverse = __webpack_require__(17); var NodeObfuscationReplacers_1 = __webpack_require__(23); var AbstractNodeTransformer_1 = __webpack_require__(16); -var Node_1 = __webpack_require__(11); +var Node_1 = __webpack_require__(12); var LabeledStatementTransformer = function (_AbstractNodeTransfor) { (0, _inherits3.default)(LabeledStatementTransformer, _AbstractNodeTransfor); @@ -6287,7 +6281,7 @@ var LabeledStatementTransformer = function (_AbstractNodeTransfor) { return { enter: function enter(node, parentNode) { if (Node_1.Node.isLabeledStatementNode(node)) { - _this2.transformNode(node, parentNode); + return _this2.transformNode(node, parentNode); } } }; @@ -6363,7 +6357,7 @@ var ServiceIdentifiers_1 = __webpack_require__(4); var escodegen = __webpack_require__(28); var NodeObfuscationReplacers_1 = __webpack_require__(23); var AbstractNodeTransformer_1 = __webpack_require__(16); -var Node_1 = __webpack_require__(11); +var Node_1 = __webpack_require__(12); var LiteralTransformer = function (_AbstractNodeTransfor) { (0, _inherits3.default)(LiteralTransformer, _AbstractNodeTransfor); @@ -6384,7 +6378,7 @@ var LiteralTransformer = function (_AbstractNodeTransfor) { return { enter: function enter(node, parentNode) { if (Node_1.Node.isLiteralNode(node)) { - _this2.transformNode(node, parentNode); + return _this2.transformNode(node, parentNode); } } }; @@ -6456,7 +6450,7 @@ var ServiceIdentifiers_1 = __webpack_require__(4); var escodegen = __webpack_require__(28); var NodeType_1 = __webpack_require__(19); var AbstractNodeTransformer_1 = __webpack_require__(16); -var Node_1 = __webpack_require__(11); +var Node_1 = __webpack_require__(12); var Utils_1 = __webpack_require__(14); var ObjectExpressionTransformer = ObjectExpressionTransformer_1 = function (_AbstractNodeTransfor) { (0, _inherits3.default)(ObjectExpressionTransformer, _AbstractNodeTransfor); @@ -6474,7 +6468,7 @@ var ObjectExpressionTransformer = ObjectExpressionTransformer_1 = function (_Abs return { enter: function enter(node, parentNode) { if (Node_1.Node.isObjectExpressionNode(node)) { - _this2.transformNode(node, parentNode); + return _this2.transformNode(node, parentNode); } } }; @@ -6536,7 +6530,7 @@ var _getIterator2 = __webpack_require__(21); var _getIterator3 = _interopRequireDefault(_getIterator2); -var _map = __webpack_require__(12); +var _map = __webpack_require__(11); var _map2 = _interopRequireDefault(_map); @@ -6569,7 +6563,7 @@ var estraverse = __webpack_require__(17); var NodeObfuscationReplacers_1 = __webpack_require__(23); var NodeType_1 = __webpack_require__(19); var AbstractNodeTransformer_1 = __webpack_require__(16); -var Node_1 = __webpack_require__(11); +var Node_1 = __webpack_require__(12); var NodeUtils_1 = __webpack_require__(8); var VariableDeclarationTransformer = function (_AbstractNodeTransfor) { (0, _inherits3.default)(VariableDeclarationTransformer, _AbstractNodeTransfor); @@ -6592,7 +6586,7 @@ var VariableDeclarationTransformer = function (_AbstractNodeTransfor) { return { enter: function enter(node, parentNode) { if (Node_1.Node.isVariableDeclarationNode(node)) { - _this2.transformNode(node, parentNode); + return _this2.transformNode(node, parentNode); } } }; @@ -6742,7 +6736,7 @@ exports.BooleanLiteralReplacer = BooleanLiteralReplacer; "use strict"; -var _map = __webpack_require__(12); +var _map = __webpack_require__(11); var _map2 = _interopRequireDefault(_map); @@ -6821,7 +6815,7 @@ exports.IdentifierReplacer = IdentifierReplacer; "use strict"; -var _map = __webpack_require__(12); +var _map = __webpack_require__(11); var _map2 = _interopRequireDefault(_map); @@ -6892,7 +6886,7 @@ exports.NumberLiteralReplacer = NumberLiteralReplacer; "use strict"; -var _map = __webpack_require__(12); +var _map = __webpack_require__(11); var _map2 = _interopRequireDefault(_map); @@ -7368,7 +7362,7 @@ var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); var estraverse = __webpack_require__(17); var CalleeDataExtractors_1 = __webpack_require__(37); -var Node_1 = __webpack_require__(11); +var Node_1 = __webpack_require__(12); var NodeUtils_1 = __webpack_require__(8); var StackTraceAnalyzer = StackTraceAnalyzer_1 = function () { function StackTraceAnalyzer(calleeDataExtractorsFactory) { @@ -7486,7 +7480,7 @@ var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); var estraverse = __webpack_require__(17); var AbstractCalleeDataExtractor_1 = __webpack_require__(33); -var Node_1 = __webpack_require__(11); +var Node_1 = __webpack_require__(12); var NodeUtils_1 = __webpack_require__(8); var FunctionDeclarationCalleeDataExtractor = function (_AbstractCalleeDataEx) { (0, _inherits3.default)(FunctionDeclarationCalleeDataExtractor, _AbstractCalleeDataEx); @@ -7564,7 +7558,7 @@ var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); var estraverse = __webpack_require__(17); var AbstractCalleeDataExtractor_1 = __webpack_require__(33); -var Node_1 = __webpack_require__(11); +var Node_1 = __webpack_require__(12); var NodeUtils_1 = __webpack_require__(8); var FunctionExpressionCalleeDataExtractor = function (_AbstractCalleeDataEx) { (0, _inherits3.default)(FunctionExpressionCalleeDataExtractor, _AbstractCalleeDataEx); @@ -7648,7 +7642,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); var estraverse = __webpack_require__(17); -var Node_1 = __webpack_require__(11); +var Node_1 = __webpack_require__(12); var NodeUtils_1 = __webpack_require__(8); var AbstractCalleeDataExtractor_1 = __webpack_require__(33); var ObjectExpressionCalleeDataExtractor = function (_AbstractCalleeDataEx) { @@ -7913,7 +7907,7 @@ exports.ControlFlowStorage = ControlFlowStorage; "use strict"; -var _map = __webpack_require__(12); +var _map = __webpack_require__(11); var _map2 = _interopRequireDefault(_map); @@ -8334,21 +8328,20 @@ module.exports = require("fs"); module.exports = require("lodash"); /***/ }), -/* 146 */, -/* 147 */ +/* 146 */ /***/ (function(module, exports) { module.exports = require("mkdirp"); /***/ }), -/* 148 */ +/* 147 */ /***/ (function(module, exports) { module.exports = require("reflect-metadata"); /***/ }), -/* 149 */, -/* 150 */ +/* 148 */, +/* 149 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; diff --git a/src/Obfuscator.ts b/src/Obfuscator.ts index d38a6e15..fe56d7cf 100644 --- a/src/Obfuscator.ts +++ b/src/Obfuscator.ts @@ -27,7 +27,6 @@ export class Obfuscator implements IObfuscator { */ private static readonly controlFlowTransformersList: NodeTransformers[] = [ NodeTransformers.BlockStatementControlFlowTransformer, - NodeTransformers.FunctionControlFlowTransformer, NodeTransformers.FunctionControlFlowTransformer ]; @@ -44,15 +43,13 @@ export class Obfuscator implements IObfuscator { * @type {NodeTransformers[]} */ private static readonly obfuscatingTransformersList: NodeTransformers[] = [ - NodeTransformers.FunctionTransformer, - NodeTransformers.FunctionDeclarationTransformer, NodeTransformers.CatchClauseTransformer, NodeTransformers.FunctionDeclarationTransformer, NodeTransformers.FunctionTransformer, - NodeTransformers.FunctionTransformer, + NodeTransformers.LabeledStatementTransformer, + NodeTransformers.LiteralTransformer, NodeTransformers.ObjectExpressionTransformer, - NodeTransformers.VariableDeclarationTransformer, - NodeTransformers.LiteralTransformer + NodeTransformers.VariableDeclarationTransformer ]; /** @@ -186,56 +183,60 @@ export class Obfuscator implements IObfuscator { * @return {estraverse.Visitor} */ private mergeTransformerVisitors (visitors: estraverse.Visitor[]): estraverse.Visitor { - const enterVisitors: any[] = visitors.filter((visitor: estraverse.Visitor) => { - return visitor.enter !== undefined; - }).map((visitor: estraverse.Visitor) => { - return visitor.enter; - }); - const leaveVisitors: any[] = visitors.filter((visitor: estraverse.Visitor) => { - return visitor.leave !== undefined; - }).map((visitor: estraverse.Visitor) => { - return visitor.leave; - }); + const enterVisitor: any = this.getVisitorForDirection( + visitors.filter((visitor: estraverse.Visitor) => visitor.enter !== undefined), + 'enter', + this.cachedEnterVisitors + ); + const leaveVisitor: any = this.getVisitorForDirection( + visitors.filter((visitor: estraverse.Visitor) => visitor.leave !== undefined), + 'leave', + this.cachedLeaveVisitors + ); return { - enter: (node: ESTree.Node, parentNode: ESTree.Node) => { - let nodeVisitors: estraverse.Visitor[]; - let saveToCache: boolean = true; + enter: enterVisitor, + leave: leaveVisitor + }; + } - if (this.cachedEnterVisitors.has(node.type)) { - nodeVisitors = this.cachedEnterVisitors.get(node.type); - saveToCache = false; - } else { - nodeVisitors = enterVisitors; + /** + * @param visitors + * @param direction + * @param cache + * @return {estraverse.Visitor} + */ + private getVisitorForDirection (visitors: estraverse.Visitor[], direction: string, cache: Map): estraverse.Visitor | null { + if (!visitors.length) { + return null; + } + + return (node: ESTree.Node, parentNode: ESTree.Node) => { + if (cache.has(node.type)) { + const cachedVisitorsForNode: estraverse.Visitor[] = cache.get(node.type); + + if (!cachedVisitorsForNode.length) { + return; } - nodeVisitors.forEach((visitor: any) => { - visitor.call(this, node, parentNode); + cachedVisitorsForNode.forEach((visitor: any) => { + node = visitor[direction].call(this, node, parentNode); + }); + } else { + const visitorsForNode: estraverse.Visitor[] = visitors.filter((visitor: any) => { + const result: ESTree.Node = visitor[direction].call(this, node, parentNode); + + if (result) { + node = result; + } + + return result; }); - if (saveToCache) { - this.cachedEnterVisitors.set(node.type, nodeVisitors); - } - }, - leave: (node: ESTree.Node, parentNode: ESTree.Node) => { - let nodeVisitors: estraverse.Visitor[]; - let saveToCache: boolean = true; - - if (this.cachedLeaveVisitors.has(node.type)) { - nodeVisitors = this.cachedLeaveVisitors.get(node.type); - saveToCache = false; - } else { - nodeVisitors = leaveVisitors; - } - - nodeVisitors.forEach((visitor: any) => { - visitor.call(this, node, parentNode); - }); - - if (saveToCache) { - this.cachedLeaveVisitors.set(node.type, nodeVisitors); - } + cache.set(node.type, visitorsForNode); } + + return node; }; } } diff --git a/src/node-transformers/control-flow-transformers/BlockStatementControlFlowTransformer.ts b/src/node-transformers/control-flow-transformers/BlockStatementControlFlowTransformer.ts index f10c2855..9e5ed77f 100644 --- a/src/node-transformers/control-flow-transformers/BlockStatementControlFlowTransformer.ts +++ b/src/node-transformers/control-flow-transformers/BlockStatementControlFlowTransformer.ts @@ -57,7 +57,7 @@ export class BlockStatementControlFlowTransformer extends AbstractNodeTransforme return { leave: (node: ESTree.Node, parentNode: ESTree.Node) => { if (Node.isBlockStatementNode(node)) { - this.transformNode(node, parentNode); + return this.transformNode(node, parentNode); } } }; diff --git a/src/node-transformers/control-flow-transformers/FunctionControlFlowTransformer.ts b/src/node-transformers/control-flow-transformers/FunctionControlFlowTransformer.ts index c84b4aa7..17bb7eb8 100644 --- a/src/node-transformers/control-flow-transformers/FunctionControlFlowTransformer.ts +++ b/src/node-transformers/control-flow-transformers/FunctionControlFlowTransformer.ts @@ -119,7 +119,7 @@ export class FunctionControlFlowTransformer extends AbstractNodeTransformer { return { leave: (node: ESTree.Node, parentNode: ESTree.Node) => { if (Node.isFunctionDeclarationNode(node) || Node.isFunctionExpressionNode(node)) { - this.transformNode(node, parentNode); + return this.transformNode(node, parentNode); } } }; diff --git a/src/node-transformers/converting-transformers/MemberExpressionTransformer.ts b/src/node-transformers/converting-transformers/MemberExpressionTransformer.ts index 108b9971..8637810d 100644 --- a/src/node-transformers/converting-transformers/MemberExpressionTransformer.ts +++ b/src/node-transformers/converting-transformers/MemberExpressionTransformer.ts @@ -29,7 +29,7 @@ export class MemberExpressionTransformer extends AbstractNodeTransformer { return { enter: (node: ESTree.Node, parentNode: ESTree.Node) => { if (Node.isMemberExpressionNode(node)) { - this.transformNode(node, parentNode); + return this.transformNode(node, parentNode); } } }; diff --git a/src/node-transformers/converting-transformers/MethodDefinitionTransformer.ts b/src/node-transformers/converting-transformers/MethodDefinitionTransformer.ts index 9d944c47..6f996bd2 100644 --- a/src/node-transformers/converting-transformers/MethodDefinitionTransformer.ts +++ b/src/node-transformers/converting-transformers/MethodDefinitionTransformer.ts @@ -43,7 +43,7 @@ export class MethodDefinitionTransformer extends AbstractNodeTransformer { return { enter: (node: ESTree.Node, parentNode: ESTree.Node) => { if (Node.isMethodDefinitionNode(node)) { - this.transformNode(node, parentNode); + return this.transformNode(node, parentNode); } } }; diff --git a/src/node-transformers/converting-transformers/TemplateLiteralTransformer.ts b/src/node-transformers/converting-transformers/TemplateLiteralTransformer.ts index 67b29f78..bd4bb216 100644 --- a/src/node-transformers/converting-transformers/TemplateLiteralTransformer.ts +++ b/src/node-transformers/converting-transformers/TemplateLiteralTransformer.ts @@ -40,7 +40,7 @@ export class TemplateLiteralTransformer extends AbstractNodeTransformer { return { enter: (node: ESTree.Node, parentNode: ESTree.Node) => { if (Node.isTemplateLiteralNode(node)) { - this.transformNode(node, parentNode); + return this.transformNode(node, parentNode); } } }; diff --git a/src/node-transformers/obfuscating-transformers/CatchClauseTransformer.ts b/src/node-transformers/obfuscating-transformers/CatchClauseTransformer.ts index 4e02fe22..6edb41d3 100644 --- a/src/node-transformers/obfuscating-transformers/CatchClauseTransformer.ts +++ b/src/node-transformers/obfuscating-transformers/CatchClauseTransformer.ts @@ -48,7 +48,7 @@ export class CatchClauseTransformer extends AbstractNodeTransformer { return { enter: (node: ESTree.Node, parentNode: ESTree.Node) => { if (Node.isCatchClauseNode(node)) { - this.transformNode(node, parentNode); + return this.transformNode(node, parentNode); } } }; diff --git a/src/node-transformers/obfuscating-transformers/FunctionDeclarationTransformer.ts b/src/node-transformers/obfuscating-transformers/FunctionDeclarationTransformer.ts index bc0180b1..1f57feaf 100644 --- a/src/node-transformers/obfuscating-transformers/FunctionDeclarationTransformer.ts +++ b/src/node-transformers/obfuscating-transformers/FunctionDeclarationTransformer.ts @@ -58,7 +58,7 @@ export class FunctionDeclarationTransformer extends AbstractNodeTransformer { return { enter: (node: ESTree.Node, parentNode: ESTree.Node) => { if (Node.isFunctionDeclarationNode(node)) { - this.transformNode(node, parentNode); + return this.transformNode(node, parentNode); } } }; diff --git a/src/node-transformers/obfuscating-transformers/FunctionTransformer.ts b/src/node-transformers/obfuscating-transformers/FunctionTransformer.ts index cdddf89f..67074c27 100644 --- a/src/node-transformers/obfuscating-transformers/FunctionTransformer.ts +++ b/src/node-transformers/obfuscating-transformers/FunctionTransformer.ts @@ -52,7 +52,7 @@ export class FunctionTransformer extends AbstractNodeTransformer { Node.isFunctionExpressionNode(node) || Node.isArrowFunctionExpressionNode(node) ) { - this.transformNode(node, parentNode); + return this.transformNode(node, parentNode); } } }; diff --git a/src/node-transformers/obfuscating-transformers/LabeledStatementTransformer.ts b/src/node-transformers/obfuscating-transformers/LabeledStatementTransformer.ts index 2080fb2c..0b0bc25c 100644 --- a/src/node-transformers/obfuscating-transformers/LabeledStatementTransformer.ts +++ b/src/node-transformers/obfuscating-transformers/LabeledStatementTransformer.ts @@ -56,7 +56,7 @@ export class LabeledStatementTransformer extends AbstractNodeTransformer { return { enter: (node: ESTree.Node, parentNode: ESTree.Node) => { if (Node.isLabeledStatementNode(node)) { - this.transformNode(node, parentNode); + return this.transformNode(node, parentNode); } } }; diff --git a/src/node-transformers/obfuscating-transformers/LiteralTransformer.ts b/src/node-transformers/obfuscating-transformers/LiteralTransformer.ts index a4034e41..2246d851 100644 --- a/src/node-transformers/obfuscating-transformers/LiteralTransformer.ts +++ b/src/node-transformers/obfuscating-transformers/LiteralTransformer.ts @@ -40,7 +40,7 @@ export class LiteralTransformer extends AbstractNodeTransformer { return { enter: (node: ESTree.Node, parentNode: ESTree.Node) => { if (Node.isLiteralNode(node)) { - this.transformNode(node, parentNode); + return this.transformNode(node, parentNode); } } }; diff --git a/src/node-transformers/obfuscating-transformers/ObjectExpressionTransformer.ts b/src/node-transformers/obfuscating-transformers/ObjectExpressionTransformer.ts index 7eef875f..96ff5b2c 100644 --- a/src/node-transformers/obfuscating-transformers/ObjectExpressionTransformer.ts +++ b/src/node-transformers/obfuscating-transformers/ObjectExpressionTransformer.ts @@ -72,7 +72,7 @@ export class ObjectExpressionTransformer extends AbstractNodeTransformer { return { enter: (node: ESTree.Node, parentNode: ESTree.Node) => { if (Node.isObjectExpressionNode(node)) { - this.transformNode(node, parentNode); + return this.transformNode(node, parentNode); } } }; diff --git a/src/node-transformers/obfuscating-transformers/VariableDeclarationTransformer.ts b/src/node-transformers/obfuscating-transformers/VariableDeclarationTransformer.ts index 6cf1d9d5..09269240 100644 --- a/src/node-transformers/obfuscating-transformers/VariableDeclarationTransformer.ts +++ b/src/node-transformers/obfuscating-transformers/VariableDeclarationTransformer.ts @@ -59,7 +59,7 @@ export class VariableDeclarationTransformer extends AbstractNodeTransformer { return { enter: (node: ESTree.Node, parentNode: ESTree.Node) => { if (Node.isVariableDeclarationNode(node)) { - this.transformNode(node, parentNode); + return this.transformNode(node, parentNode); } } }; From 87b7c12faeacc76a90df140e46e9071e9f90a870 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Tue, 17 Jan 2017 14:03:08 +0300 Subject: [PATCH 17/28] transformers as visitor: fixed runtime errors --- dist/index.js | 81 ++++++++++++++++++++++------------- src/Obfuscator.ts | 58 +++++++++---------------- src/enums/VisitorDirection.ts | 6 +++ 3 files changed, 79 insertions(+), 66 deletions(-) create mode 100644 src/enums/VisitorDirection.ts diff --git a/dist/index.js b/dist/index.js index aac1ac16..374fb069 100644 --- a/dist/index.js +++ b/dist/index.js @@ -2473,14 +2473,14 @@ exports.ObfuscationResult = ObfuscationResult; "use strict"; +var _getIterator2 = __webpack_require__(21); + +var _getIterator3 = _interopRequireDefault(_getIterator2); + var _toConsumableArray2 = __webpack_require__(24); var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2); -var _map = __webpack_require__(11); - -var _map2 = _interopRequireDefault(_map); - var _classCallCheck2 = __webpack_require__(0); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); @@ -2497,14 +2497,13 @@ var ServiceIdentifiers_1 = __webpack_require__(4); var estraverse = __webpack_require__(17); var NodeTransformers_1 = __webpack_require__(40); var ObfuscationEvents_1 = __webpack_require__(22); +var VisitorDirection_1 = __webpack_require__(151); var Node_1 = __webpack_require__(12); var NodeUtils_1 = __webpack_require__(8); var Obfuscator = Obfuscator_1 = function () { function Obfuscator(stackTraceAnalyzer, obfuscationEventEmitter, customNodeGroupStorage, nodeTransformersFactory, options) { (0, _classCallCheck3.default)(this, Obfuscator); - this.cachedEnterVisitors = new _map2.default(); - this.cachedLeaveVisitors = new _map2.default(); this.stackTraceAnalyzer = stackTraceAnalyzer; this.obfuscationEventEmitter = obfuscationEventEmitter; this.customNodeGroupStorage = customNodeGroupStorage; @@ -2530,9 +2529,7 @@ var Obfuscator = Obfuscator_1 = function () { if (this.options.controlFlowFlattening) { astTree = this.transformAstTree(astTree, Obfuscator_1.controlFlowTransformersList); } - console.time(); astTree = this.transformAstTree(astTree, [].concat((0, _toConsumableArray3.default)(Obfuscator_1.convertingTransformersList), (0, _toConsumableArray3.default)(Obfuscator_1.obfuscatingTransformersList))); - console.timeEnd(); this.obfuscationEventEmitter.emit(ObfuscationEvents_1.ObfuscationEvents.AfterObfuscation, astTree, stackTraceData); return astTree; } @@ -2552,10 +2549,10 @@ var Obfuscator = Obfuscator_1 = function () { value: function mergeTransformerVisitors(visitors) { var enterVisitor = this.getVisitorForDirection(visitors.filter(function (visitor) { return visitor.enter !== undefined; - }), 'enter', this.cachedEnterVisitors); + }), VisitorDirection_1.VisitorDirection.enter); var leaveVisitor = this.getVisitorForDirection(visitors.filter(function (visitor) { return visitor.leave !== undefined; - }), 'leave', this.cachedLeaveVisitors); + }), VisitorDirection_1.VisitorDirection.leave); return { enter: enterVisitor, leave: leaveVisitor @@ -2563,31 +2560,43 @@ var Obfuscator = Obfuscator_1 = function () { } }, { key: "getVisitorForDirection", - value: function getVisitorForDirection(visitors, direction, cache) { - var _this3 = this; - + value: function getVisitorForDirection(visitors, direction) { if (!visitors.length) { return null; } return function (node, parentNode) { - if (cache.has(node.type)) { - var cachedVisitorsForNode = cache.get(node.type); - if (!cachedVisitorsForNode.length) { - return; - } - cachedVisitorsForNode.forEach(function (visitor) { - node = visitor[direction].call(_this3, node, parentNode); - }); - } else { - var visitorsForNode = visitors.filter(function (visitor) { - var result = visitor[direction].call(_this3, node, parentNode); - if (result) { - node = result; + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; + + try { + for (var _iterator = (0, _getIterator3.default)(visitors), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var visitor = _step.value; + + var visitorResult = visitor[direction](node, parentNode); + if (!visitorResult) { + continue; } - return result; - }); - cache.set(node.type, visitorsForNode); + if (visitorResult === estraverse.VisitorOption.Break || visitorResult === estraverse.VisitorOption.Remove || visitorResult === estraverse.VisitorOption.Skip) { + return visitorResult; + } + node = visitorResult; + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator.return) { + _iterator.return(); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } } + return node; }; } @@ -8350,6 +8359,20 @@ module.exports = require("reflect-metadata"); var JavaScriptObfuscator_1 = __webpack_require__(25); module.exports = JavaScriptObfuscator_1.JavaScriptObfuscator; +/***/ }), +/* 150 */, +/* 151 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Utils_1 = __webpack_require__(14); +exports.VisitorDirection = Utils_1.Utils.strEnumify({ + enter: 'enter', + leave: 'leave' +}); + /***/ }) /******/ ]); //# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/src/Obfuscator.ts b/src/Obfuscator.ts index fe56d7cf..9d9eaaed 100644 --- a/src/Obfuscator.ts +++ b/src/Obfuscator.ts @@ -5,6 +5,7 @@ import * as estraverse from 'estraverse'; import * as ESTree from 'estree'; import { TNodeTransformersFactory } from './types/container/TNodeTransformersFactory'; +import { TVisitorDirection } from './types/TVisitorDirection'; import { ICustomNodeGroup } from './interfaces/custom-nodes/ICustomNodeGroup'; import { IObfuscationEventEmitter } from './interfaces/event-emitters/IObfuscationEventEmitter'; @@ -16,6 +17,7 @@ import { IStorage } from './interfaces/storages/IStorage'; import { NodeTransformers } from './enums/container/NodeTransformers'; import { ObfuscationEvents } from './enums/ObfuscationEvents'; +import { VisitorDirection } from './enums/VisitorDirection'; import { Node } from './node/Node'; import { NodeUtils } from './node/NodeUtils'; @@ -52,16 +54,6 @@ export class Obfuscator implements IObfuscator { NodeTransformers.VariableDeclarationTransformer ]; - /** - * @type {Map} - */ - private readonly cachedEnterVisitors: Map = new Map(); - - /** - * @type {Map} - */ - private readonly cachedLeaveVisitors: Map = new Map(); - /** * @type {IStorage} */ @@ -144,7 +136,6 @@ export class Obfuscator implements IObfuscator { } // second pass: nodes obfuscation - console.time(); astTree = this.transformAstTree( astTree, [ @@ -152,7 +143,6 @@ export class Obfuscator implements IObfuscator { ...Obfuscator.obfuscatingTransformersList ] ); - console.timeEnd(); this.obfuscationEventEmitter.emit(ObfuscationEvents.AfterObfuscation, astTree, stackTraceData); @@ -185,13 +175,11 @@ export class Obfuscator implements IObfuscator { private mergeTransformerVisitors (visitors: estraverse.Visitor[]): estraverse.Visitor { const enterVisitor: any = this.getVisitorForDirection( visitors.filter((visitor: estraverse.Visitor) => visitor.enter !== undefined), - 'enter', - this.cachedEnterVisitors + VisitorDirection.enter ); const leaveVisitor: any = this.getVisitorForDirection( visitors.filter((visitor: estraverse.Visitor) => visitor.leave !== undefined), - 'leave', - this.cachedLeaveVisitors + VisitorDirection.leave ); return { @@ -203,37 +191,33 @@ export class Obfuscator implements IObfuscator { /** * @param visitors * @param direction - * @param cache - * @return {estraverse.Visitor} + * @return {estraverse.Visitor | null} */ - private getVisitorForDirection (visitors: estraverse.Visitor[], direction: string, cache: Map): estraverse.Visitor | null { + private getVisitorForDirection ( + visitors: estraverse.Visitor[], + direction: TVisitorDirection + ): estraverse.Visitor | null { if (!visitors.length) { return null; } return (node: ESTree.Node, parentNode: ESTree.Node) => { - if (cache.has(node.type)) { - const cachedVisitorsForNode: estraverse.Visitor[] = cache.get(node.type); + for (const visitor of visitors) { + const visitorResult: estraverse.VisitorOption | ESTree.Node | void = visitor[direction]!(node, parentNode); - if (!cachedVisitorsForNode.length) { - return; + if (!visitorResult) { + continue; } - cachedVisitorsForNode.forEach((visitor: any) => { - node = visitor[direction].call(this, node, parentNode); - }); - } else { - const visitorsForNode: estraverse.Visitor[] = visitors.filter((visitor: any) => { - const result: ESTree.Node = visitor[direction].call(this, node, parentNode); + if ( + visitorResult === estraverse.VisitorOption.Break || + visitorResult === estraverse.VisitorOption.Remove || + visitorResult === estraverse.VisitorOption.Skip + ) { + return visitorResult; + } - if (result) { - node = result; - } - - return result; - }); - - cache.set(node.type, visitorsForNode); + node = visitorResult; } return node; diff --git a/src/enums/VisitorDirection.ts b/src/enums/VisitorDirection.ts new file mode 100644 index 00000000..38a1c124 --- /dev/null +++ b/src/enums/VisitorDirection.ts @@ -0,0 +1,6 @@ +import { Utils } from '../utils/Utils'; + +export const VisitorDirection: any = Utils.strEnumify({ + enter: 'enter', + leave: 'leave' +}); From 1eeb7f1b2a9ff585de9fec61088c7944af47dd6f Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Tue, 17 Jan 2017 14:26:53 +0300 Subject: [PATCH 18/28] transformers as visitor: refactoring --- dist/index.js | 33 ++++++++++++++------------------- src/Obfuscator.ts | 30 ++++++++++-------------------- 2 files changed, 24 insertions(+), 39 deletions(-) diff --git a/dist/index.js b/dist/index.js index 374fb069..689f51f0 100644 --- a/dist/index.js +++ b/dist/index.js @@ -2538,29 +2538,24 @@ var Obfuscator = Obfuscator_1 = function () { value: function transformAstTree(astTree, nodeTransformers) { var _this2 = this; - var mergedVisitors = this.mergeTransformerVisitors(nodeTransformers.map(function (nodeTransformer) { + var visitors = nodeTransformers.map(function (nodeTransformer) { return _this2.nodeTransformersFactory(nodeTransformer).getVisitor(); - })); - estraverse.replace(astTree, mergedVisitors); + }); + var enterVisitor = this.mergeVisitorsForDirection(visitors.filter(function (visitor) { + return visitor.enter !== undefined; + }), VisitorDirection_1.VisitorDirection.enter); + var leaveVisitor = this.mergeVisitorsForDirection(visitors.filter(function (visitor) { + return visitor.leave !== undefined; + }), VisitorDirection_1.VisitorDirection.leave); + estraverse.replace(astTree, { + enter: enterVisitor, + leave: leaveVisitor + }); return astTree; } }, { - key: "mergeTransformerVisitors", - value: function mergeTransformerVisitors(visitors) { - var enterVisitor = this.getVisitorForDirection(visitors.filter(function (visitor) { - return visitor.enter !== undefined; - }), VisitorDirection_1.VisitorDirection.enter); - var leaveVisitor = this.getVisitorForDirection(visitors.filter(function (visitor) { - return visitor.leave !== undefined; - }), VisitorDirection_1.VisitorDirection.leave); - return { - enter: enterVisitor, - leave: leaveVisitor - }; - } - }, { - key: "getVisitorForDirection", - value: function getVisitorForDirection(visitors, direction) { + key: "mergeVisitorsForDirection", + value: function mergeVisitorsForDirection(visitors, direction) { if (!visitors.length) { return null; } diff --git a/src/Obfuscator.ts b/src/Obfuscator.ts index 9d9eaaed..474c4918 100644 --- a/src/Obfuscator.ts +++ b/src/Obfuscator.ts @@ -157,35 +157,25 @@ export class Obfuscator implements IObfuscator { astTree: ESTree.Program, nodeTransformers: NodeTransformers[] ): ESTree.Program { - const mergedVisitors: estraverse.Visitor = this.mergeTransformerVisitors( - nodeTransformers.map((nodeTransformer: NodeTransformers): estraverse.Visitor => { + const visitors: estraverse.Visitor[] = nodeTransformers + .map((nodeTransformer: NodeTransformers): estraverse.Visitor => { return this.nodeTransformersFactory(nodeTransformer).getVisitor(); - }) - ); - - estraverse.replace(astTree, mergedVisitors); - - return astTree; - } - - /** - * @param visitors - * @return {estraverse.Visitor} - */ - private mergeTransformerVisitors (visitors: estraverse.Visitor[]): estraverse.Visitor { - const enterVisitor: any = this.getVisitorForDirection( + }); + const enterVisitor: any = this.mergeVisitorsForDirection( visitors.filter((visitor: estraverse.Visitor) => visitor.enter !== undefined), VisitorDirection.enter ); - const leaveVisitor: any = this.getVisitorForDirection( + const leaveVisitor: any = this.mergeVisitorsForDirection( visitors.filter((visitor: estraverse.Visitor) => visitor.leave !== undefined), VisitorDirection.leave ); - return { + estraverse.replace(astTree, { enter: enterVisitor, leave: leaveVisitor - }; + }); + + return astTree; } /** @@ -193,7 +183,7 @@ export class Obfuscator implements IObfuscator { * @param direction * @return {estraverse.Visitor | null} */ - private getVisitorForDirection ( + private mergeVisitorsForDirection ( visitors: estraverse.Visitor[], direction: TVisitorDirection ): estraverse.Visitor | null { From f953680ab46dc74d3762be966a30d00b8f5f5e31 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Tue, 17 Jan 2017 14:52:29 +0300 Subject: [PATCH 19/28] transformers as visitor: refactoring --- dist/index.js | 6 +++++- src/Obfuscator.ts | 14 +++++++++----- .../node-transformers/INodeTransformer.d.ts | 8 ++++++++ src/node-transformers/AbstractNodeTransformer.ts | 8 ++++++++ .../BlockStatementControlFlowTransformer.ts | 2 +- .../FunctionControlFlowTransformer.ts | 2 +- .../MemberExpressionTransformer.ts | 2 +- .../MethodDefinitionTransformer.ts | 2 +- .../TemplateLiteralTransformer.ts | 2 +- .../CatchClauseTransformer.ts | 2 +- .../FunctionDeclarationTransformer.ts | 2 +- .../FunctionTransformer.ts | 2 +- .../LabeledStatementTransformer.ts | 2 +- .../obfuscating-transformers/LiteralTransformer.ts | 2 +- .../ObjectExpressionTransformer.ts | 2 +- .../VariableDeclarationTransformer.ts | 2 +- src/types/TVisitorFunction.d.ts | 4 ++++ 17 files changed, 46 insertions(+), 18 deletions(-) create mode 100644 src/types/TVisitorFunction.d.ts diff --git a/dist/index.js b/dist/index.js index 689f51f0..285143d4 100644 --- a/dist/index.js +++ b/dist/index.js @@ -2568,7 +2568,11 @@ var Obfuscator = Obfuscator_1 = function () { for (var _iterator = (0, _getIterator3.default)(visitors), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var visitor = _step.value; - var visitorResult = visitor[direction](node, parentNode); + var visitorFunction = visitor[direction]; + if (!visitorFunction) { + continue; + } + var visitorResult = visitorFunction(node, parentNode); if (!visitorResult) { continue; } diff --git a/src/Obfuscator.ts b/src/Obfuscator.ts index 474c4918..30c7c303 100644 --- a/src/Obfuscator.ts +++ b/src/Obfuscator.ts @@ -6,6 +6,7 @@ import * as ESTree from 'estree'; import { TNodeTransformersFactory } from './types/container/TNodeTransformersFactory'; import { TVisitorDirection } from './types/TVisitorDirection'; +import { TVisitorFunction } from './types/TVisitorFunction'; import { ICustomNodeGroup } from './interfaces/custom-nodes/ICustomNodeGroup'; import { IObfuscationEventEmitter } from './interfaces/event-emitters/IObfuscationEventEmitter'; @@ -183,17 +184,20 @@ export class Obfuscator implements IObfuscator { * @param direction * @return {estraverse.Visitor | null} */ - private mergeVisitorsForDirection ( - visitors: estraverse.Visitor[], - direction: TVisitorDirection - ): estraverse.Visitor | null { + private mergeVisitorsForDirection (visitors: estraverse.Visitor[], direction: TVisitorDirection): TVisitorFunction | null { if (!visitors.length) { return null; } return (node: ESTree.Node, parentNode: ESTree.Node) => { for (const visitor of visitors) { - const visitorResult: estraverse.VisitorOption | ESTree.Node | void = visitor[direction]!(node, parentNode); + const visitorFunction: TVisitorFunction | undefined = visitor[direction]; + + if (!visitorFunction) { + continue; + } + + const visitorResult: estraverse.VisitorOption | ESTree.Node | void = visitorFunction(node, parentNode); if (!visitorResult) { continue; diff --git a/src/interfaces/node-transformers/INodeTransformer.d.ts b/src/interfaces/node-transformers/INodeTransformer.d.ts index f455a53d..fc15c82e 100644 --- a/src/interfaces/node-transformers/INodeTransformer.d.ts +++ b/src/interfaces/node-transformers/INodeTransformer.d.ts @@ -1,8 +1,16 @@ import * as estraverse from 'estraverse'; +import * as ESTree from 'estree'; export interface INodeTransformer { /** * @returns {estraverse.Visitor} */ getVisitor (): estraverse.Visitor; + + /** + * @param node + * @param parentNode + * @returns {ESTree.Node} + */ + transformNode (node: ESTree.Node, parentNode: ESTree.Node): ESTree.Node; } diff --git a/src/node-transformers/AbstractNodeTransformer.ts b/src/node-transformers/AbstractNodeTransformer.ts index 345244cf..e47bc8aa 100644 --- a/src/node-transformers/AbstractNodeTransformer.ts +++ b/src/node-transformers/AbstractNodeTransformer.ts @@ -2,6 +2,7 @@ import { injectable, inject } from 'inversify'; import { ServiceIdentifiers } from '../container/ServiceIdentifiers'; import * as estraverse from 'estraverse'; +import * as ESTree from 'estree'; import { INodeTransformer } from '../interfaces/node-transformers/INodeTransformer'; import { IOptions } from '../interfaces/options/IOptions'; @@ -33,4 +34,11 @@ export abstract class AbstractNodeTransformer implements INodeTransformer { * @returns {estraverse.Visitor} */ public abstract getVisitor (): estraverse.Visitor; + + /** + * @param node + * @param parentNode + * @returns {ESTree.Node} + */ + public abstract transformNode (node: ESTree.Node, parentNode: ESTree.Node): ESTree.Node; } diff --git a/src/node-transformers/control-flow-transformers/BlockStatementControlFlowTransformer.ts b/src/node-transformers/control-flow-transformers/BlockStatementControlFlowTransformer.ts index 9e5ed77f..eea9fdc1 100644 --- a/src/node-transformers/control-flow-transformers/BlockStatementControlFlowTransformer.ts +++ b/src/node-transformers/control-flow-transformers/BlockStatementControlFlowTransformer.ts @@ -68,7 +68,7 @@ export class BlockStatementControlFlowTransformer extends AbstractNodeTransforme * @param parentNode * @returns {ESTree.Node} */ - private transformNode (blockStatementNode: ESTree.BlockStatement, parentNode: ESTree.Node): ESTree.Node { + public transformNode (blockStatementNode: ESTree.BlockStatement, parentNode: ESTree.Node): ESTree.Node { if ( RandomGeneratorUtils.getRandomFloat(0, 1) > this.options.controlFlowFlatteningThreshold || BlockStatementControlFlowTransformer.blockStatementHasProhibitedStatements(blockStatementNode) diff --git a/src/node-transformers/control-flow-transformers/FunctionControlFlowTransformer.ts b/src/node-transformers/control-flow-transformers/FunctionControlFlowTransformer.ts index 17bb7eb8..39f8f3db 100644 --- a/src/node-transformers/control-flow-transformers/FunctionControlFlowTransformer.ts +++ b/src/node-transformers/control-flow-transformers/FunctionControlFlowTransformer.ts @@ -130,7 +130,7 @@ export class FunctionControlFlowTransformer extends AbstractNodeTransformer { * @param parentNode * @returns {ESTree.Node} */ - private transformNode (functionNode: ESTree.Function, parentNode: ESTree.Node): ESTree.Node { + public transformNode (functionNode: ESTree.Function, parentNode: ESTree.Node): ESTree.Node { if (Node.isArrowFunctionExpressionNode(functionNode)) { return functionNode; } diff --git a/src/node-transformers/converting-transformers/MemberExpressionTransformer.ts b/src/node-transformers/converting-transformers/MemberExpressionTransformer.ts index 8637810d..8da23d9a 100644 --- a/src/node-transformers/converting-transformers/MemberExpressionTransformer.ts +++ b/src/node-transformers/converting-transformers/MemberExpressionTransformer.ts @@ -51,7 +51,7 @@ export class MemberExpressionTransformer extends AbstractNodeTransformer { * @param parentNode * @returns {ESTree.Node} */ - private transformNode (memberExpressionNode: ESTree.MemberExpression, parentNode: ESTree.Node): ESTree.Node { + public transformNode (memberExpressionNode: ESTree.MemberExpression, parentNode: ESTree.Node): ESTree.Node { if (Node.isIdentifierNode(memberExpressionNode.property)) { if (memberExpressionNode.computed) { return memberExpressionNode; diff --git a/src/node-transformers/converting-transformers/MethodDefinitionTransformer.ts b/src/node-transformers/converting-transformers/MethodDefinitionTransformer.ts index 6f996bd2..41af0ab2 100644 --- a/src/node-transformers/converting-transformers/MethodDefinitionTransformer.ts +++ b/src/node-transformers/converting-transformers/MethodDefinitionTransformer.ts @@ -64,7 +64,7 @@ export class MethodDefinitionTransformer extends AbstractNodeTransformer { * @param parentNode * @returns {ESTree.Node} */ - private transformNode (methodDefinitionNode: ESTree.MethodDefinition, parentNode: ESTree.Node): ESTree.Node { + public transformNode (methodDefinitionNode: ESTree.MethodDefinition, parentNode: ESTree.Node): ESTree.Node { if ( Node.isIdentifierNode(methodDefinitionNode.key) && !MethodDefinitionTransformer.ignoredNames.includes(methodDefinitionNode.key.name) && diff --git a/src/node-transformers/converting-transformers/TemplateLiteralTransformer.ts b/src/node-transformers/converting-transformers/TemplateLiteralTransformer.ts index bd4bb216..49af21bd 100644 --- a/src/node-transformers/converting-transformers/TemplateLiteralTransformer.ts +++ b/src/node-transformers/converting-transformers/TemplateLiteralTransformer.ts @@ -51,7 +51,7 @@ export class TemplateLiteralTransformer extends AbstractNodeTransformer { * @param parentNode * @returns {ESTree.Node} */ - private transformNode (templateLiteralNode: ESTree.TemplateLiteral, parentNode: ESTree.Node): ESTree.Node { + public transformNode (templateLiteralNode: ESTree.TemplateLiteral, parentNode: ESTree.Node): ESTree.Node { const templateLiteralExpressions: ESTree.Expression[] = templateLiteralNode.expressions; let nodes: (ESTree.Literal | ESTree.Expression)[] = []; diff --git a/src/node-transformers/obfuscating-transformers/CatchClauseTransformer.ts b/src/node-transformers/obfuscating-transformers/CatchClauseTransformer.ts index 6edb41d3..74b5a52b 100644 --- a/src/node-transformers/obfuscating-transformers/CatchClauseTransformer.ts +++ b/src/node-transformers/obfuscating-transformers/CatchClauseTransformer.ts @@ -59,7 +59,7 @@ export class CatchClauseTransformer extends AbstractNodeTransformer { * @param parentNode * @returns {ESTree.Node} */ - private transformNode (catchClauseNode: ESTree.CatchClause, parentNode: ESTree.Node): ESTree.Node { + public transformNode (catchClauseNode: ESTree.CatchClause, parentNode: ESTree.Node): ESTree.Node { const nodeIdentifier: number = this.nodeIdentifier++; this.storeCatchClauseParam(catchClauseNode, nodeIdentifier); diff --git a/src/node-transformers/obfuscating-transformers/FunctionDeclarationTransformer.ts b/src/node-transformers/obfuscating-transformers/FunctionDeclarationTransformer.ts index 1f57feaf..7145d04c 100644 --- a/src/node-transformers/obfuscating-transformers/FunctionDeclarationTransformer.ts +++ b/src/node-transformers/obfuscating-transformers/FunctionDeclarationTransformer.ts @@ -69,7 +69,7 @@ export class FunctionDeclarationTransformer extends AbstractNodeTransformer { * @param parentNode * @returns {ESTree.Node} */ - private transformNode (functionDeclarationNode: ESTree.FunctionDeclaration, parentNode: ESTree.Node): ESTree.Node { + public transformNode (functionDeclarationNode: ESTree.FunctionDeclaration, parentNode: ESTree.Node): ESTree.Node { const nodeIdentifier: number = this.nodeIdentifier++; const blockScopeOfFunctionDeclarationNode: TNodeWithBlockStatement = NodeUtils .getBlockScopesOfNode(functionDeclarationNode)[0]; diff --git a/src/node-transformers/obfuscating-transformers/FunctionTransformer.ts b/src/node-transformers/obfuscating-transformers/FunctionTransformer.ts index 67074c27..787dfa5d 100644 --- a/src/node-transformers/obfuscating-transformers/FunctionTransformer.ts +++ b/src/node-transformers/obfuscating-transformers/FunctionTransformer.ts @@ -63,7 +63,7 @@ export class FunctionTransformer extends AbstractNodeTransformer { * @param parentNode * @returns {ESTree.Node} */ - private transformNode (functionNode: ESTree.Function, parentNode: ESTree.Node): ESTree.Node { + public transformNode (functionNode: ESTree.Function, parentNode: ESTree.Node): ESTree.Node { const nodeIdentifier: number = this.nodeIdentifier++; this.storeFunctionParams(functionNode, nodeIdentifier); diff --git a/src/node-transformers/obfuscating-transformers/LabeledStatementTransformer.ts b/src/node-transformers/obfuscating-transformers/LabeledStatementTransformer.ts index 0b0bc25c..abb63df5 100644 --- a/src/node-transformers/obfuscating-transformers/LabeledStatementTransformer.ts +++ b/src/node-transformers/obfuscating-transformers/LabeledStatementTransformer.ts @@ -67,7 +67,7 @@ export class LabeledStatementTransformer extends AbstractNodeTransformer { * @param parentNode * @returns {ESTree.Node} */ - private transformNode (labeledStatementNode: ESTree.LabeledStatement, parentNode: ESTree.Node): ESTree.Node { + public transformNode (labeledStatementNode: ESTree.LabeledStatement, parentNode: ESTree.Node): ESTree.Node { const nodeIdentifier: number = this.nodeIdentifier++; this.storeLabeledStatementName(labeledStatementNode, nodeIdentifier); diff --git a/src/node-transformers/obfuscating-transformers/LiteralTransformer.ts b/src/node-transformers/obfuscating-transformers/LiteralTransformer.ts index 2246d851..83a4ff81 100644 --- a/src/node-transformers/obfuscating-transformers/LiteralTransformer.ts +++ b/src/node-transformers/obfuscating-transformers/LiteralTransformer.ts @@ -51,7 +51,7 @@ export class LiteralTransformer extends AbstractNodeTransformer { * @param parentNode * @returns {ESTree.Node} */ - private transformNode (literalNode: ESTree.Literal, parentNode: ESTree.Node): ESTree.Node { + public transformNode (literalNode: ESTree.Literal, parentNode: ESTree.Node): ESTree.Node { if (Node.isPropertyNode(parentNode) && parentNode.key === literalNode) { return literalNode; } diff --git a/src/node-transformers/obfuscating-transformers/ObjectExpressionTransformer.ts b/src/node-transformers/obfuscating-transformers/ObjectExpressionTransformer.ts index 96ff5b2c..565430d0 100644 --- a/src/node-transformers/obfuscating-transformers/ObjectExpressionTransformer.ts +++ b/src/node-transformers/obfuscating-transformers/ObjectExpressionTransformer.ts @@ -83,7 +83,7 @@ export class ObjectExpressionTransformer extends AbstractNodeTransformer { * @param parentNode * @returns {ESTree.Node} */ - private transformNode (objectExpressionNode: ESTree.ObjectExpression, parentNode: ESTree.Node): ESTree.Node { + public transformNode (objectExpressionNode: ESTree.ObjectExpression, parentNode: ESTree.Node): ESTree.Node { objectExpressionNode.properties .forEach((property: ESTree.Property) => { if (property.shorthand) { diff --git a/src/node-transformers/obfuscating-transformers/VariableDeclarationTransformer.ts b/src/node-transformers/obfuscating-transformers/VariableDeclarationTransformer.ts index 09269240..94c23251 100644 --- a/src/node-transformers/obfuscating-transformers/VariableDeclarationTransformer.ts +++ b/src/node-transformers/obfuscating-transformers/VariableDeclarationTransformer.ts @@ -70,7 +70,7 @@ export class VariableDeclarationTransformer extends AbstractNodeTransformer { * @param parentNode * @returns {ESTree.Node} */ - private transformNode (variableDeclarationNode: ESTree.VariableDeclaration, parentNode: ESTree.Node): ESTree.Node { + public transformNode (variableDeclarationNode: ESTree.VariableDeclaration, parentNode: ESTree.Node): ESTree.Node { const blockScopeOfVariableDeclarationNode: TNodeWithBlockStatement = NodeUtils .getBlockScopesOfNode(variableDeclarationNode)[0]; diff --git a/src/types/TVisitorFunction.d.ts b/src/types/TVisitorFunction.d.ts new file mode 100644 index 00000000..1ae616c2 --- /dev/null +++ b/src/types/TVisitorFunction.d.ts @@ -0,0 +1,4 @@ +import * as estraverse from 'estraverse'; +import * as ESTree from 'estree'; + +export type TVisitorFunction = (node: ESTree.Node, parentNode: ESTree.Node | null) => estraverse.VisitorOption | ESTree.Node | void; From df5b82855b611953cd6f32393c2402c1068ba893 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Tue, 17 Jan 2017 14:59:40 +0300 Subject: [PATCH 20/28] now each transformer can return visitor for estraverse --- dist/index.js | 464 +++++++++++++++++++++++++------------------------- 1 file changed, 231 insertions(+), 233 deletions(-) diff --git a/dist/index.js b/dist/index.js index 285143d4..2f93c692 100644 --- a/dist/index.js +++ b/dist/index.js @@ -124,7 +124,7 @@ module.exports = require("tslib"); "use strict"; -var _symbol = __webpack_require__(138); +var _symbol = __webpack_require__(139); var _symbol2 = _interopRequireDefault(_symbol); @@ -182,7 +182,7 @@ module.exports = require("babel-runtime/helpers/possibleConstructorReturn"); "use strict"; -var _getIterator2 = __webpack_require__(21); +var _getIterator2 = __webpack_require__(18); var _getIterator3 = _interopRequireDefault(_getIterator2); @@ -199,9 +199,9 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de var escodegen = __webpack_require__(28); var esprima = __webpack_require__(49); var estraverse = __webpack_require__(17); -var NodeType_1 = __webpack_require__(19); -var Node_1 = __webpack_require__(12); -var Nodes_1 = __webpack_require__(20); +var NodeType_1 = __webpack_require__(20); +var Node_1 = __webpack_require__(11); +var Nodes_1 = __webpack_require__(21); var NodeUtils = function () { function NodeUtils() { @@ -384,7 +384,7 @@ exports.NodeUtils = NodeUtils; "use strict"; -var _set = __webpack_require__(137); +var _set = __webpack_require__(138); var _set2 = _interopRequireDefault(_set); @@ -398,7 +398,7 @@ var _createClass3 = _interopRequireDefault(_createClass2); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -var chance_1 = __webpack_require__(140); +var chance_1 = __webpack_require__(141); var Utils_1 = __webpack_require__(14); var RandomGeneratorUtils = function () { @@ -483,11 +483,11 @@ exports.RandomGeneratorUtils = RandomGeneratorUtils; "use strict"; -var _defineProperty = __webpack_require__(135); +var _defineProperty = __webpack_require__(136); var _defineProperty2 = _interopRequireDefault(_defineProperty); -var _getOwnPropertyDescriptor = __webpack_require__(136); +var _getOwnPropertyDescriptor = __webpack_require__(137); var _getOwnPropertyDescriptor2 = _interopRequireDefault(_getOwnPropertyDescriptor); @@ -534,12 +534,6 @@ exports.initializable = initializable; /***/ }), /* 11 */ -/***/ (function(module, exports) { - -module.exports = require("babel-runtime/core-js/map"); - -/***/ }), -/* 12 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -555,7 +549,7 @@ var _createClass3 = _interopRequireDefault(_createClass2); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -var NodeType_1 = __webpack_require__(19); +var NodeType_1 = __webpack_require__(20); var Node = function () { function Node() { @@ -711,6 +705,12 @@ var Node = function () { exports.Node = Node; +/***/ }), +/* 12 */ +/***/ (function(module, exports) { + +module.exports = require("babel-runtime/core-js/map"); + /***/ }), /* 13 */ /***/ (function(module, exports, __webpack_require__) { @@ -768,7 +768,7 @@ exports.AbstractCustomNode = AbstractCustomNode; "use strict"; -var _map = __webpack_require__(11); +var _map = __webpack_require__(12); var _map2 = _interopRequireDefault(_map); @@ -780,7 +780,7 @@ var _slicedToArray2 = __webpack_require__(35); var _slicedToArray3 = _interopRequireDefault(_slicedToArray2); -var _getIterator2 = __webpack_require__(21); +var _getIterator2 = __webpack_require__(18); var _getIterator3 = _interopRequireDefault(_getIterator2); @@ -798,7 +798,7 @@ var _createClass3 = _interopRequireDefault(_createClass2); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -var _ = __webpack_require__(145); +var _ = __webpack_require__(146); var JSFuck_1 = __webpack_require__(36); var RandomGeneratorUtils_1 = __webpack_require__(9); @@ -1019,10 +1019,16 @@ module.exports = require("estraverse"); /* 18 */ /***/ (function(module, exports) { -module.exports = require("string-template"); +module.exports = require("babel-runtime/core-js/get-iterator"); /***/ }), /* 19 */ +/***/ (function(module, exports) { + +module.exports = require("string-template"); + +/***/ }), +/* 20 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -1068,7 +1074,7 @@ exports.NodeType = Utils_1.Utils.strEnumify({ }); /***/ }), -/* 20 */ +/* 21 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -1085,7 +1091,7 @@ var _createClass3 = _interopRequireDefault(_createClass2); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var escodegen = __webpack_require__(28); -var NodeType_1 = __webpack_require__(19); +var NodeType_1 = __webpack_require__(20); var Nodes = function () { function Nodes() { @@ -1401,12 +1407,6 @@ var Nodes = function () { exports.Nodes = Nodes; -/***/ }), -/* 21 */ -/***/ (function(module, exports) { - -module.exports = require("babel-runtime/core-js/get-iterator"); - /***/ }), /* 22 */ /***/ (function(module, exports, __webpack_require__) { @@ -1457,9 +1457,9 @@ var _createClass3 = _interopRequireDefault(_createClass2); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -__webpack_require__(147); +__webpack_require__(148); if (!global._babelPolyfill && parseInt(process.version.split('.')[0], 10) < 4) { - __webpack_require__(133); + __webpack_require__(134); } var ServiceIdentifiers_1 = __webpack_require__(4); var InversifyContainerFacade_1 = __webpack_require__(57); @@ -1502,7 +1502,7 @@ exports.JavaScriptObfuscator = JavaScriptObfuscator; "use strict"; -var _getIterator2 = __webpack_require__(21); +var _getIterator2 = __webpack_require__(18); var _getIterator3 = _interopRequireDefault(_getIterator2); @@ -2042,7 +2042,7 @@ var NodeTransformers; "use strict"; -var _map = __webpack_require__(11); +var _map = __webpack_require__(12); var _map2 = _interopRequireDefault(_map); @@ -2116,7 +2116,7 @@ var AbstractControlFlowReplacer_1; "use strict"; -var _map = __webpack_require__(11); +var _map = __webpack_require__(12); var _map2 = _interopRequireDefault(_map); @@ -2147,7 +2147,7 @@ var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); var AbstractControlFlowReplacer_1 = __webpack_require__(41); var CustomNodes_1 = __webpack_require__(15); -var Node_1 = __webpack_require__(12); +var Node_1 = __webpack_require__(11); var ExpressionWithOperatorControlFlowReplacer = function (_AbstractControlFlowR) { (0, _inherits3.default)(ExpressionWithOperatorControlFlowReplacer, _AbstractControlFlowR); @@ -2224,7 +2224,7 @@ var _toConsumableArray2 = __webpack_require__(24); var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2); -var _map = __webpack_require__(11); +var _map = __webpack_require__(12); var _map2 = _interopRequireDefault(_map); @@ -2473,7 +2473,7 @@ exports.ObfuscationResult = ObfuscationResult; "use strict"; -var _getIterator2 = __webpack_require__(21); +var _getIterator2 = __webpack_require__(18); var _getIterator3 = _interopRequireDefault(_getIterator2); @@ -2497,8 +2497,8 @@ var ServiceIdentifiers_1 = __webpack_require__(4); var estraverse = __webpack_require__(17); var NodeTransformers_1 = __webpack_require__(40); var ObfuscationEvents_1 = __webpack_require__(22); -var VisitorDirection_1 = __webpack_require__(151); -var Node_1 = __webpack_require__(12); +var VisitorDirection_1 = __webpack_require__(86); +var Node_1 = __webpack_require__(11); var NodeUtils_1 = __webpack_require__(8); var Obfuscator = Obfuscator_1 = function () { function Obfuscator(stackTraceAnalyzer, obfuscationEventEmitter, customNodeGroupStorage, nodeTransformersFactory, options) { @@ -2689,8 +2689,8 @@ var _createClass3 = _interopRequireDefault(_createClass2); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -var fs = __webpack_require__(144); -var mkdirp = __webpack_require__(146); +var fs = __webpack_require__(145); +var mkdirp = __webpack_require__(147); var path = __webpack_require__(50); var CLIUtils = function () { @@ -2790,7 +2790,7 @@ var _createClass3 = _interopRequireDefault(_createClass2); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var tslib_1 = __webpack_require__(3); -var commander = __webpack_require__(142); +var commander = __webpack_require__(143); var path = __webpack_require__(50); var SourceMapMode_1 = __webpack_require__(29); var StringArrayEncoding_1 = __webpack_require__(32); @@ -2951,10 +2951,10 @@ var NodeTransformersModule_1 = __webpack_require__(60); var StackTraceAnalyzerModule_1 = __webpack_require__(62); var StoragesModule_1 = __webpack_require__(63); var JavaScriptObfuscatorInternal_1 = __webpack_require__(51); -var ObfuscationEventEmitter_1 = __webpack_require__(86); +var ObfuscationEventEmitter_1 = __webpack_require__(87); var ObfuscationResult_1 = __webpack_require__(52); var Obfuscator_1 = __webpack_require__(53); -var Options_1 = __webpack_require__(106); +var Options_1 = __webpack_require__(107); var SourceMapCorrector_1 = __webpack_require__(54); var InversifyContainerFacade = function () { @@ -3008,7 +3008,7 @@ exports.InversifyContainerFacade = InversifyContainerFacade; "use strict"; -var _map = __webpack_require__(11); +var _map = __webpack_require__(12); var _map2 = _interopRequireDefault(_map); @@ -3092,7 +3092,7 @@ exports.customNodesModule = new inversify_1.ContainerModule(function (bind) { "use strict"; -var _map = __webpack_require__(11); +var _map = __webpack_require__(12); var _map2 = _interopRequireDefault(_map); @@ -3101,9 +3101,9 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); var NodeControlFlowReplacers_1 = __webpack_require__(39); -var BinaryExpressionControlFlowReplacer_1 = __webpack_require__(89); -var CallExpressionControlFlowReplacer_1 = __webpack_require__(90); -var LogicalExpressionControlFlowReplacer_1 = __webpack_require__(91); +var BinaryExpressionControlFlowReplacer_1 = __webpack_require__(90); +var CallExpressionControlFlowReplacer_1 = __webpack_require__(91); +var LogicalExpressionControlFlowReplacer_1 = __webpack_require__(92); exports.controlFlowTransformersModule = new inversify_1.ContainerModule(function (bind) { bind(ServiceIdentifiers_1.ServiceIdentifiers.IControlFlowReplacer).to(BinaryExpressionControlFlowReplacer_1.BinaryExpressionControlFlowReplacer).whenTargetNamed(NodeControlFlowReplacers_1.NodeControlFlowReplacers.BinaryExpressionControlFlowReplacer); bind(ServiceIdentifiers_1.ServiceIdentifiers.IControlFlowReplacer).to(CallExpressionControlFlowReplacer_1.CallExpressionControlFlowReplacer).whenTargetNamed(NodeControlFlowReplacers_1.NodeControlFlowReplacers.CallExpressionControlFlowReplacer); @@ -3128,7 +3128,7 @@ exports.controlFlowTransformersModule = new inversify_1.ContainerModule(function "use strict"; -var _map = __webpack_require__(11); +var _map = __webpack_require__(12); var _map2 = _interopRequireDefault(_map); @@ -3137,18 +3137,18 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); var NodeTransformers_1 = __webpack_require__(40); -var FunctionControlFlowTransformer_1 = __webpack_require__(88); -var BlockStatementControlFlowTransformer_1 = __webpack_require__(87); -var CatchClauseTransformer_1 = __webpack_require__(95); -var FunctionDeclarationTransformer_1 = __webpack_require__(96); -var FunctionTransformer_1 = __webpack_require__(97); -var LabeledStatementTransformer_1 = __webpack_require__(98); -var LiteralTransformer_1 = __webpack_require__(99); -var MemberExpressionTransformer_1 = __webpack_require__(92); -var MethodDefinitionTransformer_1 = __webpack_require__(93); -var ObjectExpressionTransformer_1 = __webpack_require__(100); -var TemplateLiteralTransformer_1 = __webpack_require__(94); -var VariableDeclarationTransformer_1 = __webpack_require__(101); +var FunctionControlFlowTransformer_1 = __webpack_require__(89); +var BlockStatementControlFlowTransformer_1 = __webpack_require__(88); +var CatchClauseTransformer_1 = __webpack_require__(96); +var FunctionDeclarationTransformer_1 = __webpack_require__(97); +var FunctionTransformer_1 = __webpack_require__(98); +var LabeledStatementTransformer_1 = __webpack_require__(99); +var LiteralTransformer_1 = __webpack_require__(100); +var MemberExpressionTransformer_1 = __webpack_require__(93); +var MethodDefinitionTransformer_1 = __webpack_require__(94); +var ObjectExpressionTransformer_1 = __webpack_require__(101); +var TemplateLiteralTransformer_1 = __webpack_require__(95); +var VariableDeclarationTransformer_1 = __webpack_require__(102); exports.nodeTransformersModule = new inversify_1.ContainerModule(function (bind) { bind(ServiceIdentifiers_1.ServiceIdentifiers.INodeTransformer).to(BlockStatementControlFlowTransformer_1.BlockStatementControlFlowTransformer).whenTargetNamed(NodeTransformers_1.NodeTransformers.BlockStatementControlFlowTransformer); bind(ServiceIdentifiers_1.ServiceIdentifiers.INodeTransformer).to(FunctionControlFlowTransformer_1.FunctionControlFlowTransformer).whenTargetNamed(NodeTransformers_1.NodeTransformers.FunctionControlFlowTransformer); @@ -3182,7 +3182,7 @@ exports.nodeTransformersModule = new inversify_1.ContainerModule(function (bind) "use strict"; -var _map = __webpack_require__(11); +var _map = __webpack_require__(12); var _map2 = _interopRequireDefault(_map); @@ -3191,10 +3191,10 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); var NodeObfuscationReplacers_1 = __webpack_require__(23); -var BooleanLiteralReplacer_1 = __webpack_require__(102); -var IdentifierReplacer_1 = __webpack_require__(103); -var NumberLiteralReplacer_1 = __webpack_require__(104); -var StringLiteralReplacer_1 = __webpack_require__(105); +var BooleanLiteralReplacer_1 = __webpack_require__(103); +var IdentifierReplacer_1 = __webpack_require__(104); +var NumberLiteralReplacer_1 = __webpack_require__(105); +var StringLiteralReplacer_1 = __webpack_require__(106); exports.obfuscatingTransformersModule = new inversify_1.ContainerModule(function (bind) { bind(ServiceIdentifiers_1.ServiceIdentifiers.IObfuscatorReplacer).to(BooleanLiteralReplacer_1.BooleanLiteralReplacer).whenTargetNamed(NodeObfuscationReplacers_1.NodeObfuscatorsReplacers.BooleanReplacer); bind(ServiceIdentifiers_1.ServiceIdentifiers.IObfuscatorReplacer).to(IdentifierReplacer_1.IdentifierReplacer).whenTargetNamed(NodeObfuscationReplacers_1.NodeObfuscatorsReplacers.IdentifierReplacer); @@ -3220,7 +3220,7 @@ exports.obfuscatingTransformersModule = new inversify_1.ContainerModule(function "use strict"; -var _map = __webpack_require__(11); +var _map = __webpack_require__(12); var _map2 = _interopRequireDefault(_map); @@ -3229,10 +3229,10 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); var CalleeDataExtractors_1 = __webpack_require__(37); -var FunctionDeclarationCalleeDataExtractor_1 = __webpack_require__(110); -var FunctionExpressionCalleeDataExtractor_1 = __webpack_require__(111); -var ObjectExpressionCalleeDataExtractor_1 = __webpack_require__(112); -var StackTraceAnalyzer_1 = __webpack_require__(109); +var FunctionDeclarationCalleeDataExtractor_1 = __webpack_require__(111); +var FunctionExpressionCalleeDataExtractor_1 = __webpack_require__(112); +var ObjectExpressionCalleeDataExtractor_1 = __webpack_require__(113); +var StackTraceAnalyzer_1 = __webpack_require__(110); exports.stackTraceAnalyzerModule = new inversify_1.ContainerModule(function (bind) { bind(ServiceIdentifiers_1.ServiceIdentifiers.IStackTraceAnalyzer).to(StackTraceAnalyzer_1.StackTraceAnalyzer).inSingletonScope(); bind(ServiceIdentifiers_1.ServiceIdentifiers.ICalleeDataExtractor).to(FunctionDeclarationCalleeDataExtractor_1.FunctionDeclarationCalleeDataExtractor).whenTargetNamed(CalleeDataExtractors_1.CalleeDataExtractors.FunctionDeclarationCalleeDataExtractor); @@ -3260,9 +3260,9 @@ exports.stackTraceAnalyzerModule = new inversify_1.ContainerModule(function (bin var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); -var ControlFlowStorage_1 = __webpack_require__(114); -var CustomNodeGroupStorage_1 = __webpack_require__(115); -var StringArrayStorage_1 = __webpack_require__(116); +var ControlFlowStorage_1 = __webpack_require__(115); +var CustomNodeGroupStorage_1 = __webpack_require__(116); +var StringArrayStorage_1 = __webpack_require__(117); exports.storagesModule = new inversify_1.ContainerModule(function (bind) { bind(ServiceIdentifiers_1.ServiceIdentifiers.TCustomNodeGroupStorage).to(CustomNodeGroupStorage_1.CustomNodeGroupStorage).inSingletonScope(); bind(ServiceIdentifiers_1.ServiceIdentifiers.TStringArrayStorage).to(StringArrayStorage_1.StringArrayStorage).inSingletonScope(); @@ -3307,8 +3307,8 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); -var format = __webpack_require__(18); -var ConsoleOutputDisableExpressionTemplate_1 = __webpack_require__(120); +var format = __webpack_require__(19); +var ConsoleOutputDisableExpressionTemplate_1 = __webpack_require__(121); var Initializable_1 = __webpack_require__(10); var AbstractCustomNode_1 = __webpack_require__(13); var NodeUtils_1 = __webpack_require__(8); @@ -3353,7 +3353,7 @@ exports.ConsoleOutputDisableExpressionNode = ConsoleOutputDisableExpressionNode; "use strict"; -var _map = __webpack_require__(11); +var _map = __webpack_require__(12); var _map2 = _interopRequireDefault(_map); @@ -3475,7 +3475,7 @@ var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); var Initializable_1 = __webpack_require__(10); var AbstractCustomNode_1 = __webpack_require__(13); -var Nodes_1 = __webpack_require__(20); +var Nodes_1 = __webpack_require__(21); var NodeUtils_1 = __webpack_require__(8); var RandomGeneratorUtils_1 = __webpack_require__(9); var BinaryExpressionFunctionNode = function (_AbstractCustomNode_) { @@ -3539,7 +3539,7 @@ var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); var Initializable_1 = __webpack_require__(10); var AbstractCustomNode_1 = __webpack_require__(13); -var Nodes_1 = __webpack_require__(20); +var Nodes_1 = __webpack_require__(21); var NodeUtils_1 = __webpack_require__(8); var RandomGeneratorUtils_1 = __webpack_require__(9); var BlockStatementControlFlowFlatteningNode = function (_AbstractCustomNode_) { @@ -3613,7 +3613,7 @@ var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); var Initializable_1 = __webpack_require__(10); var AbstractCustomNode_1 = __webpack_require__(13); -var Nodes_1 = __webpack_require__(20); +var Nodes_1 = __webpack_require__(21); var NodeUtils_1 = __webpack_require__(8); var RandomGeneratorUtils_1 = __webpack_require__(9); var CallExpressionFunctionNode = function (_AbstractCustomNode_) { @@ -3683,7 +3683,7 @@ var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); var Initializable_1 = __webpack_require__(10); var AbstractCustomNode_1 = __webpack_require__(13); -var Nodes_1 = __webpack_require__(20); +var Nodes_1 = __webpack_require__(21); var RandomGeneratorUtils_1 = __webpack_require__(9); var NodeUtils_1 = __webpack_require__(8); var LogicalExpressionFunctionNode = function (_AbstractCustomNode_) { @@ -3751,7 +3751,7 @@ var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); var Initializable_1 = __webpack_require__(10); var AbstractCustomNode_1 = __webpack_require__(13); -var Nodes_1 = __webpack_require__(20); +var Nodes_1 = __webpack_require__(21); var NodeUtils_1 = __webpack_require__(8); var CallExpressionControlFlowStorageCallNode = function (_AbstractCustomNode_) { (0, _inherits3.default)(CallExpressionControlFlowStorageCallNode, _AbstractCustomNode_); @@ -3828,7 +3828,7 @@ var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); var Initializable_1 = __webpack_require__(10); var AbstractCustomNode_1 = __webpack_require__(13); -var Nodes_1 = __webpack_require__(20); +var Nodes_1 = __webpack_require__(21); var NodeUtils_1 = __webpack_require__(8); var ControlFlowStorageNode = function (_AbstractCustomNode_) { (0, _inherits3.default)(ControlFlowStorageNode, _AbstractCustomNode_); @@ -3897,7 +3897,7 @@ var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); var Initializable_1 = __webpack_require__(10); var AbstractCustomNode_1 = __webpack_require__(13); -var Nodes_1 = __webpack_require__(20); +var Nodes_1 = __webpack_require__(21); var NodeUtils_1 = __webpack_require__(8); var ExpressionWithOperatorControlFlowStorageCallNode = function (_AbstractCustomNode_) { (0, _inherits3.default)(ExpressionWithOperatorControlFlowStorageCallNode, _AbstractCustomNode_); @@ -3964,9 +3964,9 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); -var format = __webpack_require__(18); +var format = __webpack_require__(19); var Initializable_1 = __webpack_require__(10); -var DebufProtectionFunctionCallTemplate_1 = __webpack_require__(121); +var DebufProtectionFunctionCallTemplate_1 = __webpack_require__(122); var AbstractCustomNode_1 = __webpack_require__(13); var NodeUtils_1 = __webpack_require__(8); var DebugProtectionFunctionCallNode = function (_AbstractCustomNode_) { @@ -4033,9 +4033,9 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); -var format = __webpack_require__(18); +var format = __webpack_require__(19); var Initializable_1 = __webpack_require__(10); -var DebugProtectionFunctionIntervalTemplate_1 = __webpack_require__(122); +var DebugProtectionFunctionIntervalTemplate_1 = __webpack_require__(123); var AbstractCustomNode_1 = __webpack_require__(13); var NodeUtils_1 = __webpack_require__(8); var DebugProtectionFunctionIntervalNode = function (_AbstractCustomNode_) { @@ -4102,9 +4102,9 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); -var format = __webpack_require__(18); +var format = __webpack_require__(19); var Initializable_1 = __webpack_require__(10); -var DebugProtectionFunctionTemplate_1 = __webpack_require__(123); +var DebugProtectionFunctionTemplate_1 = __webpack_require__(124); var AbstractCustomNode_1 = __webpack_require__(13); var NodeUtils_1 = __webpack_require__(8); var DebugProtectionFunctionNode = function (_AbstractCustomNode_) { @@ -4146,7 +4146,7 @@ exports.DebugProtectionFunctionNode = DebugProtectionFunctionNode; "use strict"; -var _map = __webpack_require__(11); +var _map = __webpack_require__(12); var _map2 = _interopRequireDefault(_map); @@ -4273,9 +4273,9 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); -var format = __webpack_require__(18); +var format = __webpack_require__(19); var Initializable_1 = __webpack_require__(10); -var DomainLockNodeTemplate_1 = __webpack_require__(124); +var DomainLockNodeTemplate_1 = __webpack_require__(125); var AbstractCustomNode_1 = __webpack_require__(13); var CryptUtils_1 = __webpack_require__(34); var NodeUtils_1 = __webpack_require__(8); @@ -4329,7 +4329,7 @@ exports.DomainLockNode = DomainLockNode; "use strict"; -var _map = __webpack_require__(11); +var _map = __webpack_require__(12); var _map2 = _interopRequireDefault(_map); @@ -4449,10 +4449,10 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); -var format = __webpack_require__(18); +var format = __webpack_require__(19); var ObfuscationEvents_1 = __webpack_require__(22); var Initializable_1 = __webpack_require__(10); -var SingleNodeCallControllerTemplate_1 = __webpack_require__(119); +var SingleNodeCallControllerTemplate_1 = __webpack_require__(120); var NoCustomNodes_1 = __webpack_require__(31); var AbstractCustomNode_1 = __webpack_require__(13); var JavaScriptObfuscator_1 = __webpack_require__(25); @@ -4528,10 +4528,10 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); -var format = __webpack_require__(18); +var format = __webpack_require__(19); var Initializable_1 = __webpack_require__(10); var NoCustomNodes_1 = __webpack_require__(31); -var SelfDefendingTemplate_1 = __webpack_require__(125); +var SelfDefendingTemplate_1 = __webpack_require__(126); var AbstractCustomNode_1 = __webpack_require__(13); var JavaScriptObfuscator_1 = __webpack_require__(25); var NodeUtils_1 = __webpack_require__(8); @@ -4576,7 +4576,7 @@ exports.SelfDefendingUnicodeNode = SelfDefendingUnicodeNode; "use strict"; -var _map = __webpack_require__(11); +var _map = __webpack_require__(12); var _map2 = _interopRequireDefault(_map); @@ -4696,16 +4696,16 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); -var format = __webpack_require__(18); +var format = __webpack_require__(19); var StringArrayEncoding_1 = __webpack_require__(32); var Initializable_1 = __webpack_require__(10); var NoCustomNodes_1 = __webpack_require__(31); -var AtobTemplate_1 = __webpack_require__(117); -var Rc4Template_1 = __webpack_require__(118); -var SelfDefendingTemplate_1 = __webpack_require__(126); -var StringArrayBase64DecodeNodeTemplate_1 = __webpack_require__(127); -var StringArrayCallsWrapperTemplate_1 = __webpack_require__(128); -var StringArrayRC4DecodeNodeTemplate_1 = __webpack_require__(129); +var AtobTemplate_1 = __webpack_require__(118); +var Rc4Template_1 = __webpack_require__(119); +var SelfDefendingTemplate_1 = __webpack_require__(127); +var StringArrayBase64DecodeNodeTemplate_1 = __webpack_require__(128); +var StringArrayCallsWrapperTemplate_1 = __webpack_require__(129); +var StringArrayRC4DecodeNodeTemplate_1 = __webpack_require__(130); var AbstractCustomNode_1 = __webpack_require__(13); var JavaScriptObfuscator_1 = __webpack_require__(25); var NodeUtils_1 = __webpack_require__(8); @@ -4814,9 +4814,9 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); -var format = __webpack_require__(18); +var format = __webpack_require__(19); var Initializable_1 = __webpack_require__(10); -var StringArrayTemplate_1 = __webpack_require__(130); +var StringArrayTemplate_1 = __webpack_require__(131); var AbstractCustomNode_1 = __webpack_require__(13); var NodeUtils_1 = __webpack_require__(8); var StringArrayNode = function (_AbstractCustomNode_) { @@ -4894,11 +4894,11 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); -var format = __webpack_require__(18); +var format = __webpack_require__(19); var Initializable_1 = __webpack_require__(10); var NoCustomNodes_1 = __webpack_require__(31); -var SelfDefendingTemplate_1 = __webpack_require__(131); -var StringArrayRotateFunctionTemplate_1 = __webpack_require__(132); +var SelfDefendingTemplate_1 = __webpack_require__(132); +var StringArrayRotateFunctionTemplate_1 = __webpack_require__(133); var AbstractCustomNode_1 = __webpack_require__(13); var JavaScriptObfuscator_1 = __webpack_require__(25); var NodeUtils_1 = __webpack_require__(8); @@ -4962,7 +4962,7 @@ exports.StringArrayRotateFunctionNode = StringArrayRotateFunctionNode; "use strict"; -var _map = __webpack_require__(11); +var _map = __webpack_require__(12); var _map2 = _interopRequireDefault(_map); @@ -5072,6 +5072,19 @@ exports.StringArrayCustomNodeGroup = StringArrayCustomNodeGroup; "use strict"; +var Utils_1 = __webpack_require__(14); +exports.VisitorDirection = Utils_1.Utils.strEnumify({ + enter: 'enter', + leave: 'leave' +}); + +/***/ }), +/* 87 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + var _getPrototypeOf = __webpack_require__(5); var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); @@ -5092,7 +5105,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); -var events_1 = __webpack_require__(143); +var events_1 = __webpack_require__(144); inversify_1.decorate(inversify_1.injectable(), events_1.EventEmitter); var ObfuscationEventEmitter = function (_events_1$EventEmitte) { (0, _inherits3.default)(ObfuscationEventEmitter, _events_1$EventEmitte); @@ -5108,7 +5121,7 @@ ObfuscationEventEmitter = tslib_1.__decorate([inversify_1.injectable(), tslib_1. exports.ObfuscationEventEmitter = ObfuscationEventEmitter; /***/ }), -/* 87 */ +/* 88 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -5145,7 +5158,7 @@ var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); var CustomNodes_1 = __webpack_require__(15); var AbstractNodeTransformer_1 = __webpack_require__(16); -var Node_1 = __webpack_require__(12); +var Node_1 = __webpack_require__(11); var RandomGeneratorUtils_1 = __webpack_require__(9); var Utils_1 = __webpack_require__(14); var BlockStatementControlFlowTransformer = BlockStatementControlFlowTransformer_1 = function (_AbstractNodeTransfor) { @@ -5209,13 +5222,13 @@ exports.BlockStatementControlFlowTransformer = BlockStatementControlFlowTransfor var BlockStatementControlFlowTransformer_1; /***/ }), -/* 88 */ +/* 89 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var _map = __webpack_require__(11); +var _map = __webpack_require__(12); var _map2 = _interopRequireDefault(_map); @@ -5246,9 +5259,9 @@ var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); var estraverse = __webpack_require__(17); var CustomNodes_1 = __webpack_require__(15); -var NodeType_1 = __webpack_require__(19); +var NodeType_1 = __webpack_require__(20); var AbstractNodeTransformer_1 = __webpack_require__(16); -var Node_1 = __webpack_require__(12); +var Node_1 = __webpack_require__(11); var NodeAppender_1 = __webpack_require__(26); var NodeControlFlowReplacers_1 = __webpack_require__(39); var NodeUtils_1 = __webpack_require__(8); @@ -5361,7 +5374,7 @@ exports.FunctionControlFlowTransformer = FunctionControlFlowTransformer; var FunctionControlFlowTransformer_1; /***/ }), -/* 89 */ +/* 90 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -5420,7 +5433,7 @@ exports.BinaryExpressionControlFlowReplacer = BinaryExpressionControlFlowReplace var BinaryExpressionControlFlowReplacer_1; /***/ }), -/* 90 */ +/* 91 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -5453,7 +5466,7 @@ var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); var CustomNodes_1 = __webpack_require__(15); var AbstractControlFlowReplacer_1 = __webpack_require__(41); -var Node_1 = __webpack_require__(12); +var Node_1 = __webpack_require__(11); var CallExpressionControlFlowReplacer = CallExpressionControlFlowReplacer_1 = function (_AbstractControlFlowR) { (0, _inherits3.default)(CallExpressionControlFlowReplacer, _AbstractControlFlowR); @@ -5496,7 +5509,7 @@ exports.CallExpressionControlFlowReplacer = CallExpressionControlFlowReplacer; var CallExpressionControlFlowReplacer_1; /***/ }), -/* 91 */ +/* 92 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -5529,7 +5542,7 @@ var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); var CustomNodes_1 = __webpack_require__(15); var ExpressionWithOperatorControlFlowReplacer_1 = __webpack_require__(42); -var Node_1 = __webpack_require__(12); +var Node_1 = __webpack_require__(11); var NodeUtils_1 = __webpack_require__(8); var LogicalExpressionControlFlowReplacer = LogicalExpressionControlFlowReplacer_1 = function (_ExpressionWithOperat) { (0, _inherits3.default)(LogicalExpressionControlFlowReplacer, _ExpressionWithOperat); @@ -5573,7 +5586,7 @@ exports.LogicalExpressionControlFlowReplacer = LogicalExpressionControlFlowRepla var LogicalExpressionControlFlowReplacer_1; /***/ }), -/* 92 */ +/* 93 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -5604,9 +5617,9 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); -var NodeType_1 = __webpack_require__(19); +var NodeType_1 = __webpack_require__(20); var AbstractNodeTransformer_1 = __webpack_require__(16); -var Node_1 = __webpack_require__(12); +var Node_1 = __webpack_require__(11); var MemberExpressionTransformer = function (_AbstractNodeTransfor) { (0, _inherits3.default)(MemberExpressionTransformer, _AbstractNodeTransfor); @@ -5651,7 +5664,7 @@ MemberExpressionTransformer = tslib_1.__decorate([inversify_1.injectable(), tsli exports.MemberExpressionTransformer = MemberExpressionTransformer; /***/ }), -/* 93 */ +/* 94 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -5682,9 +5695,9 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); -var NodeType_1 = __webpack_require__(19); +var NodeType_1 = __webpack_require__(20); var AbstractNodeTransformer_1 = __webpack_require__(16); -var Node_1 = __webpack_require__(12); +var Node_1 = __webpack_require__(11); var MethodDefinitionTransformer = MethodDefinitionTransformer_1 = function (_AbstractNodeTransfor) { (0, _inherits3.default)(MethodDefinitionTransformer, _AbstractNodeTransfor); @@ -5728,13 +5741,13 @@ exports.MethodDefinitionTransformer = MethodDefinitionTransformer; var MethodDefinitionTransformer_1; /***/ }), -/* 94 */ +/* 95 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var _getIterator2 = __webpack_require__(21); +var _getIterator2 = __webpack_require__(18); var _getIterator3 = _interopRequireDefault(_getIterator2); @@ -5764,8 +5777,8 @@ var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); var AbstractNodeTransformer_1 = __webpack_require__(16); -var Node_1 = __webpack_require__(12); -var Nodes_1 = __webpack_require__(20); +var Node_1 = __webpack_require__(11); +var Nodes_1 = __webpack_require__(21); var TemplateLiteralTransformer = TemplateLiteralTransformer_1 = function (_AbstractNodeTransfor) { (0, _inherits3.default)(TemplateLiteralTransformer, _AbstractNodeTransfor); @@ -5872,7 +5885,7 @@ exports.TemplateLiteralTransformer = TemplateLiteralTransformer; var TemplateLiteralTransformer_1; /***/ }), -/* 95 */ +/* 96 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -5906,7 +5919,7 @@ var ServiceIdentifiers_1 = __webpack_require__(4); var estraverse = __webpack_require__(17); var NodeObfuscationReplacers_1 = __webpack_require__(23); var AbstractNodeTransformer_1 = __webpack_require__(16); -var Node_1 = __webpack_require__(12); +var Node_1 = __webpack_require__(11); var CatchClauseTransformer = function (_AbstractNodeTransfor) { (0, _inherits3.default)(CatchClauseTransformer, _AbstractNodeTransfor); @@ -5971,17 +5984,17 @@ CatchClauseTransformer = tslib_1.__decorate([inversify_1.injectable(), tslib_1._ exports.CatchClauseTransformer = CatchClauseTransformer; /***/ }), -/* 96 */ +/* 97 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var _getIterator2 = __webpack_require__(21); +var _getIterator2 = __webpack_require__(18); var _getIterator3 = _interopRequireDefault(_getIterator2); -var _map = __webpack_require__(11); +var _map = __webpack_require__(12); var _map2 = _interopRequireDefault(_map); @@ -6012,9 +6025,9 @@ var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); var estraverse = __webpack_require__(17); var NodeObfuscationReplacers_1 = __webpack_require__(23); -var NodeType_1 = __webpack_require__(19); +var NodeType_1 = __webpack_require__(20); var AbstractNodeTransformer_1 = __webpack_require__(16); -var Node_1 = __webpack_require__(12); +var Node_1 = __webpack_require__(11); var NodeUtils_1 = __webpack_require__(8); var FunctionDeclarationTransformer = function (_AbstractNodeTransfor) { (0, _inherits3.default)(FunctionDeclarationTransformer, _AbstractNodeTransfor); @@ -6116,7 +6129,7 @@ FunctionDeclarationTransformer = tslib_1.__decorate([inversify_1.injectable(), t exports.FunctionDeclarationTransformer = FunctionDeclarationTransformer; /***/ }), -/* 97 */ +/* 98 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -6150,7 +6163,7 @@ var ServiceIdentifiers_1 = __webpack_require__(4); var estraverse = __webpack_require__(17); var NodeObfuscationReplacers_1 = __webpack_require__(23); var AbstractNodeTransformer_1 = __webpack_require__(16); -var Node_1 = __webpack_require__(12); +var Node_1 = __webpack_require__(11); var FunctionTransformer = function (_AbstractNodeTransfor) { (0, _inherits3.default)(FunctionTransformer, _AbstractNodeTransfor); @@ -6234,7 +6247,7 @@ FunctionTransformer = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__pa exports.FunctionTransformer = FunctionTransformer; /***/ }), -/* 98 */ +/* 99 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -6268,7 +6281,7 @@ var ServiceIdentifiers_1 = __webpack_require__(4); var estraverse = __webpack_require__(17); var NodeObfuscationReplacers_1 = __webpack_require__(23); var AbstractNodeTransformer_1 = __webpack_require__(16); -var Node_1 = __webpack_require__(12); +var Node_1 = __webpack_require__(11); var LabeledStatementTransformer = function (_AbstractNodeTransfor) { (0, _inherits3.default)(LabeledStatementTransformer, _AbstractNodeTransfor); @@ -6327,13 +6340,13 @@ LabeledStatementTransformer = tslib_1.__decorate([inversify_1.injectable(), tsli exports.LabeledStatementTransformer = LabeledStatementTransformer; /***/ }), -/* 99 */ +/* 100 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var _typeof2 = __webpack_require__(139); +var _typeof2 = __webpack_require__(140); var _typeof3 = _interopRequireDefault(_typeof2); @@ -6365,7 +6378,7 @@ var ServiceIdentifiers_1 = __webpack_require__(4); var escodegen = __webpack_require__(28); var NodeObfuscationReplacers_1 = __webpack_require__(23); var AbstractNodeTransformer_1 = __webpack_require__(16); -var Node_1 = __webpack_require__(12); +var Node_1 = __webpack_require__(11); var LiteralTransformer = function (_AbstractNodeTransfor) { (0, _inherits3.default)(LiteralTransformer, _AbstractNodeTransfor); @@ -6424,7 +6437,7 @@ LiteralTransformer = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__par exports.LiteralTransformer = LiteralTransformer; /***/ }), -/* 100 */ +/* 101 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -6456,9 +6469,9 @@ var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); var escodegen = __webpack_require__(28); -var NodeType_1 = __webpack_require__(19); +var NodeType_1 = __webpack_require__(20); var AbstractNodeTransformer_1 = __webpack_require__(16); -var Node_1 = __webpack_require__(12); +var Node_1 = __webpack_require__(11); var Utils_1 = __webpack_require__(14); var ObjectExpressionTransformer = ObjectExpressionTransformer_1 = function (_AbstractNodeTransfor) { (0, _inherits3.default)(ObjectExpressionTransformer, _AbstractNodeTransfor); @@ -6528,17 +6541,17 @@ exports.ObjectExpressionTransformer = ObjectExpressionTransformer; var ObjectExpressionTransformer_1; /***/ }), -/* 101 */ +/* 102 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var _getIterator2 = __webpack_require__(21); +var _getIterator2 = __webpack_require__(18); var _getIterator3 = _interopRequireDefault(_getIterator2); -var _map = __webpack_require__(11); +var _map = __webpack_require__(12); var _map2 = _interopRequireDefault(_map); @@ -6569,9 +6582,9 @@ var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); var estraverse = __webpack_require__(17); var NodeObfuscationReplacers_1 = __webpack_require__(23); -var NodeType_1 = __webpack_require__(19); +var NodeType_1 = __webpack_require__(20); var AbstractNodeTransformer_1 = __webpack_require__(16); -var Node_1 = __webpack_require__(12); +var Node_1 = __webpack_require__(11); var NodeUtils_1 = __webpack_require__(8); var VariableDeclarationTransformer = function (_AbstractNodeTransfor) { (0, _inherits3.default)(VariableDeclarationTransformer, _AbstractNodeTransfor); @@ -6685,7 +6698,7 @@ VariableDeclarationTransformer = tslib_1.__decorate([inversify_1.injectable(), t exports.VariableDeclarationTransformer = VariableDeclarationTransformer; /***/ }), -/* 102 */ +/* 103 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -6738,13 +6751,13 @@ BooleanLiteralReplacer = tslib_1.__decorate([inversify_1.injectable(), tslib_1._ exports.BooleanLiteralReplacer = BooleanLiteralReplacer; /***/ }), -/* 103 */ +/* 104 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var _map = __webpack_require__(11); +var _map = __webpack_require__(12); var _map2 = _interopRequireDefault(_map); @@ -6817,13 +6830,13 @@ IdentifierReplacer = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__par exports.IdentifierReplacer = IdentifierReplacer; /***/ }), -/* 104 */ +/* 105 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var _map = __webpack_require__(11); +var _map = __webpack_require__(12); var _map2 = _interopRequireDefault(_map); @@ -6888,13 +6901,13 @@ NumberLiteralReplacer = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__ exports.NumberLiteralReplacer = NumberLiteralReplacer; /***/ }), -/* 105 */ +/* 106 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var _map = __webpack_require__(11); +var _map = __webpack_require__(12); var _map2 = _interopRequireDefault(_map); @@ -7018,13 +7031,13 @@ exports.StringLiteralReplacer = StringLiteralReplacer; var StringLiteralReplacer_1; /***/ }), -/* 106 */ +/* 107 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var _assign = __webpack_require__(134); +var _assign = __webpack_require__(135); var _assign2 = _interopRequireDefault(_assign); @@ -7036,10 +7049,10 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); -var class_validator_1 = __webpack_require__(141); +var class_validator_1 = __webpack_require__(142); var Default_1 = __webpack_require__(43); -var OptionsNormalizer_1 = __webpack_require__(107); -var ValidationErrorsFormatter_1 = __webpack_require__(108); +var OptionsNormalizer_1 = __webpack_require__(108); +var ValidationErrorsFormatter_1 = __webpack_require__(109); var Options = Options_1 = function Options(inputOptions) { (0, _classCallCheck3.default)(this, Options); @@ -7088,13 +7101,13 @@ exports.Options = Options; var Options_1; /***/ }), -/* 107 */ +/* 108 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var _getIterator2 = __webpack_require__(21); +var _getIterator2 = __webpack_require__(18); var _getIterator3 = _interopRequireDefault(_getIterator2); @@ -7273,13 +7286,13 @@ OptionsNormalizer.normalizerRules = [OptionsNormalizer.controlFlowFlatteningThre exports.OptionsNormalizer = OptionsNormalizer; /***/ }), -/* 108 */ +/* 109 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var _getIterator2 = __webpack_require__(21); +var _getIterator2 = __webpack_require__(18); var _getIterator3 = _interopRequireDefault(_getIterator2); @@ -7349,7 +7362,7 @@ var ValidationErrorsFormatter = function () { exports.ValidationErrorsFormatter = ValidationErrorsFormatter; /***/ }), -/* 109 */ +/* 110 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -7370,7 +7383,7 @@ var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); var estraverse = __webpack_require__(17); var CalleeDataExtractors_1 = __webpack_require__(37); -var Node_1 = __webpack_require__(12); +var Node_1 = __webpack_require__(11); var NodeUtils_1 = __webpack_require__(8); var StackTraceAnalyzer = StackTraceAnalyzer_1 = function () { function StackTraceAnalyzer(calleeDataExtractorsFactory) { @@ -7456,7 +7469,7 @@ exports.StackTraceAnalyzer = StackTraceAnalyzer; var StackTraceAnalyzer_1; /***/ }), -/* 110 */ +/* 111 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -7488,7 +7501,7 @@ var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); var estraverse = __webpack_require__(17); var AbstractCalleeDataExtractor_1 = __webpack_require__(33); -var Node_1 = __webpack_require__(12); +var Node_1 = __webpack_require__(11); var NodeUtils_1 = __webpack_require__(8); var FunctionDeclarationCalleeDataExtractor = function (_AbstractCalleeDataEx) { (0, _inherits3.default)(FunctionDeclarationCalleeDataExtractor, _AbstractCalleeDataEx); @@ -7534,7 +7547,7 @@ FunctionDeclarationCalleeDataExtractor = tslib_1.__decorate([inversify_1.injecta exports.FunctionDeclarationCalleeDataExtractor = FunctionDeclarationCalleeDataExtractor; /***/ }), -/* 111 */ +/* 112 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -7566,7 +7579,7 @@ var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); var estraverse = __webpack_require__(17); var AbstractCalleeDataExtractor_1 = __webpack_require__(33); -var Node_1 = __webpack_require__(12); +var Node_1 = __webpack_require__(11); var NodeUtils_1 = __webpack_require__(8); var FunctionExpressionCalleeDataExtractor = function (_AbstractCalleeDataEx) { (0, _inherits3.default)(FunctionExpressionCalleeDataExtractor, _AbstractCalleeDataEx); @@ -7615,13 +7628,13 @@ FunctionExpressionCalleeDataExtractor = tslib_1.__decorate([inversify_1.injectab exports.FunctionExpressionCalleeDataExtractor = FunctionExpressionCalleeDataExtractor; /***/ }), -/* 112 */ +/* 113 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var _getIterator2 = __webpack_require__(21); +var _getIterator2 = __webpack_require__(18); var _getIterator3 = _interopRequireDefault(_getIterator2); @@ -7650,7 +7663,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); var estraverse = __webpack_require__(17); -var Node_1 = __webpack_require__(12); +var Node_1 = __webpack_require__(11); var NodeUtils_1 = __webpack_require__(8); var AbstractCalleeDataExtractor_1 = __webpack_require__(33); var ObjectExpressionCalleeDataExtractor = function (_AbstractCalleeDataEx) { @@ -7770,7 +7783,7 @@ ObjectExpressionCalleeDataExtractor = tslib_1.__decorate([inversify_1.injectable exports.ObjectExpressionCalleeDataExtractor = ObjectExpressionCalleeDataExtractor; /***/ }), -/* 113 */ +/* 114 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -7865,7 +7878,7 @@ ArrayStorage = tslib_1.__decorate([inversify_1.injectable()], ArrayStorage); exports.ArrayStorage = ArrayStorage; /***/ }), -/* 114 */ +/* 115 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -7909,13 +7922,13 @@ var ControlFlowStorage = function (_MapStorage_1$MapStor) { exports.ControlFlowStorage = ControlFlowStorage; /***/ }), -/* 115 */ +/* 116 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var _map = __webpack_require__(11); +var _map = __webpack_require__(12); var _map2 = _interopRequireDefault(_map); @@ -7985,7 +7998,7 @@ exports.CustomNodeGroupStorage = CustomNodeGroupStorage; var CustomNodeGroupStorage_1; /***/ }), -/* 116 */ +/* 117 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -8019,7 +8032,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); -var ArrayStorage_1 = __webpack_require__(113); +var ArrayStorage_1 = __webpack_require__(114); var RandomGeneratorUtils_1 = __webpack_require__(9); var Utils_1 = __webpack_require__(14); var StringArrayStorage = function (_ArrayStorage_1$Array) { @@ -8063,7 +8076,7 @@ StringArrayStorage = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__met exports.StringArrayStorage = StringArrayStorage; /***/ }), -/* 117 */ +/* 118 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -8075,7 +8088,7 @@ function AtobTemplate() { exports.AtobTemplate = AtobTemplate; /***/ }), -/* 118 */ +/* 119 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -8087,7 +8100,7 @@ function Rc4Template() { exports.Rc4Template = Rc4Template; /***/ }), -/* 119 */ +/* 120 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -8099,7 +8112,7 @@ function SingleNodeCallControllerTemplate() { exports.SingleNodeCallControllerTemplate = SingleNodeCallControllerTemplate; /***/ }), -/* 120 */ +/* 121 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -8111,7 +8124,7 @@ function ConsoleOutputDisableExpressionTemplate() { exports.ConsoleOutputDisableExpressionTemplate = ConsoleOutputDisableExpressionTemplate; /***/ }), -/* 121 */ +/* 122 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -8123,7 +8136,7 @@ function DebugProtectionFunctionCallTemplate() { exports.DebugProtectionFunctionCallTemplate = DebugProtectionFunctionCallTemplate; /***/ }), -/* 122 */ +/* 123 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -8135,7 +8148,7 @@ function DebugProtectionFunctionIntervalTemplate() { exports.DebugProtectionFunctionIntervalTemplate = DebugProtectionFunctionIntervalTemplate; /***/ }), -/* 123 */ +/* 124 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -8147,7 +8160,7 @@ function DebugProtectionFunctionTemplate() { exports.DebugProtectionFunctionTemplate = DebugProtectionFunctionTemplate; /***/ }), -/* 124 */ +/* 125 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -8159,7 +8172,7 @@ function DomainLockNodeTemplate() { exports.DomainLockNodeTemplate = DomainLockNodeTemplate; /***/ }), -/* 125 */ +/* 126 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -8172,7 +8185,7 @@ function SelfDefendingTemplate() { exports.SelfDefendingTemplate = SelfDefendingTemplate; /***/ }), -/* 126 */ +/* 127 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -8185,7 +8198,7 @@ function SelfDefendingTemplate() { exports.SelfDefendingTemplate = SelfDefendingTemplate; /***/ }), -/* 127 */ +/* 128 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -8197,7 +8210,7 @@ function StringArrayBase64DecodeNodeTemplate() { exports.StringArrayBase64DecodeNodeTemplate = StringArrayBase64DecodeNodeTemplate; /***/ }), -/* 128 */ +/* 129 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -8209,7 +8222,7 @@ function StringArrayCallsWrapperTemplate() { exports.StringArrayCallsWrapperTemplate = StringArrayCallsWrapperTemplate; /***/ }), -/* 129 */ +/* 130 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -8221,7 +8234,7 @@ function StringArrayRc4DecodeNodeTemplate() { exports.StringArrayRc4DecodeNodeTemplate = StringArrayRc4DecodeNodeTemplate; /***/ }), -/* 130 */ +/* 131 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -8233,7 +8246,7 @@ function StringArrayTemplate() { exports.StringArrayTemplate = StringArrayTemplate; /***/ }), -/* 131 */ +/* 132 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -8246,7 +8259,7 @@ function SelfDefendingTemplate() { exports.SelfDefendingTemplate = SelfDefendingTemplate; /***/ }), -/* 132 */ +/* 133 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -8258,97 +8271,96 @@ function StringArrayRotateFunctionTemplate() { exports.StringArrayRotateFunctionTemplate = StringArrayRotateFunctionTemplate; /***/ }), -/* 133 */ +/* 134 */ /***/ (function(module, exports) { module.exports = require("babel-polyfill"); /***/ }), -/* 134 */ +/* 135 */ /***/ (function(module, exports) { module.exports = require("babel-runtime/core-js/object/assign"); /***/ }), -/* 135 */ +/* 136 */ /***/ (function(module, exports) { module.exports = require("babel-runtime/core-js/object/define-property"); /***/ }), -/* 136 */ +/* 137 */ /***/ (function(module, exports) { module.exports = require("babel-runtime/core-js/object/get-own-property-descriptor"); /***/ }), -/* 137 */ +/* 138 */ /***/ (function(module, exports) { module.exports = require("babel-runtime/core-js/set"); /***/ }), -/* 138 */ +/* 139 */ /***/ (function(module, exports) { module.exports = require("babel-runtime/core-js/symbol"); /***/ }), -/* 139 */ +/* 140 */ /***/ (function(module, exports) { module.exports = require("babel-runtime/helpers/typeof"); /***/ }), -/* 140 */ +/* 141 */ /***/ (function(module, exports) { module.exports = require("chance"); /***/ }), -/* 141 */ +/* 142 */ /***/ (function(module, exports) { module.exports = require("class-validator"); /***/ }), -/* 142 */ +/* 143 */ /***/ (function(module, exports) { module.exports = require("commander"); /***/ }), -/* 143 */ +/* 144 */ /***/ (function(module, exports) { module.exports = require("events"); /***/ }), -/* 144 */ +/* 145 */ /***/ (function(module, exports) { module.exports = require("fs"); /***/ }), -/* 145 */ +/* 146 */ /***/ (function(module, exports) { module.exports = require("lodash"); /***/ }), -/* 146 */ +/* 147 */ /***/ (function(module, exports) { module.exports = require("mkdirp"); /***/ }), -/* 147 */ +/* 148 */ /***/ (function(module, exports) { module.exports = require("reflect-metadata"); /***/ }), -/* 148 */, /* 149 */ /***/ (function(module, exports, __webpack_require__) { @@ -8358,20 +8370,6 @@ module.exports = require("reflect-metadata"); var JavaScriptObfuscator_1 = __webpack_require__(25); module.exports = JavaScriptObfuscator_1.JavaScriptObfuscator; -/***/ }), -/* 150 */, -/* 151 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var Utils_1 = __webpack_require__(14); -exports.VisitorDirection = Utils_1.Utils.strEnumify({ - enter: 'enter', - leave: 'leave' -}); - /***/ }) /******/ ]); //# sourceMappingURL=index.js.map \ No newline at end of file From 658ebb0be535f10109cff31067f39bc87d4c7c2a Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Tue, 17 Jan 2017 16:25:00 +0300 Subject: [PATCH 21/28] transformers as visitor: removed `any` type --- dist/index.js | 23 ++++++++++++----------- src/Obfuscator.ts | 24 +++++++++++------------- 2 files changed, 23 insertions(+), 24 deletions(-) diff --git a/dist/index.js b/dist/index.js index 2f93c692..bdcaced9 100644 --- a/dist/index.js +++ b/dist/index.js @@ -90,7 +90,7 @@ module.exports = /******/ __webpack_require__.p = ""; /******/ /******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 149); +/******/ return __webpack_require__(__webpack_require__.s = 150); /******/ }) /************************************************************************/ /******/ ([ @@ -2541,15 +2541,13 @@ var Obfuscator = Obfuscator_1 = function () { var visitors = nodeTransformers.map(function (nodeTransformer) { return _this2.nodeTransformersFactory(nodeTransformer).getVisitor(); }); - var enterVisitor = this.mergeVisitorsForDirection(visitors.filter(function (visitor) { - return visitor.enter !== undefined; - }), VisitorDirection_1.VisitorDirection.enter); - var leaveVisitor = this.mergeVisitorsForDirection(visitors.filter(function (visitor) { - return visitor.leave !== undefined; - }), VisitorDirection_1.VisitorDirection.leave); estraverse.replace(astTree, { - enter: enterVisitor, - leave: leaveVisitor + enter: this.mergeVisitorsForDirection(visitors.filter(function (visitor) { + return visitor.enter !== undefined; + }), VisitorDirection_1.VisitorDirection.enter), + leave: this.mergeVisitorsForDirection(visitors.filter(function (visitor) { + return visitor.leave !== undefined; + }), VisitorDirection_1.VisitorDirection.leave) }); return astTree; } @@ -2557,7 +2555,9 @@ var Obfuscator = Obfuscator_1 = function () { key: "mergeVisitorsForDirection", value: function mergeVisitorsForDirection(visitors, direction) { if (!visitors.length) { - return null; + return function (node, parentNode) { + return node; + }; } return function (node, parentNode) { var _iteratorNormalCompletion = true; @@ -8361,7 +8361,8 @@ module.exports = require("mkdirp"); module.exports = require("reflect-metadata"); /***/ }), -/* 149 */ +/* 149 */, +/* 150 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; diff --git a/src/Obfuscator.ts b/src/Obfuscator.ts index 30c7c303..bb10194e 100644 --- a/src/Obfuscator.ts +++ b/src/Obfuscator.ts @@ -162,18 +162,16 @@ export class Obfuscator implements IObfuscator { .map((nodeTransformer: NodeTransformers): estraverse.Visitor => { return this.nodeTransformersFactory(nodeTransformer).getVisitor(); }); - const enterVisitor: any = this.mergeVisitorsForDirection( - visitors.filter((visitor: estraverse.Visitor) => visitor.enter !== undefined), - VisitorDirection.enter - ); - const leaveVisitor: any = this.mergeVisitorsForDirection( - visitors.filter((visitor: estraverse.Visitor) => visitor.leave !== undefined), - VisitorDirection.leave - ); estraverse.replace(astTree, { - enter: enterVisitor, - leave: leaveVisitor + enter: this.mergeVisitorsForDirection( + visitors.filter((visitor: estraverse.Visitor) => visitor.enter !== undefined), + VisitorDirection.enter + ), + leave: this.mergeVisitorsForDirection( + visitors.filter((visitor: estraverse.Visitor) => visitor.leave !== undefined), + VisitorDirection.leave + ) }); return astTree; @@ -182,11 +180,11 @@ export class Obfuscator implements IObfuscator { /** * @param visitors * @param direction - * @return {estraverse.Visitor | null} + * @return {TVisitorDirection} */ - private mergeVisitorsForDirection (visitors: estraverse.Visitor[], direction: TVisitorDirection): TVisitorFunction | null { + private mergeVisitorsForDirection (visitors: estraverse.Visitor[], direction: TVisitorDirection): TVisitorFunction { if (!visitors.length) { - return null; + return (node: ESTree.Node, parentNode: ESTree.Node) => node; } return (node: ESTree.Node, parentNode: ESTree.Node) => { From d2b2dbded671e748e57364408894668a4af41f9b Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Tue, 17 Jan 2017 17:26:41 +0300 Subject: [PATCH 22/28] 0.9.0-beta.2 --- CHANGELOG.md | 4 ++++ dist/index.js | 5 ++--- package.json | 6 +++--- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d90b6771..a41f5d2c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ Change Log === +v0.9.0-beta.2 +--- +* Transformers refactoring + v0.9.0-beta.1 --- * **New option:** `controlFlowFlattening` allows to enable/disable **Control Flow flattening**. Control flow flattening is a structure transformation of the source code that hinders program comprehension. diff --git a/dist/index.js b/dist/index.js index bdcaced9..d81abc0f 100644 --- a/dist/index.js +++ b/dist/index.js @@ -90,7 +90,7 @@ module.exports = /******/ __webpack_require__.p = ""; /******/ /******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 150); +/******/ return __webpack_require__(__webpack_require__.s = 149); /******/ }) /************************************************************************/ /******/ ([ @@ -8361,8 +8361,7 @@ module.exports = require("mkdirp"); module.exports = require("reflect-metadata"); /***/ }), -/* 149 */, -/* 150 */ +/* 149 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; diff --git a/package.json b/package.json index 35aa4122..553862ee 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "javascript-obfuscator", - "version": "0.9.0-beta.1", + "version": "0.9.0-beta.2", "description": "JavaScript obfuscator", "keywords": [ "obfuscator", @@ -33,7 +33,7 @@ "merge-estraverse-visitors": "^1.0.0", "mkdirp": "0.5.1", "reflect-metadata": "0.1.9", - "source-map-support": "0.4.9", + "source-map-support": "0.4.10", "string-template": "1.0.0", "tslib": "1.5.0" }, @@ -65,7 +65,7 @@ "tslint": "4.3.1", "tslint-loader": "3.3.0", "typescript": "2.1.5", - "webpack": "2.2.0-rc.6", + "webpack": "2.2.0-rc.7", "webpack-node-externals": "1.5.4" }, "repository": { From e8f68171ddc4ff3359199926d0051ea8434cb835 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Thu, 19 Jan 2017 14:12:28 +0300 Subject: [PATCH 23/28] Storages: sliglhtly changed behaviour of `getKeyOf` methods, added tests --- dist/index.js | 100 +++++++------- package.json | 4 +- src/storages/ArrayStorage.ts | 7 +- src/storages/MapStorage.ts | 9 +- src/utils/Utils.ts | 16 --- test/index.spec.ts | 2 + test/unit-tests/storages/ArrayStorage.spec.ts | 126 ++++++++++++++++++ test/unit-tests/storages/MapStorage.spec.ts | 126 ++++++++++++++++++ test/unit-tests/utils/utils/Utils.spec.ts | 28 ---- 9 files changed, 312 insertions(+), 106 deletions(-) create mode 100644 test/unit-tests/storages/ArrayStorage.spec.ts create mode 100644 test/unit-tests/storages/MapStorage.spec.ts diff --git a/dist/index.js b/dist/index.js index d81abc0f..e778903d 100644 --- a/dist/index.js +++ b/dist/index.js @@ -90,7 +90,7 @@ module.exports = /******/ __webpack_require__.p = ""; /******/ /******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 149); +/******/ return __webpack_require__(__webpack_require__.s = 150); /******/ }) /************************************************************************/ /******/ ([ @@ -776,14 +776,6 @@ var _from = __webpack_require__(45); var _from2 = _interopRequireDefault(_from); -var _slicedToArray2 = __webpack_require__(35); - -var _slicedToArray3 = _interopRequireDefault(_slicedToArray2); - -var _getIterator2 = __webpack_require__(18); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - var _toConsumableArray2 = __webpack_require__(24); var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2); @@ -798,7 +790,6 @@ var _createClass3 = _interopRequireDefault(_createClass2); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -var _ = __webpack_require__(146); var JSFuck_1 = __webpack_require__(36); var RandomGeneratorUtils_1 = __webpack_require__(9); @@ -859,40 +850,6 @@ var Utils = function () { value: function isCeilNumber(number) { return number % 1 === 0; } - }, { - key: "mapGetFirstKeyOf", - value: function mapGetFirstKeyOf(map, value) { - var _iteratorNormalCompletion = true; - var _didIteratorError = false; - var _iteratorError = undefined; - - try { - for (var _iterator = (0, _getIterator3.default)(map), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { - var _step$value = (0, _slicedToArray3.default)(_step.value, 2), - key = _step$value[0], - storageValue = _step$value[1]; - - if (_.isEqual(value, storageValue)) { - return key; - } - } - } catch (err) { - _didIteratorError = true; - _iteratorError = err; - } finally { - try { - if (!_iteratorNormalCompletion && _iterator.return) { - _iterator.return(); - } - } finally { - if (_didIteratorError) { - throw _iteratorError; - } - } - } - - return null; - } }, { key: "strEnumify", value: function strEnumify(obj) { @@ -2228,6 +2185,14 @@ var _map = __webpack_require__(12); var _map2 = _interopRequireDefault(_map); +var _slicedToArray2 = __webpack_require__(35); + +var _slicedToArray3 = _interopRequireDefault(_slicedToArray2); + +var _getIterator2 = __webpack_require__(18); + +var _getIterator3 = _interopRequireDefault(_getIterator2); + var _classCallCheck2 = __webpack_require__(0); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); @@ -2242,7 +2207,6 @@ var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); var Initializable_1 = __webpack_require__(10); var RandomGeneratorUtils_1 = __webpack_require__(9); -var Utils_1 = __webpack_require__(14); var MapStorage = function () { function MapStorage() { (0, _classCallCheck3.default)(this, MapStorage); @@ -2260,7 +2224,36 @@ var MapStorage = function () { }, { key: "getKeyOf", value: function getKeyOf(value) { - return Utils_1.Utils.mapGetFirstKeyOf(this.storage, value); + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; + + try { + for (var _iterator = (0, _getIterator3.default)(this.storage), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var _step$value = (0, _slicedToArray3.default)(_step.value, 2), + key = _step$value[0], + storageValue = _step$value[1]; + + if (value === storageValue) { + return key; + } + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator.return) { + _iterator.return(); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } + } + + return null; } }, { key: "getLength", @@ -2303,7 +2296,7 @@ var MapStorage = function () { }(); tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", String)], MapStorage.prototype, "storageId", void 0); tslib_1.__decorate([Initializable_1.initializable(), tslib_1.__metadata("design:type", _map2.default)], MapStorage.prototype, "storage", void 0); -MapStorage = tslib_1.__decorate([inversify_1.injectable(), tslib_1.__metadata("design:paramtypes", [])], MapStorage); +MapStorage = tslib_1.__decorate([inversify_1.injectable()], MapStorage); exports.MapStorage = MapStorage; /***/ }), @@ -7826,7 +7819,8 @@ var ArrayStorage = function () { }, { key: "getKeyOf", value: function getKeyOf(value) { - return this.storage.indexOf(value); + var key = this.storage.indexOf(value); + return key >= 0 ? key : null; } }, { key: "getLength", @@ -8343,12 +8337,7 @@ module.exports = require("events"); module.exports = require("fs"); /***/ }), -/* 146 */ -/***/ (function(module, exports) { - -module.exports = require("lodash"); - -/***/ }), +/* 146 */, /* 147 */ /***/ (function(module, exports) { @@ -8361,7 +8350,8 @@ module.exports = require("mkdirp"); module.exports = require("reflect-metadata"); /***/ }), -/* 149 */ +/* 149 */, +/* 150 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; diff --git a/package.json b/package.json index 553862ee..630b9255 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "@types/estree": "0.0.34", "@types/lodash": "4.14.50", "@types/mkdirp": "0.3.29", - "@types/mocha": "2.2.37", + "@types/mocha": "2.2.38", "@types/node": "7.0.0", "@types/sinon": "1.16.34", "@types/string-template": "1.0.2", @@ -65,7 +65,7 @@ "tslint": "4.3.1", "tslint-loader": "3.3.0", "typescript": "2.1.5", - "webpack": "2.2.0-rc.7", + "webpack": "2.2.0", "webpack-node-externals": "1.5.4" }, "repository": { diff --git a/src/storages/ArrayStorage.ts b/src/storages/ArrayStorage.ts index 66209d5c..030e462e 100644 --- a/src/storages/ArrayStorage.ts +++ b/src/storages/ArrayStorage.ts @@ -41,10 +41,11 @@ export abstract class ArrayStorage implements IStorage { /** * @param value - * @returns {string | number} + * @returns {number | null} */ - public getKeyOf (value: T): string | number { - return this.storage.indexOf(value); + public getKeyOf (value: T): number | null { + const key: number = this.storage.indexOf(value); + return key >= 0 ? key : null; } /** diff --git a/src/storages/MapStorage.ts b/src/storages/MapStorage.ts index 938069e4..5ee1b1bf 100644 --- a/src/storages/MapStorage.ts +++ b/src/storages/MapStorage.ts @@ -5,7 +5,6 @@ import { IStorage } from '../interfaces/storages/IStorage'; import { initializable } from '../decorators/Initializable'; import { RandomGeneratorUtils } from '../utils/RandomGeneratorUtils'; -import { Utils } from '../utils/Utils'; @injectable() export abstract class MapStorage implements IStorage { @@ -40,7 +39,13 @@ export abstract class MapStorage implements IStorage { * @returns {string | number | null} */ public getKeyOf (value: T): string | number | null { - return Utils.mapGetFirstKeyOf (this.storage, value); + for (const [key, storageValue] of this.storage) { + if (value === storageValue) { + return key; + } + } + + return null; } /** diff --git a/src/utils/Utils.ts b/src/utils/Utils.ts index 784d8c6a..f45dce6d 100644 --- a/src/utils/Utils.ts +++ b/src/utils/Utils.ts @@ -1,4 +1,3 @@ -import * as _ from 'lodash'; import { JSFuck } from '../enums/JSFuck'; import { RandomGeneratorUtils } from './RandomGeneratorUtils'; @@ -92,21 +91,6 @@ export class Utils { return number % 1 === 0; } - /** - * @param map - * @param value - * @returns {T | null} - */ - public static mapGetFirstKeyOf (map: Map , value: U): T | null { - for (const [key, storageValue] of map) { - if (_.isEqual(value, storageValue)) { - return key; - } - } - - return null; - } - /** * @param obj * @returns {T} diff --git a/test/index.spec.ts b/test/index.spec.ts index 6213da4f..e52f8f00 100644 --- a/test/index.spec.ts +++ b/test/index.spec.ts @@ -15,6 +15,8 @@ import './unit-tests/obfuscation-result/ObfuscationResult.spec'; import './unit-tests/options/options-normalizer/OptionsNormalizer.spec'; import './unit-tests/source-map-corrector/SourceMapCorrector.spec'; import './unit-tests/stack-trace-analyzer/stack-trace-analyzer/StackTraceAnalyzer.spec'; +import './unit-tests/storages/ArrayStorage.spec'; +import './unit-tests/storages/MapStorage.spec'; import './unit-tests/utils/crypt-utils/CryptUtils.spec'; import './unit-tests/utils/random-generator-utils/RandomGeneratorUtils.spec'; import './unit-tests/utils/utils/Utils.spec'; diff --git a/test/unit-tests/storages/ArrayStorage.spec.ts b/test/unit-tests/storages/ArrayStorage.spec.ts new file mode 100644 index 00000000..46acdc75 --- /dev/null +++ b/test/unit-tests/storages/ArrayStorage.spec.ts @@ -0,0 +1,126 @@ +import { assert } from 'chai'; + +import { IStorage } from '../../../src/interfaces/storages/IStorage'; + +import { ArrayStorage } from '../../../src/storages/ArrayStorage'; + +class ConcreteStorage extends ArrayStorage { + constructor () { + super(); + } +} + +describe('ArrayStorage', () => { + describe('initialize (...args: any[]): void', () => { + it('should throws an error when storage isn\'t initialized', () => { + const storage: IStorage = new ConcreteStorage(); + + assert.throws(() => storage.set(0, 'foo'), Error); + }); + }); + + describe('getStorage (): T[]', () => { + it('should returns storage', () => { + const storage: IStorage = new ConcreteStorage(); + + storage.initialize(); + + assert.instanceOf(storage.getStorage(), Array); + }); + }); + + describe('get (key: number): T', () => { + it('should returns value from storage by key', () => { + const storage: IStorage = new ConcreteStorage(); + + storage.initialize(); + storage.set(0, 'foo'); + + assert.equal(storage.get(0), 'foo'); + }); + + it('should throw an error if value isn\'t exist', () => { + const storage: IStorage = new ConcreteStorage(); + + storage.initialize(); + + assert.throws(() => storage.get(0), Error); + }); + }); + + describe('getLength (): number', () => { + it('should returns length of storage', () => { + const storage: IStorage = new ConcreteStorage(); + + storage.initialize(); + storage.set(0, 'foo'); + + assert.equal(storage.getLength(), 1); + }); + }); + + describe('getKeyOf (value: T): number | null', () => { + it('should returns key of string value', () => { + const storage: IStorage = new ConcreteStorage(); + + storage.initialize(); + storage.set(0, 'foo'); + + assert.equal(storage.getKeyOf('foo'), 0); + }); + + it('should returns key of object if objects in `set` and `get` are two linked objects', () => { + const storage: IStorage = new ConcreteStorage(); + const object: Object = { + foo: 'bar' + }; + + storage.initialize(); + storage.set(0, object); + + assert.equal(storage.getKeyOf(object), 0); + }); + + it('should return `null` if objects in `set` and `get` are two equal objects', () => { + const storage: IStorage = new ConcreteStorage(); + + storage.initialize(); + storage.set(0, { + foo: 'bar' + }); + + assert.equal(storage.getKeyOf({ + foo: 'bar' + }), null); + }); + }); + + describe('set (key: number, value: T): void', () => { + it('should set value to the storage', () => { + const storage: IStorage = new ConcreteStorage(); + + storage.initialize(); + storage.set(0, 'foo'); + + assert.equal(storage.get(0), 'foo'); + assert.equal(storage.getLength(), 1); + }); + }); + + describe('mergeWith (storage: this, mergeId: boolean = false): void', () => { + it('should merge two storages', () => { + const storage1: IStorage = new ConcreteStorage(); + const storage2: IStorage = new ConcreteStorage(); + + storage1.initialize(); + storage1.set(0, 'foo'); + + storage2.initialize(); + storage2.set(1, 'bar'); + + storage1.mergeWith(storage2, false); + + assert.deepEqual(storage1.getStorage(), ['foo', 'bar']); + }); + }); +}); diff --git a/test/unit-tests/storages/MapStorage.spec.ts b/test/unit-tests/storages/MapStorage.spec.ts new file mode 100644 index 00000000..fc2a5b88 --- /dev/null +++ b/test/unit-tests/storages/MapStorage.spec.ts @@ -0,0 +1,126 @@ +import { assert } from 'chai'; + +import { IStorage } from '../../../src/interfaces/storages/IStorage'; + +import { MapStorage } from '../../../src/storages/MapStorage'; + +class ConcreteStorage extends MapStorage { + constructor () { + super(); + } +} + +describe('MapStorage', () => { + describe('initialize (...args: any[]): void', () => { + it('should throws an error when storage isn\'t initialized', () => { + const storage: IStorage = new ConcreteStorage(); + + assert.throws(() => storage.set('foo', 'bar'), Error); + }); + }); + + describe('getStorage (): Map ', () => { + it('should returns storage', () => { + const storage: IStorage = new ConcreteStorage(); + + storage.initialize(); + + assert.instanceOf(storage.getStorage(), Map); + }); + }); + + describe('get (key: string | number): T', () => { + it('should returns value from storage by key', () => { + const storage: IStorage = new ConcreteStorage(); + + storage.initialize(); + storage.set('foo', 'bar'); + + assert.equal(storage.get('foo'), 'bar'); + }); + + it('should throw an error if value isn\'t exist', () => { + const storage: IStorage = new ConcreteStorage(); + + storage.initialize(); + + assert.throws(() => storage.get('foo'), Error); + }); + }); + + describe('getLength (): number', () => { + it('should returns length of storage', () => { + const storage: IStorage = new ConcreteStorage(); + + storage.initialize(); + storage.set('foo', 'bar'); + + assert.equal(storage.getLength(), 1); + }); + }); + + describe('getKeyOf (value: T): string | number | null', () => { + it('should returns key of string value', () => { + const storage: IStorage = new ConcreteStorage(); + + storage.initialize(); + storage.set('foo', 'bar'); + + assert.equal(storage.getKeyOf('bar'), 'foo'); + }); + + it('should returns key of object if objects in `set` and `get` are two linked objects', () => { + const storage: IStorage = new ConcreteStorage(); + const object: Object = { + bar: 'baz' + }; + + storage.initialize(); + storage.set('foo', object); + + assert.equal(storage.getKeyOf(object), 'foo'); + }); + + it('should return `null` if objects in `set` and `get` are two equal objects', () => { + const storage: IStorage = new ConcreteStorage(); + + storage.initialize(); + storage.set('foo', { + bar: 'baz' + }); + + assert.equal(storage.getKeyOf({ + bar: 'baz' + }), null); + }); + }); + + describe('set (key: string | number, value: T): void', () => { + it('should set value to the storage', () => { + const storage: IStorage = new ConcreteStorage(); + + storage.initialize(); + storage.set('foo', 'bar'); + + assert.equal(storage.get('foo'), 'bar'); + assert.equal(storage.getLength(), 1); + }); + }); + + describe('mergeWith (storage: this, mergeId: boolean = false): void', () => { + it('should merge two storages', () => { + const storage1: IStorage = new ConcreteStorage(); + const storage2: IStorage = new ConcreteStorage(); + + storage1.initialize(); + storage1.set('foo', 'bar'); + + storage2.initialize(); + storage2.set('baz', 'quux'); + + storage1.mergeWith(storage2, false); + + assert.deepEqual(Array.from(storage1.getStorage()), [['foo', 'bar'], ['baz', 'quux']]); + }); + }); +}); diff --git a/test/unit-tests/utils/utils/Utils.spec.ts b/test/unit-tests/utils/utils/Utils.spec.ts index 1a0aa8d6..2e2e44e5 100644 --- a/test/unit-tests/utils/utils/Utils.spec.ts +++ b/test/unit-tests/utils/utils/Utils.spec.ts @@ -53,34 +53,6 @@ describe('Utils', () => { }); }); - describe('mapGetFirstKeyOf(map: Map , value: any): any', () => { - it('should returns key of map item', () => { - const map: Map = new Map(); - - map.set('number1', 1); - map.set('number2', 2); - map.set('number3', 2); - - map.set('string1', 'foo'); - map.set('string2', 'bar'); - - map.set('object1', {item: 'value'}); - map.set('object2', {item: 'value'}); - map.set({key: 'object'}, [1, 2, 3]); - - assert.deepEqual(Utils.mapGetFirstKeyOf(map, 1), 'number1'); - assert.deepEqual(Utils.mapGetFirstKeyOf(map, 2), 'number2'); - - assert.deepEqual(Utils.mapGetFirstKeyOf(map, 'foo'), 'string1'); - assert.deepEqual(Utils.mapGetFirstKeyOf(map, 'bar'), 'string2'); - - assert.deepEqual(Utils.mapGetFirstKeyOf(map, {item: 'value'}), 'object1'); - assert.deepEqual(Utils.mapGetFirstKeyOf(map, [1, 2, 3]), {key: 'object'}); - - assert.deepEqual(Utils.mapGetFirstKeyOf(map, 3), null); - }); - }); - describe('stringRotate (string: string, times: number): string', () => { let string: string; From 4951e8e11b193354a9119daa0cdcf1d719faefa4 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Fri, 20 Jan 2017 00:38:23 +0300 Subject: [PATCH 24/28] fixed README typo --- README.md | 2 +- src/storages/ArrayStorage.ts | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 07c182f2..26913c36 100644 --- a/README.md +++ b/README.md @@ -124,7 +124,7 @@ For available options see [options](#options). Usage: ```sh javascript-obfuscator in.js [options] -javascript-obfuscator in.js -output out.js [options] +javascript-obfuscator in.js --output out.js [options] ``` If the destination path is not specified through `--output` option, obfuscated code will saved into input file directory with name like `INPUT_FILE_NAME-obfuscated.js` diff --git a/src/storages/ArrayStorage.ts b/src/storages/ArrayStorage.ts index 030e462e..b98f3b62 100644 --- a/src/storages/ArrayStorage.ts +++ b/src/storages/ArrayStorage.ts @@ -45,6 +45,7 @@ export abstract class ArrayStorage implements IStorage { */ public getKeyOf (value: T): number | null { const key: number = this.storage.indexOf(value); + return key >= 0 ? key : null; } From afd69548380780a166a19c6bb26dee54b93bbc95 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Fri, 20 Jan 2017 08:26:15 +0300 Subject: [PATCH 25/28] dependencies update --- package.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 630b9255..4f01d725 100644 --- a/package.json +++ b/package.json @@ -20,8 +20,8 @@ "javascript-obfuscator": "./bin/javascript-obfuscator.js" }, "dependencies": { - "babel-polyfill": "6.20.0", - "babel-runtime": "6.20.0", + "babel-polyfill": "6.22.0", + "babel-runtime": "6.22.0", "chance": "1.0.4", "class-validator": "0.6.8", "commander": "2.9.0", @@ -52,10 +52,10 @@ "@types/sinon": "1.16.34", "@types/string-template": "1.0.2", "awesome-typescript-loader": "3.0.0-beta.18", - "babel-cli": "6.18.0", + "babel-cli": "6.22.1", "babel-loader": "6.2.10", - "babel-plugin-transform-runtime": "6.15.0", - "babel-preset-es2015": "6.18.0", + "babel-plugin-transform-runtime": "6.22.0", + "babel-preset-es2015": "6.22.0", "chai": "4.0.0-canary.1", "coveralls": "2.11.15", "istanbul": "1.1.0-alpha.1", From d79f54ac85f5d600653c4e2a47fb830e0699ff7d Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Fri, 20 Jan 2017 08:27:15 +0300 Subject: [PATCH 26/28] dependencies update --- dist/index.js | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/dist/index.js b/dist/index.js index e778903d..46859477 100644 --- a/dist/index.js +++ b/dist/index.js @@ -90,7 +90,7 @@ module.exports = /******/ __webpack_require__.p = ""; /******/ /******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 150); +/******/ return __webpack_require__(__webpack_require__.s = 148); /******/ }) /************************************************************************/ /******/ ([ @@ -1414,7 +1414,7 @@ var _createClass3 = _interopRequireDefault(_createClass2); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -__webpack_require__(148); +__webpack_require__(147); if (!global._babelPolyfill && parseInt(process.version.split('.')[0], 10) < 4) { __webpack_require__(134); } @@ -2683,7 +2683,7 @@ var _createClass3 = _interopRequireDefault(_createClass2); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var fs = __webpack_require__(145); -var mkdirp = __webpack_require__(147); +var mkdirp = __webpack_require__(146); var path = __webpack_require__(50); var CLIUtils = function () { @@ -8337,21 +8337,19 @@ module.exports = require("events"); module.exports = require("fs"); /***/ }), -/* 146 */, -/* 147 */ +/* 146 */ /***/ (function(module, exports) { module.exports = require("mkdirp"); /***/ }), -/* 148 */ +/* 147 */ /***/ (function(module, exports) { module.exports = require("reflect-metadata"); /***/ }), -/* 149 */, -/* 150 */ +/* 148 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; From 100950e1e3d77f6ee87fd2a83b68d10aaf3ebb67 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Fri, 20 Jan 2017 16:28:15 +0300 Subject: [PATCH 27/28] scripts update, tests temporary debug logging --- dist/index.js | 5 +++-- scripts/test-coveralls | 1 + scripts/test-full | 1 + scripts/test-mocha | 1 + .../BinaryExpressionControlFlowReplacer.spec.ts | 2 ++ .../CallExpressionControlFlowReplacer.spec.ts | 2 ++ .../LogicalExpressionControlFlowReplacer.spec.ts | 2 ++ 7 files changed, 12 insertions(+), 2 deletions(-) diff --git a/dist/index.js b/dist/index.js index 46859477..d86c4a00 100644 --- a/dist/index.js +++ b/dist/index.js @@ -90,7 +90,7 @@ module.exports = /******/ __webpack_require__.p = ""; /******/ /******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 148); +/******/ return __webpack_require__(__webpack_require__.s = 149); /******/ }) /************************************************************************/ /******/ ([ @@ -8349,7 +8349,8 @@ module.exports = require("mkdirp"); module.exports = require("reflect-metadata"); /***/ }), -/* 148 */ +/* 148 */, +/* 149 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; diff --git a/scripts/test-coveralls b/scripts/test-coveralls index dbeffbe4..dbff163e 100755 --- a/scripts/test-coveralls +++ b/scripts/test-coveralls @@ -1,5 +1,6 @@ #!/bin/bash +npm run test:removeTmpDir && npm run test:compile && $(npm bin)/istanbul cover $(npm bin)/_mocha -- test-tmp/test/index.spec.js --report lcovonly && cat ./coverage/lcov.info | $(npm bin)/coveralls && diff --git a/scripts/test-full b/scripts/test-full index 268eabb5..4cc6c7c1 100755 --- a/scripts/test-full +++ b/scripts/test-full @@ -1,5 +1,6 @@ #!/bin/bash +npm run test:removeTmpDir && npm run test:compile && node test-tmp/test/dev/dev.js && $(npm bin)/istanbul cover $(npm bin)/_mocha -- test-tmp/test/index.spec.js && diff --git a/scripts/test-mocha b/scripts/test-mocha index b6523b91..eace9dc7 100755 --- a/scripts/test-mocha +++ b/scripts/test-mocha @@ -1,5 +1,6 @@ #!/bin/bash +npm run test:removeTmpDir && npm run test:compile && $(npm bin)/mocha test-tmp/test/index.spec.js && npm run test:removeTmpDir \ No newline at end of file diff --git a/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/binary-expression-control-flow-replacer/BinaryExpressionControlFlowReplacer.spec.ts b/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/binary-expression-control-flow-replacer/BinaryExpressionControlFlowReplacer.spec.ts index d157e645..71cbb0ea 100644 --- a/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/binary-expression-control-flow-replacer/BinaryExpressionControlFlowReplacer.spec.ts +++ b/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/binary-expression-control-flow-replacer/BinaryExpressionControlFlowReplacer.spec.ts @@ -67,6 +67,8 @@ describe('BinaryExpressionControlFlowReplacer', () => { } assert.closeTo(equalsValue / samplesCount, expectedValue, delta); + + console.log(equalsValue / samplesCount); }); }); }); diff --git a/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/call-expression-control-flow-replacer/CallExpressionControlFlowReplacer.spec.ts b/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/call-expression-control-flow-replacer/CallExpressionControlFlowReplacer.spec.ts index 97984d9a..7352402d 100644 --- a/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/call-expression-control-flow-replacer/CallExpressionControlFlowReplacer.spec.ts +++ b/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/call-expression-control-flow-replacer/CallExpressionControlFlowReplacer.spec.ts @@ -67,6 +67,8 @@ describe('CallExpressionControlFlowReplacer', () => { } assert.closeTo(equalsValue / samplesCount, expectedValue, delta); + + console.log(equalsValue / samplesCount); }); }); diff --git a/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/logical-expression-control-flow-replacer/LogicalExpressionControlFlowReplacer.spec.ts b/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/logical-expression-control-flow-replacer/LogicalExpressionControlFlowReplacer.spec.ts index f03cd37f..564864b5 100644 --- a/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/logical-expression-control-flow-replacer/LogicalExpressionControlFlowReplacer.spec.ts +++ b/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/logical-expression-control-flow-replacer/LogicalExpressionControlFlowReplacer.spec.ts @@ -67,6 +67,8 @@ describe('LogicalExpressionControlFlowReplacer', () => { } assert.closeTo(equalsValue / samplesCount, expectedValue, delta); + + console.log(equalsValue / samplesCount); }); }); From ededa89616758bc2953c3fcd9f1e68abb1364f59 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Fri, 20 Jan 2017 16:37:09 +0300 Subject: [PATCH 28/28] tests: try to find the cause of test error --- .../BinaryExpressionControlFlowReplacer.spec.ts | 2 -- .../CallExpressionControlFlowReplacer.spec.ts | 2 -- .../LogicalExpressionControlFlowReplacer.spec.ts | 2 -- 3 files changed, 6 deletions(-) diff --git a/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/binary-expression-control-flow-replacer/BinaryExpressionControlFlowReplacer.spec.ts b/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/binary-expression-control-flow-replacer/BinaryExpressionControlFlowReplacer.spec.ts index 71cbb0ea..8a9ef755 100644 --- a/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/binary-expression-control-flow-replacer/BinaryExpressionControlFlowReplacer.spec.ts +++ b/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/binary-expression-control-flow-replacer/BinaryExpressionControlFlowReplacer.spec.ts @@ -58,8 +58,6 @@ describe('BinaryExpressionControlFlowReplacer', () => { assert.match(obfuscatedCode, controlFlowStorageCallRegExp1); assert.match(obfuscatedCode, controlFlowStorageCallRegExp2); - assert.isOk(firstMatch); - assert.isOk(secondMatch); if (firstMatch === secondMatch) { equalsValue++; diff --git a/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/call-expression-control-flow-replacer/CallExpressionControlFlowReplacer.spec.ts b/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/call-expression-control-flow-replacer/CallExpressionControlFlowReplacer.spec.ts index 7352402d..63dcf8fd 100644 --- a/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/call-expression-control-flow-replacer/CallExpressionControlFlowReplacer.spec.ts +++ b/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/call-expression-control-flow-replacer/CallExpressionControlFlowReplacer.spec.ts @@ -58,8 +58,6 @@ describe('CallExpressionControlFlowReplacer', () => { assert.match(obfuscatedCode, controlFlowStorageCallRegExp1); assert.match(obfuscatedCode, controlFlowStorageCallRegExp2); - assert.isOk(firstMatch); - assert.isOk(secondMatch); if (firstMatch === secondMatch) { equalsValue++; diff --git a/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/logical-expression-control-flow-replacer/LogicalExpressionControlFlowReplacer.spec.ts b/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/logical-expression-control-flow-replacer/LogicalExpressionControlFlowReplacer.spec.ts index 564864b5..f70d797e 100644 --- a/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/logical-expression-control-flow-replacer/LogicalExpressionControlFlowReplacer.spec.ts +++ b/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/logical-expression-control-flow-replacer/LogicalExpressionControlFlowReplacer.spec.ts @@ -58,8 +58,6 @@ describe('LogicalExpressionControlFlowReplacer', () => { assert.match(obfuscatedCode, controlFlowStorageCallRegExp1); assert.match(obfuscatedCode, controlFlowStorageCallRegExp2); - assert.isOk(firstMatch); - assert.isOk(secondMatch); if (firstMatch === secondMatch) { equalsValue++;