Identifier replacer refactoring

This commit is contained in:
sanex3339
2016-08-30 16:52:33 +03:00
parent 6bd03bc3ac
commit ee1836cd30
8 changed files with 243 additions and 190 deletions
+169 -143
View File
@@ -219,9 +219,9 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons
var escodegen = __webpack_require__(10);
var esprima = __webpack_require__(18);
var estraverse = __webpack_require__(4);
var estraverse = __webpack_require__(5);
var NodeType_1 = __webpack_require__(7);
var Nodes_1 = __webpack_require__(6);
var Nodes_1 = __webpack_require__(2);
var Utils_1 = __webpack_require__(0);
var NodeUtils = function () {
@@ -350,6 +350,100 @@ exports.NodeUtils = NodeUtils;
/***/ },
/* 2 */
/***/ function(module, exports, __webpack_require__) {
"use strict";
"use strict";
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var NodeType_1 = __webpack_require__(7);
var Nodes = function () {
function Nodes() {
_classCallCheck(this, Nodes);
}
_createClass(Nodes, null, [{
key: "getProgramNode",
value: function getProgramNode(bodyNode) {
return {
'type': NodeType_1.NodeType.Program,
'body': bodyNode,
'sourceType': 'script'
};
}
}, {
key: "isArrowFunctionExpressionNode",
value: function isArrowFunctionExpressionNode(node) {
return node.type === NodeType_1.NodeType.ArrowFunctionExpression;
}
}, {
key: "isBlockStatementNode",
value: function isBlockStatementNode(node) {
return node.type === NodeType_1.NodeType.BlockStatement;
}
}, {
key: "isFunctionDeclarationNode",
value: function isFunctionDeclarationNode(node) {
return node.type === NodeType_1.NodeType.FunctionDeclaration;
}
}, {
key: "isFunctionExpressionNode",
value: function isFunctionExpressionNode(node) {
return node.type === NodeType_1.NodeType.FunctionExpression;
}
}, {
key: "isIdentifierNode",
value: function isIdentifierNode(node) {
return node.type === NodeType_1.NodeType.Identifier;
}
}, {
key: "isLiteralNode",
value: function isLiteralNode(node) {
return node.type === NodeType_1.NodeType.Literal;
}
}, {
key: "isMemberExpressionNode",
value: function isMemberExpressionNode(node) {
return node.type === NodeType_1.NodeType.MemberExpression;
}
}, {
key: "isProgramNode",
value: function isProgramNode(node) {
return node.type === NodeType_1.NodeType.Program;
}
}, {
key: "isPropertyNode",
value: function isPropertyNode(node) {
return node.type === NodeType_1.NodeType.Property;
}
}, {
key: "isVariableDeclarationNode",
value: function isVariableDeclarationNode(node) {
return node.type === NodeType_1.NodeType.VariableDeclaration;
}
}, {
key: "isVariableDeclaratorNode",
value: function isVariableDeclaratorNode(node) {
return node.type === NodeType_1.NodeType.VariableDeclarator;
}
}, {
key: "isNodeHasBlockStatement",
value: function isNodeHasBlockStatement(node) {
return node.hasOwnProperty('body') && Array.isArray(node.body);
}
}]);
return Nodes;
}();
exports.Nodes = Nodes;
/***/ },
/* 3 */
/***/ function(module, exports) {
"use strict";
@@ -362,7 +456,7 @@ exports.NodeUtils = NodeUtils;
var AppendState = exports.AppendState;
/***/ },
/* 3 */
/* 4 */
/***/ function(module, exports) {
"use strict";
@@ -397,13 +491,13 @@ var Node = function () {
exports.Node = Node;
/***/ },
/* 4 */
/* 5 */
/***/ function(module, exports) {
module.exports = require("estraverse");
/***/ },
/* 5 */
/* 6 */
/***/ function(module, exports, __webpack_require__) {
"use strict";
@@ -414,7 +508,7 @@ var _createClass = function () { function defineProperties(target, props) { for
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var JSFuck_1 = __webpack_require__(16);
var Nodes_1 = __webpack_require__(6);
var Nodes_1 = __webpack_require__(2);
var Utils_1 = __webpack_require__(0);
var NodeObfuscator = function () {
@@ -441,15 +535,11 @@ var NodeObfuscator = function () {
}
}, {
key: "replaceIdentifiersWithRandomNames",
value: function replaceIdentifiersWithRandomNames(node, parentNode, namesMap) {
if (Nodes_1.Nodes.isIdentifierNode(node) && namesMap.has(node.name)) {
var parentNodeIsPropertyNode = Nodes_1.Nodes.isPropertyNode(parentNode) && parentNode.key === node,
parentNodeIsMemberExpressionNode = Nodes_1.Nodes.isMemberExpressionNode(parentNode) && parentNode.computed === false && parentNode.property === node;
if (parentNodeIsPropertyNode || parentNodeIsMemberExpressionNode) {
return;
}
node.name = namesMap.get(node.name);
value: function replaceIdentifiersWithRandomNames(node, namesMap) {
if (namesMap.has(node.name)) {
return namesMap.get(node.name);
}
return node.name;
}
}, {
key: "replaceLiteralBooleanWithJSFuck",
@@ -512,80 +602,6 @@ var NodeObfuscator = function () {
exports.NodeObfuscator = NodeObfuscator;
/***/ },
/* 6 */
/***/ function(module, exports, __webpack_require__) {
"use strict";
"use strict";
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var NodeType_1 = __webpack_require__(7);
var Nodes = function () {
function Nodes() {
_classCallCheck(this, Nodes);
}
_createClass(Nodes, null, [{
key: "getProgramNode",
value: function getProgramNode(bodyNode) {
return {
'type': NodeType_1.NodeType.Program,
'body': bodyNode,
'sourceType': 'script'
};
}
}, {
key: "isBlockStatementNode",
value: function isBlockStatementNode(node) {
return node.type === NodeType_1.NodeType.BlockStatement;
}
}, {
key: "isIdentifierNode",
value: function isIdentifierNode(node) {
return node.type === NodeType_1.NodeType.Identifier;
}
}, {
key: "isLiteralNode",
value: function isLiteralNode(node) {
return node.type === NodeType_1.NodeType.Literal;
}
}, {
key: "isMemberExpressionNode",
value: function isMemberExpressionNode(node) {
return node.type === NodeType_1.NodeType.MemberExpression;
}
}, {
key: "isProgramNode",
value: function isProgramNode(node) {
return node.type === NodeType_1.NodeType.Program;
}
}, {
key: "isPropertyNode",
value: function isPropertyNode(node) {
return node.type === NodeType_1.NodeType.Property;
}
}, {
key: "isVariableDeclaratorNode",
value: function isVariableDeclaratorNode(node) {
return node.type === NodeType_1.NodeType.VariableDeclarator;
}
}, {
key: "isNodeHasBlockStatement",
value: function isNodeHasBlockStatement(node) {
return node.hasOwnProperty('body') && Array.isArray(node.body);
}
}]);
return Nodes;
}();
exports.Nodes = Nodes;
/***/ },
/* 7 */
/***/ function(module, exports, __webpack_require__) {
@@ -979,8 +995,8 @@ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var estraverse = __webpack_require__(4);
var AppendState_1 = __webpack_require__(2);
var estraverse = __webpack_require__(5);
var AppendState_1 = __webpack_require__(3);
var NodeType_1 = __webpack_require__(7);
var CatchClauseObfuscator_1 = __webpack_require__(39);
var ConsoleOutputNodesGroup_1 = __webpack_require__(35);
@@ -990,7 +1006,7 @@ var FunctionObfuscator_1 = __webpack_require__(41);
var LiteralObfuscator_1 = __webpack_require__(42);
var MemberExpressionObfuscator_1 = __webpack_require__(43);
var MethodDefinitionObfuscator_1 = __webpack_require__(44);
var Nodes_1 = __webpack_require__(6);
var Nodes_1 = __webpack_require__(2);
var NodeUtils_1 = __webpack_require__(1);
var ObjectExpressionObfuscator_1 = __webpack_require__(45);
var SelfDefendingNodesGroup_1 = __webpack_require__(37);
@@ -1426,9 +1442,9 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var AppendState_1 = __webpack_require__(2);
var AppendState_1 = __webpack_require__(3);
var ConsoleOutputDisableExpressionTemplate_1 = __webpack_require__(51);
var Node_1 = __webpack_require__(3);
var Node_1 = __webpack_require__(4);
var NodeUtils_1 = __webpack_require__(1);
var ConsoleOutputDisableExpressionNode = function (_Node_1$Node) {
@@ -1482,9 +1498,9 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
__webpack_require__(8);
var AppendState_1 = __webpack_require__(2);
var AppendState_1 = __webpack_require__(3);
var DebufProtectionFunctionCallTemplate_1 = __webpack_require__(52);
var Node_1 = __webpack_require__(3);
var Node_1 = __webpack_require__(4);
var NodeUtils_1 = __webpack_require__(1);
var DebugProtectionFunctionCallNode = function (_Node_1$Node) {
@@ -1535,9 +1551,9 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
__webpack_require__(8);
var AppendState_1 = __webpack_require__(2);
var AppendState_1 = __webpack_require__(3);
var DebugProtectionFunctionIntervalTemplate_1 = __webpack_require__(53);
var Node_1 = __webpack_require__(3);
var Node_1 = __webpack_require__(4);
var NodeUtils_1 = __webpack_require__(1);
var DebugProtectionFunctionIntervalNode = function (_Node_1$Node) {
@@ -1588,9 +1604,9 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
__webpack_require__(8);
var AppendState_1 = __webpack_require__(2);
var AppendState_1 = __webpack_require__(3);
var DebugProtectionFunctionTemplate_1 = __webpack_require__(54);
var Node_1 = __webpack_require__(3);
var Node_1 = __webpack_require__(4);
var NodeUtils_1 = __webpack_require__(1);
var Utils_1 = __webpack_require__(0);
@@ -1651,11 +1667,11 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var AppendState_1 = __webpack_require__(2);
var AppendState_1 = __webpack_require__(3);
var NoCustomNodesPreset_1 = __webpack_require__(13);
var SelfDefendingTemplate_1 = __webpack_require__(55);
var JavaScriptObfuscator_1 = __webpack_require__(9);
var Node_1 = __webpack_require__(3);
var Node_1 = __webpack_require__(4);
var NodeUtils_1 = __webpack_require__(1);
var Utils_1 = __webpack_require__(0);
@@ -1720,9 +1736,9 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
__webpack_require__(8);
var AppendState_1 = __webpack_require__(2);
var AppendState_1 = __webpack_require__(3);
var UnicodeArrayCallsWrapperTemplate_1 = __webpack_require__(56);
var Node_1 = __webpack_require__(3);
var Node_1 = __webpack_require__(4);
var NodeUtils_1 = __webpack_require__(1);
var Utils_1 = __webpack_require__(0);
@@ -1794,13 +1810,13 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
__webpack_require__(8);
var AppendState_1 = __webpack_require__(2);
var AppendState_1 = __webpack_require__(3);
var NoCustomNodesPreset_1 = __webpack_require__(13);
var AtobTemplate_1 = __webpack_require__(50);
var SelfDefendingTemplate_1 = __webpack_require__(57);
var UnicodeArrayDecodeTemplate_1 = __webpack_require__(58);
var JavaScriptObfuscator_1 = __webpack_require__(9);
var Node_1 = __webpack_require__(3);
var Node_1 = __webpack_require__(4);
var NodeUtils_1 = __webpack_require__(1);
var UnicodeArrayDecodeNode = function (_Node_1$Node) {
@@ -1875,9 +1891,9 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
__webpack_require__(8);
var AppendState_1 = __webpack_require__(2);
var AppendState_1 = __webpack_require__(3);
var UnicodeArrayTemplate_1 = __webpack_require__(59);
var Node_1 = __webpack_require__(3);
var Node_1 = __webpack_require__(4);
var NodeUtils_1 = __webpack_require__(1);
var UnicodeArrayNode = function (_Node_1$Node) {
@@ -1961,12 +1977,12 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
__webpack_require__(8);
var AppendState_1 = __webpack_require__(2);
var AppendState_1 = __webpack_require__(3);
var NoCustomNodesPreset_1 = __webpack_require__(13);
var SelfDefendingTemplate_1 = __webpack_require__(60);
var UnicodeArrayRotateFunctionTemplate_1 = __webpack_require__(61);
var JavaScriptObfuscator_1 = __webpack_require__(9);
var Node_1 = __webpack_require__(3);
var Node_1 = __webpack_require__(4);
var NodeUtils_1 = __webpack_require__(1);
var Utils_1 = __webpack_require__(0);
@@ -2220,8 +2236,9 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var estraverse = __webpack_require__(4);
var NodeObfuscator_1 = __webpack_require__(5);
var estraverse = __webpack_require__(5);
var NodeObfuscator_1 = __webpack_require__(6);
var Nodes_1 = __webpack_require__(2);
var CatchClauseObfuscator = function (_NodeObfuscator_1$Nod) {
_inherits(CatchClauseObfuscator, _NodeObfuscator_1$Nod);
@@ -2264,8 +2281,10 @@ var CatchClauseObfuscator = function (_NodeObfuscator_1$Nod) {
var _this3 = this;
estraverse.replace(catchClauseNode, {
leave: function leave(node, parentNode) {
_this3.replaceIdentifiersWithRandomNames(node, parentNode, _this3.catchClauseParam);
leave: function leave(node) {
if (Nodes_1.Nodes.isIdentifierNode(node)) {
node.name = _this3.replaceIdentifiersWithRandomNames(node, _this3.catchClauseParam);
}
}
});
}
@@ -2291,9 +2310,10 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var estraverse = __webpack_require__(4);
var estraverse = __webpack_require__(5);
var NodeType_1 = __webpack_require__(7);
var NodeObfuscator_1 = __webpack_require__(5);
var NodeObfuscator_1 = __webpack_require__(6);
var Nodes_1 = __webpack_require__(2);
var NodeUtils_1 = __webpack_require__(1);
var FunctionDeclarationObfuscator = function (_NodeObfuscator_1$Nod) {
@@ -2341,8 +2361,10 @@ var FunctionDeclarationObfuscator = function (_NodeObfuscator_1$Nod) {
var scopeNode = NodeUtils_1.NodeUtils.getBlockScopeOfNode(functionDeclarationNode);
estraverse.replace(scopeNode, {
enter: function enter(node, parentNode) {
_this3.replaceIdentifiersWithRandomNames(node, parentNode, _this3.functionName);
enter: function enter(node) {
if (Nodes_1.Nodes.isIdentifierNode(node)) {
node.name = _this3.replaceIdentifiersWithRandomNames(node, _this3.functionName);
}
}
});
}
@@ -2368,8 +2390,9 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var estraverse = __webpack_require__(4);
var NodeObfuscator_1 = __webpack_require__(5);
var estraverse = __webpack_require__(5);
var NodeObfuscator_1 = __webpack_require__(6);
var Nodes_1 = __webpack_require__(2);
var FunctionObfuscator = function (_NodeObfuscator_1$Nod) {
_inherits(FunctionObfuscator, _NodeObfuscator_1$Nod);
@@ -2414,8 +2437,10 @@ var FunctionObfuscator = function (_NodeObfuscator_1$Nod) {
var _this3 = this;
var replaceVisitor = {
leave: function leave(node, parentNode) {
_this3.replaceIdentifiersWithRandomNames(node, parentNode, _this3.functionParams);
leave: function leave(node) {
if (Nodes_1.Nodes.isIdentifierNode(node)) {
node.name = _this3.replaceIdentifiersWithRandomNames(node, _this3.functionParams);
}
}
};
functionNode.params.forEach(function (paramsNode) {
@@ -2448,8 +2473,8 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var escodegen = __webpack_require__(10);
var NodeObfuscator_1 = __webpack_require__(5);
var Nodes_1 = __webpack_require__(6);
var NodeObfuscator_1 = __webpack_require__(6);
var Nodes_1 = __webpack_require__(2);
var LiteralObfuscator = function (_NodeObfuscator_1$Nod) {
_inherits(LiteralObfuscator, _NodeObfuscator_1$Nod);
@@ -2511,10 +2536,10 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var escodegen = __webpack_require__(10);
var estraverse = __webpack_require__(4);
var estraverse = __webpack_require__(5);
var NodeType_1 = __webpack_require__(7);
var NodeObfuscator_1 = __webpack_require__(5);
var Nodes_1 = __webpack_require__(6);
var NodeObfuscator_1 = __webpack_require__(6);
var Nodes_1 = __webpack_require__(2);
var MemberExpressionObfuscator = function (_NodeObfuscator_1$Nod) {
_inherits(MemberExpressionObfuscator, _NodeObfuscator_1$Nod);
@@ -2594,9 +2619,9 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var estraverse = __webpack_require__(4);
var NodeObfuscator_1 = __webpack_require__(5);
var Nodes_1 = __webpack_require__(6);
var estraverse = __webpack_require__(5);
var NodeObfuscator_1 = __webpack_require__(6);
var Nodes_1 = __webpack_require__(2);
var Utils_1 = __webpack_require__(0);
var MethodDefinitionObfuscator = function (_NodeObfuscator_1$Nod) {
@@ -2661,10 +2686,10 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var escodegen = __webpack_require__(10);
var estraverse = __webpack_require__(4);
var estraverse = __webpack_require__(5);
var NodeType_1 = __webpack_require__(7);
var NodeObfuscator_1 = __webpack_require__(5);
var Nodes_1 = __webpack_require__(6);
var NodeObfuscator_1 = __webpack_require__(6);
var Nodes_1 = __webpack_require__(2);
var Utils_1 = __webpack_require__(0);
var ObjectExpressionObfuscator = function (_NodeObfuscator_1$Nod) {
@@ -2743,11 +2768,11 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var estraverse = __webpack_require__(4);
var estraverse = __webpack_require__(5);
var NodeType_1 = __webpack_require__(7);
var NodeObfuscator_1 = __webpack_require__(5);
var NodeObfuscator_1 = __webpack_require__(6);
var Nodes_1 = __webpack_require__(2);
var NodeUtils_1 = __webpack_require__(1);
var Utils_1 = __webpack_require__(0);
var VariableDeclarationObfuscator = function (_NodeObfuscator_1$Nod) {
_inherits(VariableDeclarationObfuscator, _NodeObfuscator_1$Nod);
@@ -2797,20 +2822,21 @@ var VariableDeclarationObfuscator = function (_NodeObfuscator_1$Nod) {
var scopeNode = variableDeclarationNode.kind === 'var' ? NodeUtils_1.NodeUtils.getBlockScopeOfNode(variableDeclarationNode) : variableParentNode,
isNodeAfterVariableDeclaratorFlag = false;
estraverse.replace(scopeNode, {
enter: function enter(node, parentNode) {
var functionNodes = [NodeType_1.NodeType.ArrowFunctionExpression, NodeType_1.NodeType.FunctionDeclaration, NodeType_1.NodeType.FunctionExpression];
if (Utils_1.Utils.arrayContains(functionNodes, node.type)) {
enter: function enter(node) {
if (Nodes_1.Nodes.isArrowFunctionExpressionNode(node) || Nodes_1.Nodes.isFunctionDeclarationNode(node) || Nodes_1.Nodes.isFunctionExpressionNode(node)) {
estraverse.replace(node, {
enter: function enter(node, parentNode) {
_this3.replaceIdentifiersWithRandomNames(node, parentNode, _this3.variableNames);
enter: function enter(node) {
if (Nodes_1.Nodes.isIdentifierNode(node)) {
node.name = _this3.replaceIdentifiersWithRandomNames(node, _this3.variableNames);
}
}
});
}
if (node === variableDeclarationNode) {
if (Nodes_1.Nodes.isVariableDeclarationNode(node) && node === variableDeclarationNode) {
isNodeAfterVariableDeclaratorFlag = true;
}
if (isNodeAfterVariableDeclaratorFlag) {
_this3.replaceIdentifiersWithRandomNames(node, parentNode, _this3.variableNames);
if (Nodes_1.Nodes.isIdentifierNode(node) && isNodeAfterVariableDeclaratorFlag) {
node.name = _this3.replaceIdentifiersWithRandomNames(node, _this3.variableNames);
}
}
});
+37
View File
@@ -1,10 +1,14 @@
import { IArrowFunctionExpressionNode } from "./interfaces/nodes/IArrowFunctionExpressionNode";
import { IBlockStatementNode } from "./interfaces/nodes/IBlockStatementNode";
import { IIdentifierNode } from "./interfaces/nodes/IIdentifierNode";
import { IFunctionDeclarationNode } from "./interfaces/nodes/IFunctionDeclarationNode";
import { IFunctionExpressionNode } from "./interfaces/nodes/IFunctionExpressionNode";
import { ILiteralNode } from "./interfaces/nodes/ILiteralNode";
import { IMemberExpressionNode } from "./interfaces/nodes/IMemberExpressionNode";
import { INode } from "./interfaces/nodes/INode";
import { IProgramNode } from "./interfaces/nodes/IProgramNode";
import { IPropertyNode } from "./interfaces/nodes/IPropertyNode";
import { IVariableDeclarationNode } from "./interfaces/nodes/IVariableDeclarationNode";
import { IVariableDeclaratorNode } from "./interfaces/nodes/IVariableDeclaratorNode";
import { TStatement } from "./types/nodes/TStatement";
@@ -26,6 +30,14 @@ export class Nodes {
};
}
/**
* @param node
* @returns {boolean}
*/
public static isArrowFunctionExpressionNode (node: INode): node is IArrowFunctionExpressionNode {
return node.type === NodeType.ArrowFunctionExpression;
}
/**
* @param node
* @returns {boolean}
@@ -34,6 +46,22 @@ export class Nodes {
return node.type === NodeType.BlockStatement;
}
/**
* @param node
* @returns {boolean}
*/
public static isFunctionDeclarationNode (node: INode): node is IFunctionDeclarationNode {
return node.type === NodeType.FunctionDeclaration;
}
/**
* @param node
* @returns {boolean}
*/
public static isFunctionExpressionNode (node: INode): node is IFunctionExpressionNode {
return node.type === NodeType.FunctionExpression;
}
/**
* @param node
* @returns {boolean}
@@ -76,6 +104,15 @@ export class Nodes {
return node.type === NodeType.Property;
}
/**
*
* @param node
* @returns {boolean}
*/
public static isVariableDeclarationNode (node: INode): node is IVariableDeclarationNode {
return node.type === NodeType.VariableDeclaration;
}
/**
*
* @param node
@@ -4,6 +4,7 @@ import { ICatchClauseNode } from "../interfaces/nodes/ICatchClauseNode";
import { INode } from '../interfaces/nodes/INode';
import { NodeObfuscator } from './NodeObfuscator';
import { Nodes } from "../Nodes";
/**
* replaces:
@@ -41,8 +42,10 @@ export class CatchClauseObfuscator extends NodeObfuscator {
*/
private replaceCatchClauseParam (catchClauseNode: ICatchClauseNode): void {
estraverse.replace(catchClauseNode, {
leave: (node: INode, parentNode: INode): any => {
this.replaceIdentifiersWithRandomNames(node, parentNode, this.catchClauseParam);
leave: (node: INode): any => {
if (Nodes.isIdentifierNode(node)) {
node.name = this.replaceIdentifiersWithRandomNames(node, this.catchClauseParam);
}
}
});
}
@@ -6,6 +6,7 @@ import { INode } from "../interfaces/nodes/INode";
import { NodeType } from "../enums/NodeType";
import { NodeObfuscator } from './NodeObfuscator';
import { Nodes } from "../Nodes";
import { NodeUtils } from "../NodeUtils";
/**
@@ -54,8 +55,10 @@ export class FunctionDeclarationObfuscator extends NodeObfuscator {
);
estraverse.replace(scopeNode, {
enter: (node: INode, parentNode: INode): any => {
this.replaceIdentifiersWithRandomNames(node, parentNode, this.functionName);
enter: (node: INode): any => {
if (Nodes.isIdentifierNode(node)) {
node.name = this.replaceIdentifiersWithRandomNames(node, this.functionName);
}
}
});
}
+5 -2
View File
@@ -4,6 +4,7 @@ import { IFunctionNode } from "../interfaces/nodes/IFunctionNode";
import { INode } from "../interfaces/nodes/INode";
import { NodeObfuscator } from './NodeObfuscator';
import { Nodes } from "../Nodes";
/**
* replaces:
@@ -44,8 +45,10 @@ export class FunctionObfuscator extends NodeObfuscator {
*/
private replaceFunctionParams (functionNode: IFunctionNode): void {
let replaceVisitor: estraverse.Visitor = {
leave: (node: INode, parentNode: INode): any => {
this.replaceIdentifiersWithRandomNames(node, parentNode, this.functionParams);
leave: (node: INode): any => {
if (Nodes.isIdentifierNode(node)) {
node.name = this.replaceIdentifiersWithRandomNames(node, this.functionParams);
}
}
};
+7 -22
View File
@@ -1,4 +1,5 @@
import { ICustomNode } from '../interfaces/custom-nodes/ICustomNode';
import { IIdentifierNode } from "../interfaces/nodes/IIdentifierNode";
import { INodeObfuscator } from '../interfaces/INodeObfuscator';
import { INode } from "../interfaces/nodes/INode";
import { IOptions } from "../interfaces/IOptions";
@@ -67,31 +68,15 @@ export abstract class NodeObfuscator implements INodeObfuscator {
/**
* @param node
* @param parentNode
* @param namesMap
* @returns {string}
*/
protected replaceIdentifiersWithRandomNames (
node: INode,
parentNode: INode,
namesMap: Map <string, string>
): void {
if (Nodes.isIdentifierNode(node) && namesMap.has(node.name)) {
const parentNodeIsPropertyNode: boolean = (
Nodes.isPropertyNode(parentNode) &&
parentNode.key === node
),
parentNodeIsMemberExpressionNode: boolean = (
Nodes.isMemberExpressionNode(parentNode) &&
parentNode.computed === false &&
parentNode.property === node
);
if (parentNodeIsPropertyNode || parentNodeIsMemberExpressionNode) {
return;
}
node.name = <string>namesMap.get(node.name);
protected replaceIdentifiersWithRandomNames (node: IIdentifierNode, namesMap: Map <string, string>): string {
if (namesMap.has(node.name)) {
return <string>namesMap.get(node.name);
}
return node.name;
}
/**
@@ -7,8 +7,8 @@ import { IVariableDeclaratorNode } from "../interfaces/nodes/IVariableDeclarator
import { NodeType } from "../enums/NodeType";
import { NodeObfuscator } from './NodeObfuscator';
import { Nodes } from "../Nodes";
import { NodeUtils } from "../NodeUtils";
import { Utils } from '../Utils';
/**
* replaces:
@@ -62,27 +62,27 @@ export class VariableDeclarationObfuscator extends NodeObfuscator {
isNodeAfterVariableDeclaratorFlag: boolean = false;
estraverse.replace(scopeNode, {
enter: (node: INode, parentNode: INode): any => {
const functionNodes: string[] = [
NodeType.ArrowFunctionExpression,
NodeType.FunctionDeclaration,
NodeType.FunctionExpression
];
if (Utils.arrayContains(functionNodes, node.type)) {
enter: (node: INode): any => {
if (
Nodes.isArrowFunctionExpressionNode(node) ||
Nodes.isFunctionDeclarationNode(node) ||
Nodes.isFunctionExpressionNode(node)
) {
estraverse.replace(node, {
enter: (node: INode, parentNode: INode): any => {
this.replaceIdentifiersWithRandomNames(node, parentNode, this.variableNames);
enter: (node: INode): any => {
if (Nodes.isIdentifierNode(node)) {
node.name = this.replaceIdentifiersWithRandomNames(node, this.variableNames);
}
}
});
}
if (node === variableDeclarationNode) {
if (Nodes.isVariableDeclarationNode(node) && node === variableDeclarationNode) {
isNodeAfterVariableDeclaratorFlag = true;
}
if (isNodeAfterVariableDeclaratorFlag) {
this.replaceIdentifiersWithRandomNames(node, parentNode, this.variableNames);
if (Nodes.isIdentifierNode(node) && isNodeAfterVariableDeclaratorFlag) {
node.name = this.replaceIdentifiersWithRandomNames(node, this.variableNames);
}
}
});
+1 -5
View File
@@ -22,9 +22,5 @@
"node",
"sinon"
]
},
"exclude": [
"node_modules",
"test"
]
}
}