Ignore transformation of process.env.* (#1367)

This commit is contained in:
Timofey Kachalov
2026-01-06 23:37:42 +04:00
committed by GitHub
parent 90362a2555
commit c844f97cfc
16 changed files with 134 additions and 12 deletions
@@ -15,6 +15,7 @@ import { EvalCallExpressionTransformer } from '../../../node-transformers/prepar
import { ForceTransformStringObfuscatingGuard } from '../../../node-transformers/preparing-transformers/obfuscating-guards/ForceTransformStringObfuscatingGuard';
import { IgnoredImportObfuscatingGuard } from '../../../node-transformers/preparing-transformers/obfuscating-guards/IgnoredImportObfuscatingGuard';
import { ImportMetaObfuscationGuard } from '../../../node-transformers/preparing-transformers/obfuscating-guards/ImportMetaObfuscationGuard';
import { ProcessEnvObfuscationGuard } from '../../../node-transformers/preparing-transformers/obfuscating-guards/ProcessEnvObfuscationGuard';
import { MetadataTransformer } from '../../../node-transformers/preparing-transformers/MetadataTransformer';
import { ObfuscatingGuardsTransformer } from '../../../node-transformers/preparing-transformers/ObfuscatingGuardsTransformer';
import { ParentificationTransformer } from '../../../node-transformers/preparing-transformers/ParentificationTransformer';
@@ -73,6 +74,11 @@ export const preparingTransformersModule: interfaces.ContainerModule = new Conta
.inSingletonScope()
.whenTargetNamed(ObfuscatingGuard.ImportMetaObfuscationGuard);
bind<IObfuscatingGuard>(ServiceIdentifiers.INodeGuard)
.to(ProcessEnvObfuscationGuard)
.inSingletonScope()
.whenTargetNamed(ObfuscatingGuard.ProcessEnvObfuscationGuard);
bind<IObfuscatingGuard>(ServiceIdentifiers.INodeGuard)
.to(ReservedStringObfuscatingGuard)
.inSingletonScope()
@@ -4,5 +4,6 @@ export enum ObfuscatingGuard {
ForceTransformStringObfuscatingGuard = 'ForceTransformStringObfuscatingGuard',
IgnoredImportObfuscatingGuard = 'IgnoredImportObfuscatingGuard',
ImportMetaObfuscationGuard = 'ImportMetaObfuscationGuard',
ProcessEnvObfuscationGuard = 'ProcessEnvObfuscationGuard',
ReservedStringObfuscatingGuard = 'ReservedStringObfuscatingGuard'
}
@@ -33,6 +33,7 @@ export class ObfuscatingGuardsTransformer extends AbstractNodeTransformer {
ObfuscatingGuard.ForceTransformStringObfuscatingGuard,
ObfuscatingGuard.IgnoredImportObfuscatingGuard,
ObfuscatingGuard.ImportMetaObfuscationGuard,
ObfuscatingGuard.ProcessEnvObfuscationGuard,
ObfuscatingGuard.ReservedStringObfuscatingGuard
];
@@ -0,0 +1,66 @@
import { injectable } from 'inversify';
import * as ESTree from 'estree';
import { IObfuscatingGuard } from '../../../interfaces/node-transformers/preparing-transformers/obfuscating-guards/IObfuscatingGuard';
import { ObfuscatingGuardResult } from '../../../enums/node/ObfuscatingGuardResult';
import { NodeGuards } from '../../../node/NodeGuards';
@injectable()
export class ProcessEnvObfuscationGuard implements IObfuscatingGuard {
/**
* @param {Node} node
* @return {boolean}
* @private
*/
private static isProcessEnvMemberExpression(node: ESTree.Node): boolean {
if (!NodeGuards.isMemberExpressionNode(node)) {
return false;
}
return (
NodeGuards.isIdentifierNode(node.object) &&
node.object.name === 'process' &&
NodeGuards.isIdentifierNode(node.property) &&
node.property.name === 'env' &&
!node.computed
);
}
/**
* @param {Node} node
* @return {boolean}
* @private
*/
private static isPartOfProcessEnvChain(node: ESTree.Node): boolean {
if (ProcessEnvObfuscationGuard.isProcessEnvMemberExpression(node)) {
return true;
}
const parentNode = node.parentNode;
if (parentNode && NodeGuards.isMemberExpressionNode(parentNode)) {
if (ProcessEnvObfuscationGuard.isProcessEnvMemberExpression(parentNode.object)) {
return true;
}
if (ProcessEnvObfuscationGuard.isProcessEnvMemberExpression(parentNode)) {
return true;
}
}
return false;
}
/**
* @param {Node} node
* @returns {ObfuscatingGuardResult}
*/
public check(node: ESTree.Node): ObfuscatingGuardResult {
return ProcessEnvObfuscationGuard.isPartOfProcessEnvChain(node)
? ObfuscatingGuardResult.Ignore
: ObfuscatingGuardResult.Transform;
}
}