mirror of
https://github.com/javascript-obfuscator/javascript-obfuscator
synced 2026-08-09 12:42:29 +00:00
New metadata for literals
This commit is contained in:
@@ -7,6 +7,7 @@ v0.15.0
|
||||
* **New CLI option:** `exclude` allows to exclude specific files or directories from obfuscation.
|
||||
* Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/217
|
||||
* Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/210
|
||||
* Internal: refactoring of many things.
|
||||
|
||||
v0.14.3
|
||||
---
|
||||
|
||||
Vendored
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "javascript-obfuscator",
|
||||
"version": "0.15.0-dev.3",
|
||||
"version": "0.15.0-dev.4",
|
||||
"description": "JavaScript obfuscator",
|
||||
"keywords": [
|
||||
"obfuscator",
|
||||
|
||||
Vendored
+8
-1
@@ -6,13 +6,16 @@ import * as ESTree from 'estree';
|
||||
declare module 'estree' {
|
||||
export interface BaseNodeMetadata {
|
||||
ignoredNode?: boolean;
|
||||
obfuscatedNode?: boolean;
|
||||
}
|
||||
|
||||
export interface IdentifierNodeMetadata extends BaseNodeMetadata {
|
||||
renamedIdentifier?: boolean;
|
||||
}
|
||||
|
||||
export interface SimpleLiteralNodeMetadata extends BaseNodeMetadata {
|
||||
replacedLiteral?: boolean;
|
||||
}
|
||||
|
||||
interface BaseNode {
|
||||
metadata?: BaseNodeMetadata;
|
||||
parentNode?: ESTree.Node;
|
||||
@@ -22,6 +25,10 @@ declare module 'estree' {
|
||||
metadata?: IdentifierNodeMetadata;
|
||||
}
|
||||
|
||||
interface SimpleLiteral extends BaseNode {
|
||||
metadata?: SimpleLiteralNodeMetadata;
|
||||
}
|
||||
|
||||
interface ExpressionStatement extends BaseNode {
|
||||
directive?: 'use strict';
|
||||
}
|
||||
|
||||
@@ -48,7 +48,7 @@ export class LiteralTransformer extends AbstractNodeTransformer {
|
||||
case TransformationStage.Obfuscating:
|
||||
return {
|
||||
enter: (node: ESTree.Node, parentNode: ESTree.Node | null) => {
|
||||
if (parentNode && NodeGuards.isLiteralNode(node) && !NodeMetadata.isObfuscatedNode(node)) {
|
||||
if (parentNode && NodeGuards.isLiteralNode(node) && !NodeMetadata.isReplacedLiteral(node)) {
|
||||
return this.transformNode(node, parentNode);
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -109,7 +109,7 @@ export class StringLiteralObfuscatingReplacer extends AbstractObfuscatingReplace
|
||||
private static getHexadecimalLiteralNode (hexadecimalIndex: string): ESTree.Literal {
|
||||
const hexadecimalLiteralNode: ESTree.Literal = NodeFactory.literalNode(hexadecimalIndex);
|
||||
|
||||
NodeMetadata.set(hexadecimalLiteralNode, { obfuscatedNode: true });
|
||||
NodeMetadata.set(hexadecimalLiteralNode, { replacedLiteral: true });
|
||||
|
||||
return hexadecimalLiteralNode;
|
||||
}
|
||||
@@ -121,7 +121,7 @@ export class StringLiteralObfuscatingReplacer extends AbstractObfuscatingReplace
|
||||
private static getRc4KeyLiteralNode (literalValue: string): ESTree.Literal {
|
||||
const rc4KeyLiteralNode: ESTree.Literal = NodeFactory.literalNode(literalValue);
|
||||
|
||||
NodeMetadata.set(rc4KeyLiteralNode, { obfuscatedNode: true });
|
||||
NodeMetadata.set(rc4KeyLiteralNode, { replacedLiteral: true });
|
||||
|
||||
return rc4KeyLiteralNode;
|
||||
}
|
||||
|
||||
@@ -53,8 +53,7 @@ export class MetadataTransformer extends AbstractNodeTransformer {
|
||||
*/
|
||||
public transformNode (node: ESTree.Node, parentNode: ESTree.Node | null): ESTree.Node {
|
||||
NodeMetadata.set(node, {
|
||||
ignoredNode: false,
|
||||
obfuscatedNode: false
|
||||
ignoredNode: false
|
||||
});
|
||||
|
||||
return node;
|
||||
|
||||
+27
-108
@@ -17,10 +17,7 @@ export class NodeFactory {
|
||||
type: NodeType.Program,
|
||||
body,
|
||||
sourceType: 'script',
|
||||
metadata: {
|
||||
ignoredNode: false,
|
||||
obfuscatedNode: false
|
||||
}
|
||||
metadata: { ignoredNode: false }
|
||||
};
|
||||
}
|
||||
|
||||
@@ -34,10 +31,7 @@ export class NodeFactory {
|
||||
return {
|
||||
type: NodeType.ArrayExpression,
|
||||
elements,
|
||||
metadata: {
|
||||
ignoredNode: false,
|
||||
obfuscatedNode: false
|
||||
}
|
||||
metadata: { ignoredNode: false }
|
||||
};
|
||||
}
|
||||
|
||||
@@ -57,10 +51,7 @@ export class NodeFactory {
|
||||
operator,
|
||||
left,
|
||||
right,
|
||||
metadata: {
|
||||
ignoredNode: false,
|
||||
obfuscatedNode: false
|
||||
}
|
||||
metadata: { ignoredNode: false }
|
||||
};
|
||||
}
|
||||
|
||||
@@ -80,10 +71,7 @@ export class NodeFactory {
|
||||
operator,
|
||||
left,
|
||||
right,
|
||||
metadata: {
|
||||
ignoredNode: false,
|
||||
obfuscatedNode: false
|
||||
}
|
||||
metadata: { ignoredNode: false }
|
||||
};
|
||||
}
|
||||
|
||||
@@ -95,10 +83,7 @@ export class NodeFactory {
|
||||
return {
|
||||
type: NodeType.BlockStatement,
|
||||
body,
|
||||
metadata: {
|
||||
ignoredNode: false,
|
||||
obfuscatedNode: false
|
||||
}
|
||||
metadata: { ignoredNode: false }
|
||||
};
|
||||
}
|
||||
|
||||
@@ -109,10 +94,7 @@ export class NodeFactory {
|
||||
public static breakStatement (label?: ESTree.Identifier): ESTree.BreakStatement {
|
||||
const breakStatementNode: ESTree.BreakStatement = {
|
||||
type: NodeType.BreakStatement,
|
||||
metadata: {
|
||||
ignoredNode: false,
|
||||
obfuscatedNode: false
|
||||
}
|
||||
metadata: { ignoredNode: false }
|
||||
};
|
||||
|
||||
if (label) {
|
||||
@@ -135,10 +117,7 @@ export class NodeFactory {
|
||||
type: NodeType.CallExpression,
|
||||
callee,
|
||||
arguments: args,
|
||||
metadata: {
|
||||
ignoredNode: false,
|
||||
obfuscatedNode: false
|
||||
}
|
||||
metadata: { ignoredNode: false }
|
||||
};
|
||||
}
|
||||
|
||||
@@ -149,10 +128,7 @@ export class NodeFactory {
|
||||
public static continueStatement (label?: ESTree.Identifier): ESTree.ContinueStatement {
|
||||
const continueStatementNode: ESTree.ContinueStatement = {
|
||||
type: NodeType.ContinueStatement,
|
||||
metadata: {
|
||||
ignoredNode: false,
|
||||
obfuscatedNode: false
|
||||
}
|
||||
metadata: { ignoredNode: false }
|
||||
};
|
||||
|
||||
if (label) {
|
||||
@@ -170,10 +146,7 @@ export class NodeFactory {
|
||||
return {
|
||||
type: NodeType.ExpressionStatement,
|
||||
expression,
|
||||
metadata: {
|
||||
ignoredNode: false,
|
||||
obfuscatedNode: false
|
||||
}
|
||||
metadata: { ignoredNode: false }
|
||||
};
|
||||
}
|
||||
|
||||
@@ -194,10 +167,7 @@ export class NodeFactory {
|
||||
params,
|
||||
body,
|
||||
generator: false,
|
||||
metadata: {
|
||||
ignoredNode: false,
|
||||
obfuscatedNode: false
|
||||
}
|
||||
metadata: { ignoredNode: false }
|
||||
};
|
||||
}
|
||||
|
||||
@@ -215,10 +185,7 @@ export class NodeFactory {
|
||||
params,
|
||||
body,
|
||||
generator: false,
|
||||
metadata: {
|
||||
ignoredNode: false,
|
||||
obfuscatedNode: false
|
||||
}
|
||||
metadata: { ignoredNode: false }
|
||||
};
|
||||
}
|
||||
|
||||
@@ -238,10 +205,7 @@ export class NodeFactory {
|
||||
test,
|
||||
consequent,
|
||||
...alternate && { alternate },
|
||||
metadata: {
|
||||
ignoredNode: false,
|
||||
obfuscatedNode: false
|
||||
}
|
||||
metadata: { ignoredNode: false }
|
||||
};
|
||||
}
|
||||
|
||||
@@ -253,10 +217,7 @@ export class NodeFactory {
|
||||
return {
|
||||
type: NodeType.Identifier,
|
||||
name,
|
||||
metadata: {
|
||||
ignoredNode: false,
|
||||
obfuscatedNode: false
|
||||
}
|
||||
metadata: { ignoredNode: false }
|
||||
};
|
||||
}
|
||||
|
||||
@@ -276,10 +237,7 @@ export class NodeFactory {
|
||||
content: raw,
|
||||
precedence: escodegen.Precedence.Primary
|
||||
},
|
||||
metadata: {
|
||||
ignoredNode: false,
|
||||
obfuscatedNode: false
|
||||
}
|
||||
metadata: { ignoredNode: false }
|
||||
};
|
||||
}
|
||||
|
||||
@@ -299,10 +257,7 @@ export class NodeFactory {
|
||||
operator,
|
||||
left,
|
||||
right,
|
||||
metadata: {
|
||||
ignoredNode: false,
|
||||
obfuscatedNode: false
|
||||
}
|
||||
metadata: { ignoredNode: false }
|
||||
};
|
||||
}
|
||||
|
||||
@@ -322,10 +277,7 @@ export class NodeFactory {
|
||||
computed,
|
||||
object,
|
||||
property,
|
||||
metadata: {
|
||||
ignoredNode: false,
|
||||
obfuscatedNode: false
|
||||
}
|
||||
metadata: { ignoredNode: false }
|
||||
};
|
||||
}
|
||||
|
||||
@@ -349,10 +301,7 @@ export class NodeFactory {
|
||||
kind,
|
||||
computed,
|
||||
static: false,
|
||||
metadata: {
|
||||
ignoredNode: false,
|
||||
obfuscatedNode: false
|
||||
}
|
||||
metadata: { ignoredNode: false }
|
||||
};
|
||||
}
|
||||
|
||||
@@ -364,10 +313,7 @@ export class NodeFactory {
|
||||
return {
|
||||
type: NodeType.ObjectExpression,
|
||||
properties,
|
||||
metadata: {
|
||||
ignoredNode: false,
|
||||
obfuscatedNode: false
|
||||
}
|
||||
metadata: { ignoredNode: false }
|
||||
};
|
||||
}
|
||||
|
||||
@@ -390,10 +336,7 @@ export class NodeFactory {
|
||||
method: false,
|
||||
shorthand: false,
|
||||
computed,
|
||||
metadata: {
|
||||
ignoredNode: false,
|
||||
obfuscatedNode: false
|
||||
}
|
||||
metadata: { ignoredNode: false }
|
||||
};
|
||||
}
|
||||
|
||||
@@ -405,10 +348,7 @@ export class NodeFactory {
|
||||
return {
|
||||
type: NodeType.ReturnStatement,
|
||||
argument,
|
||||
metadata: {
|
||||
ignoredNode: false,
|
||||
obfuscatedNode: false
|
||||
}
|
||||
metadata: { ignoredNode: false }
|
||||
};
|
||||
}
|
||||
|
||||
@@ -425,10 +365,7 @@ export class NodeFactory {
|
||||
type: NodeType.SwitchStatement,
|
||||
discriminant,
|
||||
cases,
|
||||
metadata: {
|
||||
ignoredNode: false,
|
||||
obfuscatedNode: false
|
||||
}
|
||||
metadata: { ignoredNode: false }
|
||||
};
|
||||
}
|
||||
|
||||
@@ -442,10 +379,7 @@ export class NodeFactory {
|
||||
type: NodeType.SwitchCase,
|
||||
test,
|
||||
consequent,
|
||||
metadata: {
|
||||
ignoredNode: false,
|
||||
obfuscatedNode: false
|
||||
}
|
||||
metadata: { ignoredNode: false }
|
||||
};
|
||||
}
|
||||
|
||||
@@ -465,10 +399,7 @@ export class NodeFactory {
|
||||
operator,
|
||||
argument,
|
||||
prefix,
|
||||
metadata: {
|
||||
ignoredNode: false,
|
||||
obfuscatedNode: false
|
||||
}
|
||||
metadata: { ignoredNode: false }
|
||||
};
|
||||
}
|
||||
|
||||
@@ -483,10 +414,7 @@ export class NodeFactory {
|
||||
operator,
|
||||
argument: argumentExpr,
|
||||
prefix: false,
|
||||
metadata: {
|
||||
ignoredNode: false,
|
||||
obfuscatedNode: false
|
||||
}
|
||||
metadata: { ignoredNode: false }
|
||||
};
|
||||
}
|
||||
|
||||
@@ -503,10 +431,7 @@ export class NodeFactory {
|
||||
type: NodeType.VariableDeclaration,
|
||||
declarations,
|
||||
kind,
|
||||
metadata: {
|
||||
ignoredNode: false,
|
||||
obfuscatedNode: false
|
||||
}
|
||||
metadata: { ignoredNode: false }
|
||||
};
|
||||
}
|
||||
|
||||
@@ -520,10 +445,7 @@ export class NodeFactory {
|
||||
type: NodeType.VariableDeclarator,
|
||||
id,
|
||||
init,
|
||||
metadata: {
|
||||
ignoredNode: false,
|
||||
obfuscatedNode: false
|
||||
}
|
||||
metadata: { ignoredNode: false }
|
||||
};
|
||||
}
|
||||
|
||||
@@ -537,10 +459,7 @@ export class NodeFactory {
|
||||
type: NodeType.WhileStatement,
|
||||
test,
|
||||
body,
|
||||
metadata: {
|
||||
ignoredNode: false,
|
||||
obfuscatedNode: false
|
||||
}
|
||||
metadata: { ignoredNode: false }
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,14 +31,6 @@ export class NodeMetadata {
|
||||
return NodeMetadata.get(node, 'ignoredNode') === true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Node} node
|
||||
* @returns {boolean}
|
||||
*/
|
||||
public static isObfuscatedNode (node: ESTree.Node): boolean {
|
||||
return NodeMetadata.get(node, 'obfuscatedNode') === true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Node} identifierNode
|
||||
* @returns {boolean}
|
||||
@@ -46,4 +38,12 @@ export class NodeMetadata {
|
||||
public static isRenamedIdentifier (identifierNode: ESTree.Identifier): boolean {
|
||||
return NodeMetadata.get<boolean, ESTree.IdentifierNodeMetadata>(identifierNode, 'renamedIdentifier') === true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Node} literalNode
|
||||
* @returns {boolean}
|
||||
*/
|
||||
public static isReplacedLiteral (literalNode: ESTree.Literal): boolean {
|
||||
return NodeMetadata.get<boolean, ESTree.SimpleLiteralNodeMetadata>(literalNode, 'replacedLiteral') === true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,10 +51,7 @@ export class NodeUtils {
|
||||
|
||||
estraverse.replace(structure, {
|
||||
enter: (node: ESTree.Node): ESTree.Node => {
|
||||
NodeMetadata.set(node, {
|
||||
ignoredNode: false,
|
||||
obfuscatedNode: false
|
||||
});
|
||||
NodeMetadata.set(node, { ignoredNode: false });
|
||||
|
||||
return node;
|
||||
}
|
||||
|
||||
@@ -122,7 +122,7 @@ describe('NodeUtils', () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe('convertCodeToStructure (code: string): ESTree.Node[]', () => {
|
||||
describe('convertCodeToStructure (code: string): ESTree.Statement[]', () => {
|
||||
let structure: TStatement[],
|
||||
expectedStructure: TStatement[];
|
||||
|
||||
@@ -133,13 +133,11 @@ describe('NodeUtils', () => {
|
||||
|
||||
const identifierNode: ESTree.Identifier = NodeFactory.identifierNode('abc');
|
||||
const literalNode: ESTree.Literal = NodeFactory.literalNode('cde');
|
||||
const variableDeclaratorNode: ESTree.VariableDeclarator = NodeFactory.variableDeclaratorNode(identifierNode, literalNode);
|
||||
const variableDeclarationNode: ESTree.VariableDeclaration = NodeFactory.variableDeclarationNode([
|
||||
variableDeclaratorNode
|
||||
]);
|
||||
const programNode: ESTree.Program = NodeFactory.programNode([
|
||||
variableDeclarationNode
|
||||
]);
|
||||
const variableDeclaratorNode: ESTree.VariableDeclarator = NodeFactory
|
||||
.variableDeclaratorNode(identifierNode, literalNode);
|
||||
const variableDeclarationNode: ESTree.VariableDeclaration = NodeFactory
|
||||
.variableDeclarationNode([variableDeclaratorNode]);
|
||||
const programNode: ESTree.Program = NodeFactory.programNode([variableDeclarationNode]);
|
||||
|
||||
programNode.parentNode = programNode;
|
||||
variableDeclarationNode.parentNode = programNode;
|
||||
|
||||
Reference in New Issue
Block a user