New metadata for literals

This commit is contained in:
sanex3339
2018-03-16 11:29:50 +03:00
parent 469c51d69d
commit 592ba47f33
11 changed files with 57 additions and 136 deletions
+1
View File
@@ -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
---
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "javascript-obfuscator",
"version": "0.15.0-dev.3",
"version": "0.15.0-dev.4",
"description": "JavaScript obfuscator",
"keywords": [
"obfuscator",
+8 -1
View File
@@ -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);
}
}
@@ -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
View File
@@ -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 }
};
}
}
+8 -8
View File
@@ -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;
}
}
+1 -4
View File
@@ -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;