mirror of
https://github.com/javascript-obfuscator/javascript-obfuscator
synced 2026-08-09 12:42:29 +00:00
WIP: added random string array scope calls wrappers parameters
This commit is contained in:
@@ -15,9 +15,11 @@ import { IIdentifierNamesGenerator } from '../../interfaces/generators/identifie
|
||||
import { ILiteralNodesCacheStorage } from '../../interfaces/storages/string-array-transformers/ILiteralNodesCacheStorage';
|
||||
import { IOptions } from '../../interfaces/options/IOptions';
|
||||
import { IRandomGenerator } from '../../interfaces/utils/IRandomGenerator';
|
||||
import { IStringArrayScopeCallsWrapperData } from '../../interfaces/node-transformers/string-array-transformers/IStringArrayScopeCallsWrapperData';
|
||||
import { IStringArrayScopeCallsWrapperLexicalScopeData } from '../../interfaces/node-transformers/string-array-transformers/IStringArrayScopeCallsWrapperLexicalScopeData';
|
||||
import { IStringArrayScopeCallsWrapperLexicalScopeDataStorage } from '../../interfaces/storages/string-array-transformers/IStringArrayScopeCallsWrapperLexicalScopeDataStorage';
|
||||
import { IStringArrayScopeCallsWrapperNamesDataStorage } from '../../interfaces/storages/string-array-transformers/IStringArrayScopeCallsWrapperNamesDataStorage';
|
||||
import { IStringArrayScopeCallsWrapperParameterIndexesData } from '../../interfaces/node-transformers/string-array-transformers/IStringArrayScopeCallsWrapperParameterIndexesData';
|
||||
import { IStringArrayStorage } from '../../interfaces/storages/string-array-transformers/IStringArrayStorage';
|
||||
import { IStringArrayStorageAnalyzer } from '../../interfaces/analyzers/string-array-storage-analyzer/IStringArrayStorageAnalyzer';
|
||||
import { IStringArrayStorageItemData } from '../../interfaces/storages/string-array-transformers/IStringArrayStorageItem';
|
||||
@@ -28,6 +30,8 @@ import { NodeTransformationStage } from '../../enums/node-transformers/NodeTrans
|
||||
import { StringArrayCustomNode } from '../../enums/custom-nodes/StringArrayCustomNode';
|
||||
import { StringArrayWrappersType } from '../../enums/node-transformers/string-array-transformers/StringArrayWrappersType';
|
||||
|
||||
import { stringArrayScopeCallsWrapperParametersMaxCount } from '../../constants/node-transformers/string-array-transformers/StringArrayScopeCallsWrapperParametersMaxCount';
|
||||
|
||||
import { AbstractNodeTransformer } from '../AbstractNodeTransformer';
|
||||
import { NodeGuards } from '../../node/NodeGuards';
|
||||
import { NodeLiteralUtils } from '../../node/NodeLiteralUtils';
|
||||
@@ -207,7 +211,11 @@ export class StringArrayTransformer extends AbstractNodeTransformer {
|
||||
* @returns {Expression}
|
||||
*/
|
||||
private getStringArrayCallNode (stringArrayStorageItemData: IStringArrayStorageItemData): ESTree.Expression {
|
||||
const [stringArrayCallsWrapperName, index] = this.getStringArrayCallsWrapperData(stringArrayStorageItemData);
|
||||
const {
|
||||
name: stringArrayCallsWrapperName,
|
||||
index,
|
||||
parameterIndexesData
|
||||
} = this.getStringArrayCallsWrapperData(stringArrayStorageItemData);
|
||||
const {decodeKey } = stringArrayStorageItemData;
|
||||
|
||||
const stringArrayCallCustomNode: ICustomNode<TInitialData<StringArrayCallNode>> =
|
||||
@@ -215,6 +223,7 @@ export class StringArrayTransformer extends AbstractNodeTransformer {
|
||||
|
||||
stringArrayCallCustomNode.initialize(
|
||||
stringArrayCallsWrapperName,
|
||||
parameterIndexesData,
|
||||
index,
|
||||
this.stringArrayStorage.getIndexShiftAmount(),
|
||||
decodeKey
|
||||
@@ -231,11 +240,11 @@ export class StringArrayTransformer extends AbstractNodeTransformer {
|
||||
|
||||
/**
|
||||
* @param {IStringArrayStorageItemData} stringArrayStorageItemData
|
||||
* @returns {[name: string, index: number]}
|
||||
* @returns {IStringArrayScopeCallsWrapperData}
|
||||
*/
|
||||
private getStringArrayCallsWrapperData (
|
||||
stringArrayStorageItemData: IStringArrayStorageItemData
|
||||
): [name: string, index: number] {
|
||||
): IStringArrayScopeCallsWrapperData {
|
||||
return !this.options.stringArrayWrappersCount
|
||||
? this.getRootStringArrayCallsWrapperData(stringArrayStorageItemData)
|
||||
: this.getUpperStringArrayCallsWrapperData(stringArrayStorageItemData);
|
||||
@@ -243,28 +252,29 @@ export class StringArrayTransformer extends AbstractNodeTransformer {
|
||||
|
||||
/**
|
||||
* @param {IStringArrayStorageItemData} stringArrayStorageItemData
|
||||
* @returns {[name: string, index: number]}
|
||||
* @returns {IStringArrayScopeCallsWrapperData}
|
||||
*/
|
||||
private getRootStringArrayCallsWrapperData (
|
||||
stringArrayStorageItemData: IStringArrayStorageItemData
|
||||
): [name: string, index: number] {
|
||||
): IStringArrayScopeCallsWrapperData {
|
||||
const {encoding, index} = stringArrayStorageItemData;
|
||||
|
||||
const rootStringArrayCallsWrapperName: string = this.stringArrayStorage.getStorageCallsWrapperName(encoding);
|
||||
|
||||
return [
|
||||
rootStringArrayCallsWrapperName,
|
||||
return {
|
||||
name: rootStringArrayCallsWrapperName,
|
||||
parameterIndexesData: null,
|
||||
index
|
||||
];
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {IStringArrayStorageItemData} stringArrayStorageItemData
|
||||
* @returns {[name: string, index: number]}
|
||||
* @returns {IStringArrayScopeCallsWrapperData}
|
||||
*/
|
||||
private getUpperStringArrayCallsWrapperData (
|
||||
stringArrayStorageItemData: IStringArrayStorageItemData
|
||||
): [name: string, index: number] {
|
||||
): IStringArrayScopeCallsWrapperData {
|
||||
const {encoding, index} = stringArrayStorageItemData;
|
||||
const currentLexicalScopeBodyNode: TNodeWithLexicalScopeStatements | null =
|
||||
this.visitedLexicalScopeNodesStackStorage.getLastElement() ?? null;
|
||||
@@ -295,10 +305,11 @@ export class StringArrayTransformer extends AbstractNodeTransformer {
|
||||
? stringArrayScopeCallsWrapperLexicalScopeData.resultShiftedIndex + index
|
||||
: index;
|
||||
|
||||
return [
|
||||
randomUpperStringArrayCallsWrapperName,
|
||||
resultIndex
|
||||
];
|
||||
return {
|
||||
name: randomUpperStringArrayCallsWrapperName,
|
||||
index: resultIndex,
|
||||
parameterIndexesData: stringArrayScopeCallsWrapperLexicalScopeData.callsWrappersParameterIndexesData
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -362,6 +373,10 @@ export class StringArrayTransformer extends AbstractNodeTransformer {
|
||||
? this.stringArrayScopeCallsWrapperLexicalScopeDataStorage.get(parentLexicalScopeBodyNode) ?? null
|
||||
: null;
|
||||
|
||||
const callsWrappersParameterIndexesData: IStringArrayScopeCallsWrapperParameterIndexesData | null =
|
||||
this.options.stringArrayWrappersType === StringArrayWrappersType.Function
|
||||
? this.getStringArrayCallsWrapperParameterIndexesData()
|
||||
: null;
|
||||
const scopeShiftedIndex: number = this.options.stringArrayWrappersType === StringArrayWrappersType.Function
|
||||
? this.randomGenerator.getRandomInteger(
|
||||
StringArrayTransformer.minShiftedIndexValue,
|
||||
@@ -373,6 +388,7 @@ export class StringArrayTransformer extends AbstractNodeTransformer {
|
||||
: scopeShiftedIndex;
|
||||
|
||||
const lexicalScopeData: IStringArrayScopeCallsWrapperLexicalScopeData = {
|
||||
callsWrappersParameterIndexesData,
|
||||
parentLexicalScopeBodyNode,
|
||||
resultShiftedIndex,
|
||||
scopeShiftedIndex
|
||||
@@ -385,4 +401,20 @@ export class StringArrayTransformer extends AbstractNodeTransformer {
|
||||
|
||||
return lexicalScopeData;
|
||||
}
|
||||
|
||||
/**
|
||||
* @returns {IStringArrayScopeCallsWrapperParameterIndexesData}
|
||||
*/
|
||||
private getStringArrayCallsWrapperParameterIndexesData (): IStringArrayScopeCallsWrapperParameterIndexesData {
|
||||
const minIndexValue: number = 0;
|
||||
const maxIndexValue: number = stringArrayScopeCallsWrapperParametersMaxCount - 1;
|
||||
|
||||
const index: number = this.randomGenerator.getRandomInteger(minIndexValue, maxIndexValue);
|
||||
const decodeKey: number = this.randomGenerator.getRandomIntegerExcluding(minIndexValue, maxIndexValue, [index]);
|
||||
|
||||
return {
|
||||
index,
|
||||
decodeKey
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user