mirror of
https://github.com/javascript-obfuscator/javascript-obfuscator
synced 2026-08-09 12:42:29 +00:00
* stringArrayWrappersType: 'function' now appends FunctionDeclaration functions instead of FunctionExpression functions. This allows to append these wrappers at random positions inside each scope
This commit is contained in:
@@ -165,8 +165,9 @@ export class StringArrayScopeCallsWrapperFunctionNode extends AbstractStringArra
|
||||
decodeKeyIdentifierNode
|
||||
);
|
||||
|
||||
// stage 3: function expression node
|
||||
const functionExpressionNode: ESTree.FunctionExpression = NodeFactory.functionExpressionNode(
|
||||
// stage 3: function declaration node
|
||||
const functionDeclarationNode: ESTree.FunctionDeclaration = NodeFactory.functionDeclarationNode(
|
||||
this.stringArrayScopeCallsWrapperName,
|
||||
parameters,
|
||||
NodeFactory.blockStatementNode([
|
||||
NodeFactory.returnStatementNode(
|
||||
@@ -178,22 +179,14 @@ export class StringArrayScopeCallsWrapperFunctionNode extends AbstractStringArra
|
||||
])
|
||||
);
|
||||
|
||||
const structure: TStatement = NodeFactory.variableDeclarationNode(
|
||||
[
|
||||
NodeFactory.variableDeclaratorNode(
|
||||
NodeFactory.identifierNode(this.stringArrayScopeCallsWrapperName),
|
||||
functionExpressionNode
|
||||
)
|
||||
],
|
||||
'const',
|
||||
);
|
||||
const structure: TStatement = functionDeclarationNode;
|
||||
|
||||
NodeUtils.parentizeAst(structure);
|
||||
|
||||
// stage 4: rename
|
||||
// have to generate names for both parameter and call identifiers
|
||||
for (const parameter of parameters) {
|
||||
parameter.name = this.identifierNamesGenerator.generateForLexicalScope(functionExpressionNode);
|
||||
parameter.name = this.identifierNamesGenerator.generateForLexicalScope(functionDeclarationNode);
|
||||
}
|
||||
|
||||
return [structure];
|
||||
|
||||
+33
-14
@@ -172,17 +172,13 @@ export class StringArrayScopeCallsWrapperTransformer extends AbstractNodeTransfo
|
||||
stringArrayScopeCallsWrapperLexicalScopeData,
|
||||
);
|
||||
|
||||
const stringArrayScopeCallsWrapperNode: TStatement[] = this.getStringArrayScopeCallsWrapperNode(
|
||||
this.getAndAppendStringArrayScopeCallsWrapperNode(
|
||||
lexicalScopeBodyNode,
|
||||
stringArrayScopeCallsWrapperName,
|
||||
stringArrayScopeCallsWrapperParameterIndexes,
|
||||
upperStringArrayCallsWrapperName,
|
||||
upperStringArrayCallsWrapperParameterIndexes,
|
||||
upperStringArrayCallsWrapperShiftedIndex
|
||||
);
|
||||
|
||||
NodeAppender.prepend(
|
||||
lexicalScopeBodyNode,
|
||||
stringArrayScopeCallsWrapperNode
|
||||
upperStringArrayCallsWrapperShiftedIndex,
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -263,23 +259,31 @@ export class StringArrayScopeCallsWrapperTransformer extends AbstractNodeTransfo
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {TNodeWithLexicalScopeStatements} lexicalScopeBodyNode
|
||||
* @param {string} stringArrayScopeCallsWrapperName
|
||||
* @param {IStringArrayScopeCallsWrapperParameterIndexesData | null} stringArrayScopeCallsWrapperParameterIndexes
|
||||
* @param {string} upperStringArrayCallsWrapperName
|
||||
* @param {IStringArrayScopeCallsWrapperParameterIndexesData | null} upperStringArrayCallsWrapperParameterIndexes
|
||||
* @param {number} stringArrayScopeCallsWrapperShiftedIndex
|
||||
* @returns {TStatement[]}
|
||||
*/
|
||||
private getStringArrayScopeCallsWrapperNode (
|
||||
private getAndAppendStringArrayScopeCallsWrapperNode (
|
||||
lexicalScopeBodyNode: TNodeWithLexicalScopeStatements,
|
||||
stringArrayScopeCallsWrapperName: string,
|
||||
stringArrayScopeCallsWrapperParameterIndexes: IStringArrayScopeCallsWrapperParameterIndexesData | null,
|
||||
upperStringArrayCallsWrapperName: string,
|
||||
upperStringArrayCallsWrapperParameterIndexes: IStringArrayScopeCallsWrapperParameterIndexesData | null,
|
||||
stringArrayScopeCallsWrapperShiftedIndex: number
|
||||
): TStatement[] {
|
||||
): void {
|
||||
let stringArrayScopeCallsWrapperNode: TStatement[];
|
||||
|
||||
switch (this.options.stringArrayWrappersType) {
|
||||
case StringArrayWrappersType.Function:
|
||||
return this.getStringArrayScopeCallsWrapperFunctionNode(
|
||||
case StringArrayWrappersType.Function: {
|
||||
const randomIndex: number = this.randomGenerator.getRandomInteger(
|
||||
0,
|
||||
lexicalScopeBodyNode.body.length - 1
|
||||
);
|
||||
|
||||
stringArrayScopeCallsWrapperNode = this.getStringArrayScopeCallsWrapperFunctionNode(
|
||||
stringArrayScopeCallsWrapperName,
|
||||
stringArrayScopeCallsWrapperParameterIndexes,
|
||||
upperStringArrayCallsWrapperName,
|
||||
@@ -287,12 +291,27 @@ export class StringArrayScopeCallsWrapperTransformer extends AbstractNodeTransfo
|
||||
stringArrayScopeCallsWrapperShiftedIndex
|
||||
);
|
||||
|
||||
NodeAppender.insertAtIndex(
|
||||
lexicalScopeBodyNode,
|
||||
stringArrayScopeCallsWrapperNode,
|
||||
randomIndex
|
||||
);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case StringArrayWrappersType.Variable:
|
||||
default:
|
||||
return this.getStringArrayScopeCallsWrapperVariableNode(
|
||||
default: {
|
||||
stringArrayScopeCallsWrapperNode = this.getStringArrayScopeCallsWrapperVariableNode(
|
||||
stringArrayScopeCallsWrapperName,
|
||||
upperStringArrayCallsWrapperName
|
||||
);
|
||||
|
||||
NodeAppender.prepend(
|
||||
lexicalScopeBodyNode,
|
||||
stringArrayScopeCallsWrapperNode
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user