|
@@ -2,7 +2,6 @@ import { injectable, inject } from 'inversify';
|
|
import { ServiceIdentifiers } from '../../container/ServiceIdentifiers';
|
|
import { ServiceIdentifiers } from '../../container/ServiceIdentifiers';
|
|
|
|
|
|
import * as escodegen from 'escodegen';
|
|
import * as escodegen from 'escodegen';
|
|
-import * as estraverse from 'estraverse';
|
|
|
|
import * as ESTree from 'estree';
|
|
import * as ESTree from 'estree';
|
|
|
|
|
|
import { IOptions } from '../../interfaces/options/IOptions';
|
|
import { IOptions } from '../../interfaces/options/IOptions';
|
|
@@ -38,24 +37,18 @@ export class MemberExpressionObfuscator extends AbstractNodeTransformer {
|
|
* @param memberExpressionNode
|
|
* @param memberExpressionNode
|
|
*/
|
|
*/
|
|
public transformNode (memberExpressionNode: ESTree.MemberExpression): void {
|
|
public transformNode (memberExpressionNode: ESTree.MemberExpression): void {
|
|
- estraverse.traverse(memberExpressionNode.property, {
|
|
|
|
- enter: (node: ESTree.Node, parentNode: ESTree.Node): any => {
|
|
|
|
- if (Node.isLiteralNode(node)) {
|
|
|
|
- this.obfuscateLiteralProperty(node);
|
|
|
|
-
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if (Node.isIdentifierNode(node)) {
|
|
|
|
- if (memberExpressionNode.computed) {
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
|
|
+ if (Node.isLiteralNode(memberExpressionNode.property)) {
|
|
|
|
+ memberExpressionNode.property = this.obfuscateLiteralProperty(memberExpressionNode.property);
|
|
|
|
+ }
|
|
|
|
|
|
- memberExpressionNode.computed = true;
|
|
|
|
- this.obfuscateIdentifierProperty(node);
|
|
|
|
- }
|
|
|
|
|
|
+ if (Node.isIdentifierNode(memberExpressionNode.property)) {
|
|
|
|
+ if (memberExpressionNode.computed) {
|
|
|
|
+ return;
|
|
}
|
|
}
|
|
- });
|
|
|
|
|
|
+
|
|
|
|
+ memberExpressionNode.computed = true;
|
|
|
|
+ memberExpressionNode.property = this.obfuscateIdentifierProperty(memberExpressionNode.property);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -69,22 +62,18 @@ export class MemberExpressionObfuscator extends AbstractNodeTransformer {
|
|
* object[identifier] = 1;
|
|
* object[identifier] = 1;
|
|
*
|
|
*
|
|
* @param node
|
|
* @param node
|
|
|
|
+ * @returns {ESTree.Literal}
|
|
*/
|
|
*/
|
|
- private obfuscateIdentifierProperty (node: ESTree.Identifier): void {
|
|
|
|
- const nodeValue: string = node.name;
|
|
|
|
- const literalNode: ESTree.Literal = {
|
|
|
|
- raw: `'${nodeValue}'`,
|
|
|
|
|
|
+ private obfuscateIdentifierProperty (node: ESTree.Identifier): ESTree.Literal {
|
|
|
|
+ return {
|
|
|
|
+ type: NodeType.Literal,
|
|
|
|
+ value: node.name,
|
|
|
|
+ raw: `'${node.name}'`,
|
|
'x-verbatim-property': {
|
|
'x-verbatim-property': {
|
|
- content: this.stringLiteralReplacer.replace(nodeValue),
|
|
|
|
|
|
+ content: this.stringLiteralReplacer.replace(node.name),
|
|
precedence: escodegen.Precedence.Primary
|
|
precedence: escodegen.Precedence.Primary
|
|
- },
|
|
|
|
- type: NodeType.Literal,
|
|
|
|
- value: nodeValue
|
|
|
|
|
|
+ }
|
|
};
|
|
};
|
|
-
|
|
|
|
- delete node.name;
|
|
|
|
-
|
|
|
|
- Object.assign(node, literalNode);
|
|
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -95,13 +84,16 @@ export class MemberExpressionObfuscator extends AbstractNodeTransformer {
|
|
* object[_0x23d45[25]] = 1;
|
|
* object[_0x23d45[25]] = 1;
|
|
*
|
|
*
|
|
* @param node
|
|
* @param node
|
|
|
|
+ * @returns {ESTree.Literal}
|
|
*/
|
|
*/
|
|
- private obfuscateLiteralProperty (node: ESTree.Literal): void {
|
|
|
|
|
|
+ private obfuscateLiteralProperty (node: ESTree.Literal): ESTree.Literal {
|
|
if (typeof node.value === 'string' && !node['x-verbatim-property']) {
|
|
if (typeof node.value === 'string' && !node['x-verbatim-property']) {
|
|
node['x-verbatim-property'] = {
|
|
node['x-verbatim-property'] = {
|
|
- content : this.stringLiteralReplacer.replace(node.value),
|
|
|
|
|
|
+ content: this.stringLiteralReplacer.replace(node.value),
|
|
precedence: escodegen.Precedence.Primary
|
|
precedence: escodegen.Precedence.Primary
|
|
};
|
|
};
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ return node;
|
|
}
|
|
}
|
|
}
|
|
}
|