mirror of
https://github.com/javascript-obfuscator/javascript-obfuscator
synced 2026-08-09 12:42:29 +00:00
Don't obfuscate import.meta.* (#1335)
This commit is contained in:
@@ -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()
|
||||
|
||||
+1
@@ -3,5 +3,6 @@ export enum ObfuscatingGuard {
|
||||
ConditionalCommentObfuscatingGuard = 'ConditionalCommentObfuscatingGuard',
|
||||
ForceTransformStringObfuscatingGuard = 'ForceTransformStringObfuscatingGuard',
|
||||
IgnoredImportObfuscatingGuard = 'IgnoredImportObfuscatingGuard',
|
||||
ImportMetaObfuscationGuard = 'ImportMetaObfuscationGuard',
|
||||
ReservedStringObfuscatingGuard = 'ReservedStringObfuscatingGuard'
|
||||
}
|
||||
|
||||
@@ -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
|
||||
];
|
||||
|
||||
|
||||
+23
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user