mirror of
https://github.com/javascript-obfuscator/javascript-obfuscator
synced 2026-08-09 12:42:29 +00:00
CustomNodeAppender refactoring
This commit is contained in:
+28
@@ -0,0 +1,28 @@
|
||||
function foo () {
|
||||
|
||||
}
|
||||
|
||||
function bar () {
|
||||
function inner1 () {
|
||||
|
||||
}
|
||||
|
||||
function inner2 () {
|
||||
var inner3 = function () {
|
||||
|
||||
}
|
||||
|
||||
inner3();
|
||||
}
|
||||
|
||||
inner2();
|
||||
inner1();
|
||||
}
|
||||
|
||||
function baz () {
|
||||
|
||||
}
|
||||
|
||||
baz();
|
||||
foo();
|
||||
bar();
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
bar();
|
||||
|
||||
function foo () {
|
||||
|
||||
}
|
||||
|
||||
function bar () {
|
||||
|
||||
}
|
||||
|
||||
function baz () {
|
||||
function inner1 () {
|
||||
|
||||
}
|
||||
|
||||
inner1();
|
||||
}
|
||||
|
||||
baz();
|
||||
foo();
|
||||
@@ -0,0 +1,5 @@
|
||||
bar();
|
||||
|
||||
function bar () {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
function bar () {
|
||||
|
||||
}
|
||||
|
||||
function baz () {
|
||||
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
bar();
|
||||
@@ -0,0 +1,9 @@
|
||||
import * as fs from 'fs';
|
||||
|
||||
/**
|
||||
* @param path
|
||||
* @returns {string}
|
||||
*/
|
||||
export function readFileAsString (path: string): string {
|
||||
return fs.readFileSync(path, 'utf8');
|
||||
}
|
||||
+2
-2
@@ -13,8 +13,8 @@ import './unit-tests/OptionsNormalizer.spec';
|
||||
import './unit-tests/SourceMapCorrector.spec';
|
||||
import './unit-tests/Utils.spec';
|
||||
import './unit-tests/cli/CLIUtils.spec';
|
||||
import './unit-tests/hidden-node-appender/ASTTreeBlockScopeAnalyzer-spec';
|
||||
import './unit-tests/hidden-node-appender/HiddenNodeAppender-spec';
|
||||
import './unit-tests/custom-nodes/CustomNodeAppender-spec';
|
||||
import './unit-tests/StackTraceAnalyzer-spec';
|
||||
import './unit-tests/node-obfuscators/CatchClauseObfuscator.spec';
|
||||
import './unit-tests/node-obfuscators/FunctionDeclarationObfuscator.spec';
|
||||
import './unit-tests/node-obfuscators/FunctionObfuscator.spec';
|
||||
|
||||
+57
-92
@@ -2,13 +2,15 @@ import * as chai from 'chai';
|
||||
import * as estraverse from 'estraverse';
|
||||
import * as ESTree from 'estree';
|
||||
|
||||
import { TNodeWithBlockStatement } from '../../../src/types/TNodeWithBlockStatement';
|
||||
import { TNodeWithBlockStatement } from '../../src/types/TNodeWithBlockStatement';
|
||||
|
||||
import { IBlockScopeTraceData } from '../../../src/interfaces/IBlockScopeTraceData';
|
||||
import { IStackTraceData } from '../../src/interfaces/IStackTraceData';
|
||||
|
||||
import { ASTTreeBlockScopeAnalyzer } from '../../../src/hidden-node-appender/ASTTreeBlockScopeAnalyzer';
|
||||
import { Nodes } from '../../../src/Nodes';
|
||||
import { NodeUtils } from '../../../src/NodeUtils';
|
||||
import { readFileAsString } from '../helpers/readFileAsString';
|
||||
|
||||
import { Nodes } from '../../src/Nodes';
|
||||
import { NodeUtils } from '../../src/NodeUtils';
|
||||
import { StackTraceAnalyzer } from '../../src/StackTraceAnalyzer';
|
||||
|
||||
const assert: any = chai.assert;
|
||||
|
||||
@@ -64,181 +66,144 @@ function getFunctionExpressionByName (astTree: ESTree.Node, name: string): ESTre
|
||||
return functionExpressionNode;
|
||||
}
|
||||
|
||||
describe('ASTTreeBlockScopeAnalyzer', () => {
|
||||
describe('analyze (): IBlockScopeTraceData[]', () => {
|
||||
describe('StackTraceAnalyzer', () => {
|
||||
describe('analyze (): IStackTraceData[]', () => {
|
||||
let ASTTree: TNodeWithBlockStatement,
|
||||
blockScopeTraceData: IBlockScopeTraceData[],
|
||||
expectedBlockScopeTraceData: IBlockScopeTraceData[];
|
||||
blockScopeTraceData: IStackTraceData[],
|
||||
expectedBlockScopeTraceData: IStackTraceData[];
|
||||
|
||||
it('should returns correct BlockScopeTraceData - variant #1', () => {
|
||||
ASTTree = <ESTree.Program>NodeUtils.convertCodeToStructure(`
|
||||
function foo () {
|
||||
|
||||
}
|
||||
|
||||
function bar () {
|
||||
function inner1 () {
|
||||
|
||||
}
|
||||
|
||||
function inner2 () {
|
||||
var inner3 = function () {
|
||||
|
||||
}
|
||||
|
||||
inner3();
|
||||
}
|
||||
|
||||
inner2();
|
||||
inner1();
|
||||
}
|
||||
|
||||
function baz () {
|
||||
|
||||
}
|
||||
|
||||
baz();
|
||||
foo();
|
||||
bar();
|
||||
`, false);
|
||||
ASTTree = <ESTree.Program>NodeUtils.convertCodeToStructure(
|
||||
readFileAsString(
|
||||
require.resolve('../fixtures/stack-trace-analyzer/variant-1.js')
|
||||
),
|
||||
false
|
||||
);
|
||||
|
||||
expectedBlockScopeTraceData = [
|
||||
{
|
||||
name: 'baz',
|
||||
callee: (<ESTree.FunctionDeclaration>getFunctionDeclarationByName(ASTTree, 'baz')).body,
|
||||
trace: []
|
||||
stackTrace: []
|
||||
},
|
||||
{
|
||||
name: 'foo',
|
||||
callee: (<ESTree.FunctionDeclaration>getFunctionDeclarationByName(ASTTree, 'foo')).body,
|
||||
trace: []
|
||||
stackTrace: []
|
||||
},
|
||||
{
|
||||
name: 'bar',
|
||||
callee: (<ESTree.FunctionDeclaration>getFunctionDeclarationByName(ASTTree, 'bar')).body,
|
||||
trace: [
|
||||
stackTrace: [
|
||||
{
|
||||
name: 'inner2',
|
||||
callee: (<ESTree.FunctionDeclaration>getFunctionDeclarationByName(ASTTree, 'inner2')).body,
|
||||
trace: [
|
||||
stackTrace: [
|
||||
{
|
||||
name: 'inner3',
|
||||
callee: (<ESTree.FunctionExpression>getFunctionExpressionByName(ASTTree, 'inner3')).body,
|
||||
trace: []
|
||||
stackTrace: []
|
||||
},
|
||||
]
|
||||
},
|
||||
{
|
||||
name: 'inner1',
|
||||
callee: (<ESTree.FunctionDeclaration>getFunctionDeclarationByName(ASTTree, 'inner1')).body,
|
||||
trace: []
|
||||
stackTrace: []
|
||||
},
|
||||
]
|
||||
}
|
||||
];
|
||||
|
||||
blockScopeTraceData = new ASTTreeBlockScopeAnalyzer<IBlockScopeTraceData>(ASTTree.body).analyze();
|
||||
blockScopeTraceData = new StackTraceAnalyzer(ASTTree.body).analyze();
|
||||
|
||||
assert.deepEqual(blockScopeTraceData, expectedBlockScopeTraceData);
|
||||
});
|
||||
|
||||
it('should returns correct BlockScopeTraceData - variant #2', () => {
|
||||
ASTTree = <ESTree.Program>NodeUtils.convertCodeToStructure(`
|
||||
bar();
|
||||
|
||||
function foo () {
|
||||
|
||||
}
|
||||
|
||||
function bar () {
|
||||
|
||||
}
|
||||
|
||||
function baz () {
|
||||
function inner1 () {
|
||||
|
||||
}
|
||||
|
||||
inner1();
|
||||
}
|
||||
|
||||
baz();
|
||||
foo();
|
||||
`, false);
|
||||
ASTTree = <ESTree.Program>NodeUtils.convertCodeToStructure(
|
||||
readFileAsString(
|
||||
require.resolve('../fixtures/stack-trace-analyzer/variant-2.js')
|
||||
),
|
||||
false
|
||||
);
|
||||
|
||||
expectedBlockScopeTraceData = [
|
||||
{
|
||||
name: 'bar',
|
||||
callee: (<ESTree.FunctionDeclaration>getFunctionDeclarationByName(ASTTree, 'bar')).body,
|
||||
trace: []
|
||||
stackTrace: []
|
||||
},
|
||||
{
|
||||
name: 'baz',
|
||||
callee: (<ESTree.FunctionDeclaration>getFunctionDeclarationByName(ASTTree, 'baz')).body,
|
||||
trace: [
|
||||
stackTrace: [
|
||||
{
|
||||
name: 'inner1',
|
||||
callee: (<ESTree.FunctionDeclaration>getFunctionDeclarationByName(ASTTree, 'inner1')).body,
|
||||
trace: []
|
||||
stackTrace: []
|
||||
},
|
||||
]
|
||||
},
|
||||
{
|
||||
name: 'foo',
|
||||
callee: (<ESTree.FunctionDeclaration>getFunctionDeclarationByName(ASTTree, 'foo')).body,
|
||||
trace: []
|
||||
stackTrace: []
|
||||
}
|
||||
];
|
||||
|
||||
blockScopeTraceData = new ASTTreeBlockScopeAnalyzer<IBlockScopeTraceData>(ASTTree.body).analyze();
|
||||
blockScopeTraceData = new StackTraceAnalyzer(ASTTree.body).analyze();
|
||||
|
||||
assert.deepEqual(blockScopeTraceData, expectedBlockScopeTraceData);
|
||||
});
|
||||
|
||||
it('should returns correct BlockScopeTraceData - variant #3', () => {
|
||||
ASTTree = <ESTree.Program>NodeUtils.convertCodeToStructure(`
|
||||
bar();
|
||||
|
||||
function bar () {
|
||||
|
||||
}
|
||||
`, false);
|
||||
ASTTree = <ESTree.Program>NodeUtils.convertCodeToStructure(
|
||||
readFileAsString(
|
||||
require.resolve('../fixtures/stack-trace-analyzer/variant-3.js')
|
||||
),
|
||||
false
|
||||
);
|
||||
|
||||
expectedBlockScopeTraceData = [
|
||||
{
|
||||
name: 'bar',
|
||||
callee: (<ESTree.FunctionDeclaration>getFunctionDeclarationByName(ASTTree, 'bar')).body,
|
||||
trace: []
|
||||
stackTrace: []
|
||||
}
|
||||
];
|
||||
|
||||
blockScopeTraceData = new ASTTreeBlockScopeAnalyzer<IBlockScopeTraceData>(ASTTree.body).analyze();
|
||||
blockScopeTraceData = new StackTraceAnalyzer(ASTTree.body).analyze();
|
||||
|
||||
assert.deepEqual(blockScopeTraceData, expectedBlockScopeTraceData);
|
||||
});
|
||||
|
||||
it('should returns correct BlockScopeTraceData - variant #4', () => {
|
||||
ASTTree = <ESTree.Program>NodeUtils.convertCodeToStructure(`
|
||||
function bar () {
|
||||
|
||||
}
|
||||
`, false);
|
||||
ASTTree = <ESTree.Program>NodeUtils.convertCodeToStructure(
|
||||
readFileAsString(
|
||||
require.resolve('../fixtures/stack-trace-analyzer/variant-4.js')
|
||||
),
|
||||
false
|
||||
);
|
||||
|
||||
expectedBlockScopeTraceData = [];
|
||||
|
||||
blockScopeTraceData = new ASTTreeBlockScopeAnalyzer<IBlockScopeTraceData>(ASTTree.body).analyze();
|
||||
blockScopeTraceData = new StackTraceAnalyzer(ASTTree.body).analyze();
|
||||
|
||||
assert.deepEqual(blockScopeTraceData, expectedBlockScopeTraceData);
|
||||
});
|
||||
|
||||
it('should returns correct BlockScopeTraceData - variant #5', () => {
|
||||
ASTTree = <ESTree.Program>NodeUtils.convertCodeToStructure(`
|
||||
bar();
|
||||
`, false);
|
||||
ASTTree = <ESTree.Program>NodeUtils.convertCodeToStructure(
|
||||
readFileAsString(
|
||||
require.resolve('../fixtures/stack-trace-analyzer/variant-5.js')
|
||||
),
|
||||
false
|
||||
);
|
||||
|
||||
expectedBlockScopeTraceData = [];
|
||||
|
||||
blockScopeTraceData = new ASTTreeBlockScopeAnalyzer<IBlockScopeTraceData>(ASTTree.body).analyze();
|
||||
blockScopeTraceData = new StackTraceAnalyzer(ASTTree.body).analyze();
|
||||
|
||||
assert.deepEqual(blockScopeTraceData, expectedBlockScopeTraceData);
|
||||
});
|
||||
+9
-9
@@ -1,12 +1,12 @@
|
||||
import * as chai from 'chai';
|
||||
import * as ESTree from 'estree';
|
||||
|
||||
import { HiddenNodeAppender } from '../../../src/hidden-node-appender/HiddenNodeAppender';
|
||||
import { CustomNodeAppender } from '../../../src/custom-nodes/CustomNodeAppender';
|
||||
import { NodeUtils } from '../../../src/NodeUtils';
|
||||
|
||||
const assert: any = chai.assert;
|
||||
|
||||
describe('ASTTreeBlockScopeAnalyzer', () => {
|
||||
describe('CustomNodeAppender', () => {
|
||||
describe('appendNode (blockScopeNode: TNodeWithBlockStatement, node: ESTree.Node): void', () => {
|
||||
let astTree: ESTree.Program,
|
||||
expectedAstTree: ESTree.Program,
|
||||
@@ -80,7 +80,7 @@ describe('ASTTreeBlockScopeAnalyzer', () => {
|
||||
bar();
|
||||
`, false);
|
||||
|
||||
HiddenNodeAppender.appendNode(astTree.body, node);
|
||||
CustomNodeAppender.appendNode(astTree.body, node);
|
||||
|
||||
NodeUtils.parentize(astTree);
|
||||
|
||||
@@ -150,7 +150,7 @@ describe('ASTTreeBlockScopeAnalyzer', () => {
|
||||
foo();
|
||||
`, false);
|
||||
|
||||
HiddenNodeAppender.appendNode(astTree.body, node);
|
||||
CustomNodeAppender.appendNode(astTree.body, node);
|
||||
|
||||
NodeUtils.parentize(astTree);
|
||||
|
||||
@@ -225,7 +225,7 @@ describe('ASTTreeBlockScopeAnalyzer', () => {
|
||||
foo();
|
||||
`, false);
|
||||
|
||||
HiddenNodeAppender.appendNode(astTree.body, node, 2);
|
||||
CustomNodeAppender.appendNode(astTree.body, node, 2);
|
||||
|
||||
NodeUtils.parentize(astTree);
|
||||
|
||||
@@ -264,7 +264,7 @@ describe('ASTTreeBlockScopeAnalyzer', () => {
|
||||
foo();
|
||||
`, false);
|
||||
|
||||
HiddenNodeAppender.appendNode(astTree.body, node, 1);
|
||||
CustomNodeAppender.appendNode(astTree.body, node, 1);
|
||||
|
||||
NodeUtils.parentize(astTree);
|
||||
|
||||
@@ -278,21 +278,21 @@ describe('ASTTreeBlockScopeAnalyzer', () => {
|
||||
let index: number;
|
||||
|
||||
for (let i = 0; i < 10; i++) {
|
||||
index = HiddenNodeAppender.getIndexByThreshold(100, 0.1);
|
||||
index = CustomNodeAppender.getIndexByThreshold(100, 0.1);
|
||||
|
||||
assert.isAtLeast(index, 0);
|
||||
assert.isAtMost(index, 10);
|
||||
}
|
||||
|
||||
for (let i = 0; i < 10; i++) {
|
||||
index = HiddenNodeAppender.getIndexByThreshold(10, 0.5);
|
||||
index = CustomNodeAppender.getIndexByThreshold(10, 0.5);
|
||||
|
||||
assert.isAtLeast(index, 0);
|
||||
assert.isAtMost(index, 5);
|
||||
}
|
||||
|
||||
for (let i = 0; i < 10; i++) {
|
||||
index = HiddenNodeAppender.getIndexByThreshold(1, 1);
|
||||
index = CustomNodeAppender.getIndexByThreshold(1, 1);
|
||||
|
||||
assert.isAtLeast(index, 0);
|
||||
assert.isAtMost(index, 1);
|
||||
Reference in New Issue
Block a user