Don't obfuscate import.meta.* (#1335)

This commit is contained in:
Timofey Kachalov
2025-11-30 02:33:15 +04:00
committed by GitHub
parent b36951af37
commit cd63f59099
9 changed files with 49 additions and 1 deletions
+1
View File
@@ -4,6 +4,7 @@ v4.1.2
---
* Fix `transformObjectKeys` performance in some edge-cases
* Fix `controlFlowFlattening` + optional chaining compatibility. Fixes https://github.com/javascript-obfuscator/javascript-obfuscator/issues/1325
* Don't obfuscate import.meta.*. Fixes https://github.com/javascript-obfuscator/javascript-obfuscator/issues/1267
* Revert `Improved stringArray calls wrapper templates` commit. Fixes https://github.com/javascript-obfuscator/javascript-obfuscator/issues/1330
* Don't publish root index.ts files to NPM. Fixes https://github.com/javascript-obfuscator/javascript-obfuscator/issues/1252
* Update `class-validator` version. Fixes https://github.com/javascript-obfuscator/javascript-obfuscator/issues/1324
@@ -14,6 +14,9 @@ import { CustomCodeHelpersTransformer } from '../../../node-transformers/prepari
import { EvalCallExpressionTransformer } from '../../../node-transformers/preparing-transformers/EvalCallExpressionTransformer';
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 { MetadataTransformer } from '../../../node-transformers/preparing-transformers/MetadataTransformer';
import { ObfuscatingGuardsTransformer } from '../../../node-transformers/preparing-transformers/ObfuscatingGuardsTransformer';
import { ParentificationTransformer } from '../../../node-transformers/preparing-transformers/ParentificationTransformer';
@@ -67,6 +70,11 @@ export const preparingTransformersModule: interfaces.ContainerModule = new Conta
.inSingletonScope()
.whenTargetNamed(ObfuscatingGuard.IgnoredImportObfuscatingGuard);
bind<IObfuscatingGuard>(ServiceIdentifiers.INodeGuard)
.to(ImportMetaObfuscationGuard)
.inSingletonScope()
.whenTargetNamed(ObfuscatingGuard.ImportMetaObfuscationGuard);
bind<IObfuscatingGuard>(ServiceIdentifiers.INodeGuard)
.to(ReservedStringObfuscatingGuard)
.inSingletonScope()
@@ -3,5 +3,6 @@ export enum ObfuscatingGuard {
ConditionalCommentObfuscatingGuard = 'ConditionalCommentObfuscatingGuard',
ForceTransformStringObfuscatingGuard = 'ForceTransformStringObfuscatingGuard',
IgnoredImportObfuscatingGuard = 'IgnoredImportObfuscatingGuard',
ImportMetaObfuscationGuard = 'ImportMetaObfuscationGuard',
ReservedStringObfuscatingGuard = 'ReservedStringObfuscatingGuard'
}
+1
View File
@@ -36,6 +36,7 @@ export enum NodeType {
Literal = 'Literal',
LogicalExpression = 'LogicalExpression',
MemberExpression = 'MemberExpression',
MetaProperty = 'MetaProperty',
MethodDefinition = 'MethodDefinition',
NewExpression = 'NewExpression',
ObjectExpression = 'ObjectExpression',
@@ -12,6 +12,7 @@ import { NodeTransformationStage } from '../../enums/node-transformers/NodeTrans
import { AbstractNodeTransformer } from '../AbstractNodeTransformer';
import { NodeFactory } from '../../node/NodeFactory';
import { NodeGuards } from '../../node/NodeGuards';
import { NodeMetadata } from '../../node/NodeMetadata';
@injectable()
export class MemberExpressionTransformer extends AbstractNodeTransformer {
@@ -63,6 +64,10 @@ export class MemberExpressionTransformer extends AbstractNodeTransformer {
* @returns {NodeGuards}
*/
public transformNode (memberExpressionNode: ESTree.MemberExpression, parentNode: ESTree.Node): ESTree.Node {
if (NodeMetadata.isIgnoredNode(memberExpressionNode.object) || NodeMetadata.isIgnoredNode(memberExpressionNode.property)) {
return memberExpressionNode;
}
if (NodeGuards.isIdentifierNode(memberExpressionNode.property)) {
if (memberExpressionNode.computed) {
return memberExpressionNode;
@@ -32,6 +32,7 @@ export class ObfuscatingGuardsTransformer extends AbstractNodeTransformer {
ObfuscatingGuard.ConditionalCommentObfuscatingGuard,
ObfuscatingGuard.ForceTransformStringObfuscatingGuard,
ObfuscatingGuard.IgnoredImportObfuscatingGuard,
ObfuscatingGuard.ImportMetaObfuscationGuard,
ObfuscatingGuard.ReservedStringObfuscatingGuard
];
@@ -0,0 +1,23 @@
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 ImportMetaObfuscationGuard implements IObfuscatingGuard {
/**
* @param {Node} node
* @returns {ObfuscatingGuardResult}
*/
public check (node: ESTree.Node): ObfuscatingGuardResult {
const isMetaProperty = NodeGuards.isMetaPropertyNode(node);
const isMetaPropertyParent = !!node?.parentNode && NodeGuards.isMetaPropertyNode(node.parentNode);
return isMetaProperty || isMetaPropertyParent ? ObfuscatingGuardResult.Ignore : ObfuscatingGuardResult.Transform;
}
}
+8
View File
@@ -335,6 +335,14 @@ export class NodeGuards {
return node.type === NodeType.MemberExpression;
}
/**
* @param {Node} node
* @returns {boolean}
*/
public static isMetaPropertyNode (node: ESTree.Node): node is ESTree.MetaProperty {
return node.type === NodeType.MetaProperty;
}
/**
* @param {Node} node
* @returns {boolean}
@@ -806,7 +806,7 @@ describe('JavaScriptObfuscator', () => {
});
describe('import.meta support', () => {
const regExp: RegExp = /console\['log']\(import\.meta\['url']\);/;
const regExp: RegExp = /console\['log']\(import\.meta\.url\);/;
let obfuscatedCode: string;