diff --git a/dist/index.js b/dist/index.js index 5b666854..0d05e633 100644 --- a/dist/index.js +++ b/dist/index.js @@ -198,8 +198,8 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de var escodegen = __webpack_require__(25); var esprima = __webpack_require__(48); -var estraverse = __webpack_require__(16); -var NodeType_1 = __webpack_require__(15); +var estraverse = __webpack_require__(15); +var NodeType_1 = __webpack_require__(16); var Node_1 = __webpack_require__(12); var NodeUtils = function () { @@ -530,7 +530,7 @@ var _createClass3 = _interopRequireDefault(_createClass2); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -var NodeType_1 = __webpack_require__(15); +var NodeType_1 = __webpack_require__(16); var Node = function () { function Node() { @@ -895,6 +895,12 @@ exports.AbstractCustomNode = AbstractCustomNode; /***/ }, /* 15 */ +/***/ function(module, exports) { + +module.exports = require("estraverse"); + +/***/ }, +/* 16 */ /***/ function(module, exports, __webpack_require__) { "use strict"; @@ -936,12 +942,6 @@ exports.NodeType = Utils_1.Utils.strEnumify({ WhileStatement: 'WhileStatement' }); -/***/ }, -/* 16 */ -/***/ function(module, exports) { - -module.exports = require("estraverse"); - /***/ }, /* 17 */ /***/ function(module, exports, __webpack_require__) { @@ -1382,7 +1382,7 @@ var _createClass3 = _interopRequireDefault(_createClass2); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var escodegen = __webpack_require__(25); -var NodeType_1 = __webpack_require__(15); +var NodeType_1 = __webpack_require__(16); var Nodes = function () { function Nodes() { @@ -2176,9 +2176,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 estraverse = __webpack_require__(16); +var estraverse = __webpack_require__(15); var NodeTransformers_1 = __webpack_require__(40); -var NodeType_1 = __webpack_require__(15); +var NodeType_1 = __webpack_require__(16); var ObfuscationEvents_1 = __webpack_require__(22); var VisitorDirection_1 = __webpack_require__(81); var Node_1 = __webpack_require__(12); @@ -4490,9 +4490,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 estraverse = __webpack_require__(16); +var estraverse = __webpack_require__(15); var CustomNodes_1 = __webpack_require__(20); -var NodeType_1 = __webpack_require__(15); +var NodeType_1 = __webpack_require__(16); var AbstractNodeTransformer_1 = __webpack_require__(17); var Node_1 = __webpack_require__(12); var NodeAppender_1 = __webpack_require__(24); @@ -4740,9 +4740,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 estraverse = __webpack_require__(16); +var estraverse = __webpack_require__(15); var NodeObfuscatorsReplacers_1 = __webpack_require__(19); -var NodeType_1 = __webpack_require__(15); +var NodeType_1 = __webpack_require__(16); var AbstractNodeTransformer_1 = __webpack_require__(17); var Node_1 = __webpack_require__(12); var NodeUtils_1 = __webpack_require__(8); @@ -4836,9 +4836,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 estraverse = __webpack_require__(16); +var estraverse = __webpack_require__(15); var NodeObfuscatorsReplacers_1 = __webpack_require__(19); -var NodeType_1 = __webpack_require__(15); +var NodeType_1 = __webpack_require__(16); var AbstractNodeTransformer_1 = __webpack_require__(17); var Node_1 = __webpack_require__(12); var NodeUtils_1 = __webpack_require__(8); @@ -4966,9 +4966,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 estraverse = __webpack_require__(16); +var estraverse = __webpack_require__(15); var NodeObfuscatorsReplacers_1 = __webpack_require__(19); -var NodeType_1 = __webpack_require__(15); +var NodeType_1 = __webpack_require__(16); var AbstractNodeTransformer_1 = __webpack_require__(17); var Node_1 = __webpack_require__(12); var NodeUtils_1 = __webpack_require__(8); @@ -5064,9 +5064,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 estraverse = __webpack_require__(16); +var estraverse = __webpack_require__(15); var NodeObfuscatorsReplacers_1 = __webpack_require__(19); -var NodeType_1 = __webpack_require__(15); +var NodeType_1 = __webpack_require__(16); var AbstractNodeTransformer_1 = __webpack_require__(17); var Node_1 = __webpack_require__(12); var NodeUtils_1 = __webpack_require__(8); @@ -5238,7 +5238,7 @@ var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); var escodegen = __webpack_require__(25); var NodeObfuscatorsReplacers_1 = __webpack_require__(19); -var NodeType_1 = __webpack_require__(15); +var NodeType_1 = __webpack_require__(16); var AbstractNodeTransformer_1 = __webpack_require__(17); var Node_1 = __webpack_require__(12); var MemberExpressionObfuscator = function (_AbstractNodeTransfor) { @@ -5400,7 +5400,7 @@ var tslib_1 = __webpack_require__(3); var inversify_1 = __webpack_require__(2); var ServiceIdentifiers_1 = __webpack_require__(4); var escodegen = __webpack_require__(25); -var NodeType_1 = __webpack_require__(15); +var NodeType_1 = __webpack_require__(16); var AbstractNodeTransformer_1 = __webpack_require__(17); var Node_1 = __webpack_require__(12); var Utils_1 = __webpack_require__(13); @@ -5498,9 +5498,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 estraverse = __webpack_require__(16); +var estraverse = __webpack_require__(15); var NodeObfuscatorsReplacers_1 = __webpack_require__(19); -var NodeType_1 = __webpack_require__(15); +var NodeType_1 = __webpack_require__(16); var AbstractNodeTransformer_1 = __webpack_require__(17); var Node_1 = __webpack_require__(12); var NodeUtils_1 = __webpack_require__(8); @@ -6289,7 +6289,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 estraverse = __webpack_require__(16); +var estraverse = __webpack_require__(15); var CalleeDataExtractors_1 = __webpack_require__(37); var Node_1 = __webpack_require__(12); var NodeUtils_1 = __webpack_require__(8); @@ -6407,7 +6407,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__(16); +var estraverse = __webpack_require__(15); var AbstractCalleeDataExtractor_1 = __webpack_require__(32); var Node_1 = __webpack_require__(12); var NodeUtils_1 = __webpack_require__(8); @@ -6485,7 +6485,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__(16); +var estraverse = __webpack_require__(15); var AbstractCalleeDataExtractor_1 = __webpack_require__(32); var Node_1 = __webpack_require__(12); var NodeUtils_1 = __webpack_require__(8); @@ -6570,7 +6570,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__(16); +var estraverse = __webpack_require__(15); var Node_1 = __webpack_require__(12); var NodeUtils_1 = __webpack_require__(8); var AbstractCalleeDataExtractor_1 = __webpack_require__(32); diff --git a/test/fixtures/node-transformers/node-control-flow-transformers/function-control-flow-transformer-root-block-scope-1.js b/test/fixtures/node-transformers/node-control-flow-transformers/function-control-flow-transformer-root-block-scope-1.js new file mode 100644 index 00000000..c3825387 --- /dev/null +++ b/test/fixtures/node-transformers/node-control-flow-transformers/function-control-flow-transformer-root-block-scope-1.js @@ -0,0 +1 @@ +var test = 1 + 2; diff --git a/test/fixtures/node-transformers/node-control-flow-transformers/function-control-flow-transformer-root-block-scope-2.js b/test/fixtures/node-transformers/node-control-flow-transformers/function-control-flow-transformer-root-block-scope-2.js new file mode 100644 index 00000000..0916c2b8 --- /dev/null +++ b/test/fixtures/node-transformers/node-control-flow-transformers/function-control-flow-transformer-root-block-scope-2.js @@ -0,0 +1,11 @@ +(function () { + function foo () { + function bar () { + function baz () { + function bash () { + var variable = 1 + 2; + } + } + } + } +})(); diff --git a/test/functional-tests/node-transformers/node-control-flow-transformers/FunctionControlFlowTransformer.spec.ts b/test/functional-tests/node-transformers/node-control-flow-transformers/FunctionControlFlowTransformer.spec.ts index c5785fc1..69aab3e0 100644 --- a/test/functional-tests/node-transformers/node-control-flow-transformers/FunctionControlFlowTransformer.spec.ts +++ b/test/functional-tests/node-transformers/node-control-flow-transformers/FunctionControlFlowTransformer.spec.ts @@ -46,7 +46,7 @@ describe('FunctionControlFlowTransformer', () => { }); describe('variant #2 - two `control flow storage` nodes: root and inner', () => { - const samplesCount: number = 150; + const samplesCount: number = 200; const delta: number = 0.1; const expectedValue: number = 0.5; const regExp1: RegExp = new RegExp( @@ -114,5 +114,60 @@ describe('FunctionControlFlowTransformer', () => { assert.match(obfuscatedCode, regexp); }); }); + + describe('variant #4 - no `control flow storage` node to the root block scope', () => { + const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( + readFileAsString( + './test/fixtures/node-transformers/node-control-flow-transformers/function-control-flow-transformer-root-block-scope-1.js' + ), + { + ...NO_CUSTOM_NODES_PRESET, + controlFlowFlattening: true, + controlFlowFlatteningThreshold: 1 + } + ); + const obfuscatedCode: string = obfuscationResult.getObfuscatedCode(); + + it('should\'t add control flow storage node when transformed node in the root block scope', () => { + assert.match(obfuscatedCode, /^var *test *= *0x1 *\+ *0x2;$/); + }); + }); + + describe('variant #5 - no `control flow storage` node in the root block scope', () => { + const samplesCount: number = 20; + const expectedValue: number = 0; + const regExp: RegExp = new RegExp( + `var *[a-zA-Z]{6} *= *\\{` + + `'(\\\\x[a-f0-9]*){3}' *: *function *_0x[0-9] *\\(${variableMatch}, *${variableMatch}\\) *\\{` + + `return *${variableMatch} *\\+ *${variableMatch};` + + `\\}` + + `\\};` + ); + + + it('should\'t add control flow storage node to the root block scope when transformed nodes not in the root block scope', () => { + let totalValue: number = 0; + + for (let i = 0; i < samplesCount; i++) { + const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( + readFileAsString( + './test/fixtures/node-transformers/node-control-flow-transformers/function-control-flow-transformer-root-block-scope-2.js' + ), + { + ...NO_CUSTOM_NODES_PRESET, + controlFlowFlattening: true, + controlFlowFlatteningThreshold: 1 + } + ); + const obfuscatedCode: string = obfuscationResult.getObfuscatedCode(); + + if (regExp.test(obfuscatedCode)) { + totalValue++; + } + } + + assert.equal(totalValue, expectedValue); + }); + }); }); });