additional test for FunctionControlFlowTransformer

This commit is contained in:
sanex3339
2016-12-27 22:47:19 +03:00
parent 725c26577e
commit 11772b141b
4 changed files with 98 additions and 31 deletions
+30 -30
View File
@@ -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);
@@ -0,0 +1,11 @@
(function () {
function foo () {
function bar () {
function baz () {
function bash () {
var variable = 1 + 2;
}
}
}
}
})();
@@ -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);
});
});
});
});