summaryrefslogtreecommitdiff
path: root/src/node_modules/javascript-obfuscator/src/custom-code-helpers/string-array/StringArrayRotateFunctionCodeHelper.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/node_modules/javascript-obfuscator/src/custom-code-helpers/string-array/StringArrayRotateFunctionCodeHelper.ts')
-rw-r--r--src/node_modules/javascript-obfuscator/src/custom-code-helpers/string-array/StringArrayRotateFunctionCodeHelper.ts121
1 files changed, 121 insertions, 0 deletions
diff --git a/src/node_modules/javascript-obfuscator/src/custom-code-helpers/string-array/StringArrayRotateFunctionCodeHelper.ts b/src/node_modules/javascript-obfuscator/src/custom-code-helpers/string-array/StringArrayRotateFunctionCodeHelper.ts
new file mode 100644
index 0000000..b907e2c
--- /dev/null
+++ b/src/node_modules/javascript-obfuscator/src/custom-code-helpers/string-array/StringArrayRotateFunctionCodeHelper.ts
@@ -0,0 +1,121 @@
+import { inject, injectable, } from 'inversify';
+import { ServiceIdentifiers } from '../../container/ServiceIdentifiers';
+
+import { TIdentifierNamesGeneratorFactory } from '../../types/container/generators/TIdentifierNamesGeneratorFactory';
+import { TStatement } from '../../types/node/TStatement';
+
+import { ICustomCodeHelperFormatter } from '../../interfaces/custom-code-helpers/ICustomCodeHelperFormatter';
+import { ICustomCodeHelperObfuscator } from '../../interfaces/custom-code-helpers/ICustomCodeHelperObfuscator';
+import { IEscapeSequenceEncoder } from '../../interfaces/utils/IEscapeSequenceEncoder';
+import { IOptions } from '../../interfaces/options/IOptions';
+import { IRandomGenerator } from '../../interfaces/utils/IRandomGenerator';
+
+import { initializable } from '../../decorators/Initializable';
+
+import { SelfDefendingTemplate } from './templates/string-array-rotate-function/SelfDefendingTemplate';
+import { StringArrayRotateFunctionTemplate } from './templates/string-array-rotate-function/StringArrayRotateFunctionTemplate';
+
+import { AbstractCustomCodeHelper } from '../AbstractCustomCodeHelper';
+import { NodeUtils } from '../../node/NodeUtils';
+import { NumberUtils } from '../../utils/NumberUtils';
+
+@injectable()
+export class StringArrayRotateFunctionCodeHelper extends AbstractCustomCodeHelper {
+ /**
+ * @type {string}
+ */
+ @initializable()
+ private stringArrayName!: string;
+
+ /**
+ * @param {number}
+ */
+ @initializable()
+ private stringArrayRotationAmount!: number;
+
+ /**
+ * @type {IEscapeSequenceEncoder}
+ */
+ private readonly escapeSequenceEncoder: IEscapeSequenceEncoder;
+
+ /**
+ * @param {TIdentifierNamesGeneratorFactory} identifierNamesGeneratorFactory
+ * @param {ICustomCodeHelperFormatter} customCodeHelperFormatter
+ * @param {ICustomCodeHelperObfuscator} customCodeHelperObfuscator
+ * @param {IRandomGenerator} randomGenerator
+ * @param {IOptions} options
+ * @param {IEscapeSequenceEncoder} escapeSequenceEncoder
+ */
+ public constructor (
+ @inject(ServiceIdentifiers.Factory__IIdentifierNamesGenerator)
+ identifierNamesGeneratorFactory: TIdentifierNamesGeneratorFactory,
+ @inject(ServiceIdentifiers.ICustomCodeHelperFormatter) customCodeHelperFormatter: ICustomCodeHelperFormatter,
+ @inject(ServiceIdentifiers.ICustomCodeHelperObfuscator) customCodeHelperObfuscator: ICustomCodeHelperObfuscator,
+ @inject(ServiceIdentifiers.IRandomGenerator) randomGenerator: IRandomGenerator,
+ @inject(ServiceIdentifiers.IOptions) options: IOptions,
+ @inject(ServiceIdentifiers.IEscapeSequenceEncoder) escapeSequenceEncoder: IEscapeSequenceEncoder
+ ) {
+ super(
+ identifierNamesGeneratorFactory,
+ customCodeHelperFormatter,
+ customCodeHelperObfuscator,
+ randomGenerator,
+ options
+ );
+
+ this.escapeSequenceEncoder = escapeSequenceEncoder;
+ }
+
+ /**
+ * @param {string} stringArrayName
+ * @param {number} stringArrayRotationAmount
+ */
+ public initialize (
+ stringArrayName: string,
+ stringArrayRotationAmount: number
+ ): void {
+ this.stringArrayName = stringArrayName;
+ this.stringArrayRotationAmount = stringArrayRotationAmount;
+ }
+
+ /**
+ * @param {string} codeHelperTemplate
+ * @returns {TStatement[]}
+ */
+ protected getNodeStructure (codeHelperTemplate: string): TStatement[] {
+ return NodeUtils.convertCodeToStructure(codeHelperTemplate);
+ }
+
+ /**
+ * @returns {string}
+ */
+ protected getCodeHelperTemplate (): string {
+ const timesName: string = this.identifierNamesGenerator.generateNext();
+ const whileFunctionName: string = this.identifierNamesGenerator.generateNext();
+ const preservedNames: string[] = [`^${this.stringArrayName}$`];
+
+ let code: string = '';
+
+ if (this.options.selfDefending) {
+ code = this.customCodeHelperFormatter.formatTemplate(SelfDefendingTemplate(this.escapeSequenceEncoder), {
+ timesName,
+ whileFunctionName
+ });
+ } else {
+ code = `${whileFunctionName}(++${timesName})`;
+ }
+
+ return this.customCodeHelperObfuscator.obfuscateTemplate(
+ this.customCodeHelperFormatter.formatTemplate(StringArrayRotateFunctionTemplate(), {
+ code,
+ timesName,
+ whileFunctionName,
+ stringArrayName: this.stringArrayName,
+ stringArrayRotationAmount: NumberUtils.toHex(this.stringArrayRotationAmount)
+ }),
+ {
+ reservedNames: preservedNames
+ }
+ );
+ }
+}