diff --git a/index.ts b/index.ts index 7f4d8d28..6e9a3511 100644 --- a/index.ts +++ b/index.ts @@ -8,6 +8,9 @@ import { IProgramNode } from './src/interfaces/nodes/IProgramNode'; import { Obfuscator } from './src/Obfuscator'; export class JavaScriptObfuscator { + /** + * @type any + */ private static defaultOptions: any = { compact: true, rotateUnicodeArray: true @@ -50,4 +53,4 @@ export class JavaScriptObfuscator { } } -module.exports = JavaScriptObfuscator; \ No newline at end of file +module.exports = JavaScriptObfuscator; diff --git a/src/NodeUtils.ts b/src/NodeUtils.ts index 0cab70c2..862535ba 100644 --- a/src/NodeUtils.ts +++ b/src/NodeUtils.ts @@ -39,7 +39,7 @@ export class NodeUtils { return NodeUtils.getScopeOfNode(node.parentNode); } - return node; // BlockStatement of scopeNodes + return node; // blocks statement of scopeNodes } /** diff --git a/src/Obfuscator.js b/src/Obfuscator.js index 532e41d1..7364ecec 100644 --- a/src/Obfuscator.js +++ b/src/Obfuscator.js @@ -74,10 +74,10 @@ class Obfuscator { ; nodeControllerFirstPass(node, parent) { Object.defineProperty(node, 'parentNode', { - enumerable: true, configurable: true, - writable: true, - value: parent || node + enumerable: true, + value: parent || node, + writable: true }); } nodeControllerSecondPass(node, parent) { diff --git a/src/Obfuscator.ts b/src/Obfuscator.ts index a69b091a..91fb420e 100644 --- a/src/Obfuscator.ts +++ b/src/Obfuscator.ts @@ -72,11 +72,11 @@ export class Obfuscator { this.beforeObfuscation(node); estraverse.replace(node, { - enter: (node: ITreeNode, parent: ITreeNode) => this.nodeControllerFirstPass(node, parent) + enter: (node: ITreeNode, parent: ITreeNode): any => this.nodeControllerFirstPass(node, parent) }); estraverse.replace(node, { - leave: (node: ITreeNode, parent: ITreeNode) => this.nodeControllerSecondPass(node, parent) + leave: (node: ITreeNode, parent: ITreeNode): any => this.nodeControllerSecondPass(node, parent) }); this.afterObfuscation(node); @@ -129,10 +129,10 @@ export class Obfuscator { */ private nodeControllerFirstPass (node: ITreeNode, parent: ITreeNode): void { Object.defineProperty(node, 'parentNode', { - enumerable: true, configurable: true, - writable: true, - value: parent || node + enumerable: true, + value: parent || node, + writable: true }); } @@ -160,4 +160,4 @@ export class Obfuscator { new ( obfuscator(this.nodes)).obfuscateNode(node, parent); }); } -} \ No newline at end of file +} diff --git a/src/Utils.ts b/src/Utils.ts index 8ffb94e6..7d18f94d 100644 --- a/src/Utils.ts +++ b/src/Utils.ts @@ -60,8 +60,8 @@ export class Utils { * @returns {string} */ public static stringToUnicode (string: string): string { - return `'${string.replace(/[\s\S]/g, (escape) => { + return `'${string.replace(/[\s\S]/g, (escape: string): string => { return `\\u${('0000' + escape.charCodeAt(0).toString(16)).slice(-4)}`; })}'`; } -} \ No newline at end of file +} diff --git a/src/enums/AppendState.js b/src/enums/AppendState.js index b10b4290..bfeafe7d 100644 --- a/src/enums/AppendState.js +++ b/src/enums/AppendState.js @@ -1,6 +1,6 @@ "use strict"; (function (AppendState) { - AppendState[AppendState["BeforeObfuscation"] = 0] = "BeforeObfuscation"; - AppendState[AppendState["AfterObfuscation"] = 1] = "AfterObfuscation"; + AppendState[AppendState["AfterObfuscation"] = 0] = "AfterObfuscation"; + AppendState[AppendState["BeforeObfuscation"] = 1] = "BeforeObfuscation"; })(exports.AppendState || (exports.AppendState = {})); var AppendState = exports.AppendState; diff --git a/src/enums/AppendState.ts b/src/enums/AppendState.ts index 4e4a3230..321f0b44 100644 --- a/src/enums/AppendState.ts +++ b/src/enums/AppendState.ts @@ -1 +1,4 @@ -export enum AppendState {BeforeObfuscation, AfterObfuscation} \ No newline at end of file +export enum AppendState { + AfterObfuscation, + BeforeObfuscation +} diff --git a/src/interfaces/INode.ts b/src/interfaces/INode.ts index 07da0b81..1dd13899 100644 --- a/src/interfaces/INode.ts +++ b/src/interfaces/INode.ts @@ -31,4 +31,4 @@ export interface INode { setNode (node: ITreeNode): void; updateNode (): void; -} \ No newline at end of file +} diff --git a/src/interfaces/INodeObfuscator.ts b/src/interfaces/INodeObfuscator.ts index 3d3a5df0..0e7c6fc1 100644 --- a/src/interfaces/INodeObfuscator.ts +++ b/src/interfaces/INodeObfuscator.ts @@ -6,4 +6,4 @@ export interface INodeObfuscator { * @param parentNode */ obfuscateNode (node: ITreeNode, parentNode?: ITreeNode): void; -} \ No newline at end of file +} diff --git a/src/interfaces/INodesGroup.ts b/src/interfaces/INodesGroup.ts index 731e46fc..9ddd13e0 100644 --- a/src/interfaces/INodesGroup.ts +++ b/src/interfaces/INodesGroup.ts @@ -5,4 +5,4 @@ export interface INodesGroup { * @returns {Map } */ getNodes (): Map ; -} \ No newline at end of file +} diff --git a/src/interfaces/nodes/IArrowFunctionExpressionNode.ts b/src/interfaces/nodes/IArrowFunctionExpressionNode.ts index d865c43b..83b7ae93 100644 --- a/src/interfaces/nodes/IArrowFunctionExpressionNode.ts +++ b/src/interfaces/nodes/IArrowFunctionExpressionNode.ts @@ -1,3 +1,3 @@ import { IFunctionNode } from "./IFunctionNode"; -export interface IArrowFunctionExpressionNode extends IFunctionNode {} \ No newline at end of file +export interface IArrowFunctionExpressionNode extends IFunctionNode {} diff --git a/src/interfaces/nodes/IBlockStatementNode.ts b/src/interfaces/nodes/IBlockStatementNode.ts index ec7ceb59..8fb33a35 100644 --- a/src/interfaces/nodes/IBlockStatementNode.ts +++ b/src/interfaces/nodes/IBlockStatementNode.ts @@ -2,4 +2,4 @@ import { ITreeNode } from "./ITreeNode"; export interface IBlockStatementNode extends ITreeNode { body: ITreeNode[]; -} \ No newline at end of file +} diff --git a/src/interfaces/nodes/ICatchClauseNode.ts b/src/interfaces/nodes/ICatchClauseNode.ts index 702f9f69..21583ea4 100644 --- a/src/interfaces/nodes/ICatchClauseNode.ts +++ b/src/interfaces/nodes/ICatchClauseNode.ts @@ -4,4 +4,4 @@ import { ITreeNode } from "./ITreeNode"; export interface ICatchClauseNode extends ITreeNode { param: IIdentifierNode; body: ITreeNode[]; -} \ No newline at end of file +} diff --git a/src/interfaces/nodes/IFunctionDeclarationNode.ts b/src/interfaces/nodes/IFunctionDeclarationNode.ts index 45f1b108..bbe63c66 100644 --- a/src/interfaces/nodes/IFunctionDeclarationNode.ts +++ b/src/interfaces/nodes/IFunctionDeclarationNode.ts @@ -1,3 +1,3 @@ import { IFunctionNode } from "./IFunctionNode"; -export interface IFunctionDeclarationNode extends IFunctionNode {} \ No newline at end of file +export interface IFunctionDeclarationNode extends IFunctionNode {} diff --git a/src/interfaces/nodes/IFunctionExpressionNode.ts b/src/interfaces/nodes/IFunctionExpressionNode.ts index 2729369f..96e85013 100644 --- a/src/interfaces/nodes/IFunctionExpressionNode.ts +++ b/src/interfaces/nodes/IFunctionExpressionNode.ts @@ -1,3 +1,3 @@ import { IFunctionNode } from "./IFunctionNode"; -export interface IFunctionExpressionNode extends IFunctionNode {} \ No newline at end of file +export interface IFunctionExpressionNode extends IFunctionNode {} diff --git a/src/interfaces/nodes/IFunctionNode.ts b/src/interfaces/nodes/IFunctionNode.ts index 8db65193..78cce8b4 100644 --- a/src/interfaces/nodes/IFunctionNode.ts +++ b/src/interfaces/nodes/IFunctionNode.ts @@ -7,4 +7,4 @@ export interface IFunctionNode extends ITreeNode { body: ITreeNode[]; generator: boolean; expression: boolean; -} \ No newline at end of file +} diff --git a/src/interfaces/nodes/IIdentifierNode.ts b/src/interfaces/nodes/IIdentifierNode.ts index 12fe53ca..d5fb6365 100644 --- a/src/interfaces/nodes/IIdentifierNode.ts +++ b/src/interfaces/nodes/IIdentifierNode.ts @@ -2,4 +2,4 @@ import { ITreeNode } from "./ITreeNode"; export interface IIdentifierNode extends ITreeNode{ name: string; -} \ No newline at end of file +} diff --git a/src/interfaces/nodes/ILiteralNode.ts b/src/interfaces/nodes/ILiteralNode.ts index 0da89adf..e2f0bb03 100644 --- a/src/interfaces/nodes/ILiteralNode.ts +++ b/src/interfaces/nodes/ILiteralNode.ts @@ -4,4 +4,4 @@ export interface ILiteralNode extends ITreeNode { value: boolean|number|string; raw: string; 'x-verbatim-property': any; -} \ No newline at end of file +} diff --git a/src/interfaces/nodes/IMemberExpressionNode.ts b/src/interfaces/nodes/IMemberExpressionNode.ts index c0365be1..a1de5375 100644 --- a/src/interfaces/nodes/IMemberExpressionNode.ts +++ b/src/interfaces/nodes/IMemberExpressionNode.ts @@ -6,4 +6,4 @@ export interface IMemberExpressionNode extends ITreeNode { computed: boolean; object: IIdentifierNode; property: IIdentifierNode|ILiteralNode; -} \ No newline at end of file +} diff --git a/src/interfaces/nodes/IMethodDefinitionNode.ts b/src/interfaces/nodes/IMethodDefinitionNode.ts index 4598d2bc..b428829e 100644 --- a/src/interfaces/nodes/IMethodDefinitionNode.ts +++ b/src/interfaces/nodes/IMethodDefinitionNode.ts @@ -9,4 +9,4 @@ export interface IMethodDefinitionNode extends ITreeNode { value: IFunctionExpressionNode; kind: string; static: boolean; -} \ No newline at end of file +} diff --git a/src/interfaces/nodes/IObjectExpressionNode.ts b/src/interfaces/nodes/IObjectExpressionNode.ts index 393f206d..71c511a7 100644 --- a/src/interfaces/nodes/IObjectExpressionNode.ts +++ b/src/interfaces/nodes/IObjectExpressionNode.ts @@ -3,4 +3,4 @@ import { ITreeNode } from "./ITreeNode"; export interface IObjectExpressionNode extends ITreeNode { properties: IPropertyNode[]; -} \ No newline at end of file +} diff --git a/src/interfaces/nodes/IProgramNode.ts b/src/interfaces/nodes/IProgramNode.ts index 7a4c338a..b845f6c1 100644 --- a/src/interfaces/nodes/IProgramNode.ts +++ b/src/interfaces/nodes/IProgramNode.ts @@ -2,4 +2,4 @@ import { ITreeNode } from "./ITreeNode"; export interface IProgramNode extends ITreeNode { body: ITreeNode[]; -} \ No newline at end of file +} diff --git a/src/interfaces/nodes/IPropertyNode.ts b/src/interfaces/nodes/IPropertyNode.ts index 1ab5914f..3fcfef6e 100644 --- a/src/interfaces/nodes/IPropertyNode.ts +++ b/src/interfaces/nodes/IPropertyNode.ts @@ -9,4 +9,4 @@ export interface IPropertyNode extends ITreeNode { kind: string; method: boolean; shorthand: boolean; -} \ No newline at end of file +} diff --git a/src/interfaces/nodes/ITreeNode.ts b/src/interfaces/nodes/ITreeNode.ts index 996e1f66..afc710bb 100644 --- a/src/interfaces/nodes/ITreeNode.ts +++ b/src/interfaces/nodes/ITreeNode.ts @@ -1,4 +1,4 @@ export interface ITreeNode { type: string; parentNode?: ITreeNode; -} \ No newline at end of file +} diff --git a/src/interfaces/nodes/IVariableDeclarationNode.ts b/src/interfaces/nodes/IVariableDeclarationNode.ts index 71b29a01..d51bde9f 100644 --- a/src/interfaces/nodes/IVariableDeclarationNode.ts +++ b/src/interfaces/nodes/IVariableDeclarationNode.ts @@ -4,4 +4,4 @@ import { IVariableDeclaratorNode } from "./IVariableDeclaratorNode"; export interface IVariableDeclarationNode extends ITreeNode { declarations: IVariableDeclaratorNode[]; kind: string; -} \ No newline at end of file +} diff --git a/src/interfaces/nodes/IVariableDeclaratorNode.ts b/src/interfaces/nodes/IVariableDeclaratorNode.ts index 6f4768af..08bb7a0e 100644 --- a/src/interfaces/nodes/IVariableDeclaratorNode.ts +++ b/src/interfaces/nodes/IVariableDeclaratorNode.ts @@ -4,4 +4,4 @@ import { ITreeNode } from "./ITreeNode"; export interface IVariableDeclaratorNode extends ITreeNode { id: IIdentifierNode; init: any; -} \ No newline at end of file +} diff --git a/src/node-groups/NodesGroup.ts b/src/node-groups/NodesGroup.ts index 9127ca9f..2fab2e35 100644 --- a/src/node-groups/NodesGroup.ts +++ b/src/node-groups/NodesGroup.ts @@ -14,4 +14,4 @@ export abstract class NodesGroup implements INodesGroup { public getNodes (): Map { return this.nodes; } -} \ No newline at end of file +} diff --git a/src/node-groups/UnicodeArrayNodesGroup.ts b/src/node-groups/UnicodeArrayNodesGroup.ts index a032c4d7..e337a0e7 100644 --- a/src/node-groups/UnicodeArrayNodesGroup.ts +++ b/src/node-groups/UnicodeArrayNodesGroup.ts @@ -49,6 +49,6 @@ export class UnicodeArrayNodesGroup extends NodesGroup { unicodeArrayRotateValue ) ] - ]) + ]); } -} \ No newline at end of file +} diff --git a/src/node-obfuscators/CatchClauseObfuscator.ts b/src/node-obfuscators/CatchClauseObfuscator.ts index 38a03244..7455de18 100644 --- a/src/node-obfuscators/CatchClauseObfuscator.ts +++ b/src/node-obfuscators/CatchClauseObfuscator.ts @@ -34,7 +34,7 @@ export class CatchClauseObfuscator extends NodeObfuscator { */ private replaceCatchClauseParam (catchClauseNode: ICatchClauseNode): void { estraverse.replace(catchClauseNode.param, { - leave: (node: ITreeNode, parentNode: ITreeNode) => { + leave: (node: ITreeNode, parentNode: ITreeNode): any => { if (NodeUtils.isIdentifierNode(node)) { this.catchClauseParam.set(node.name, Utils.getRandomVariableName()); node.name = this.catchClauseParam.get(node.name); @@ -52,7 +52,7 @@ export class CatchClauseObfuscator extends NodeObfuscator { */ private replaceCatchClauseParamInBlock (catchClauseNode: ICatchClauseNode): void { estraverse.replace(catchClauseNode.body, { - leave: (node: ITreeNode, parentNode: ITreeNode) => { + leave: (node: ITreeNode, parentNode: ITreeNode): any => { this.replaceNodeIdentifierByNewValue(node, parentNode, this.catchClauseParam); } }); diff --git a/src/node-obfuscators/FunctionDeclarationObfuscator.ts b/src/node-obfuscators/FunctionDeclarationObfuscator.ts index b7570c63..31da9dd6 100644 --- a/src/node-obfuscators/FunctionDeclarationObfuscator.ts +++ b/src/node-obfuscators/FunctionDeclarationObfuscator.ts @@ -40,7 +40,7 @@ export class FunctionDeclarationObfuscator extends NodeObfuscator { */ private replaceFunctionName (functionDeclarationNode: IFunctionDeclarationNode): void { estraverse.replace(functionDeclarationNode.id, { - leave: (node: ITreeNode) => { + leave: (node: ITreeNode): any => { if (NodeUtils.isIdentifierNode(node)) { this.functionName.set(node.name, Utils.getRandomVariableName()); node.name = this.functionName.get(node.name); @@ -62,9 +62,9 @@ export class FunctionDeclarationObfuscator extends NodeObfuscator { ); estraverse.replace(scopeNode, { - enter: (node: ITreeNode, parentNode: ITreeNode) => { + enter: (node: ITreeNode, parentNode: ITreeNode): any => { this.replaceNodeIdentifierByNewValue(node, parentNode, this.functionName); } }); } -} \ No newline at end of file +} diff --git a/src/node-obfuscators/FunctionObfuscator.ts b/src/node-obfuscators/FunctionObfuscator.ts index 92c77cf5..cfa59ba4 100644 --- a/src/node-obfuscators/FunctionObfuscator.ts +++ b/src/node-obfuscators/FunctionObfuscator.ts @@ -33,9 +33,9 @@ export class FunctionObfuscator extends NodeObfuscator { * @param functionNode */ private replaceFunctionParams (functionNode: IFunctionNode): void { - functionNode.params.forEach((paramsNode) => { + functionNode.params.forEach((paramsNode: ITreeNode) => { estraverse.replace(paramsNode, { - leave: (node: ITreeNode) => { + leave: (node: ITreeNode): any => { if (NodeUtils.isIdentifierNode(node)) { this.functionParams.set(node.name, Utils.getRandomVariableName()); node.name = this.functionParams.get(node.name); @@ -54,9 +54,9 @@ export class FunctionObfuscator extends NodeObfuscator { */ private replaceFunctionParamsInBody (functionNode: IFunctionNode): void { estraverse.replace(functionNode.body, { - leave: (node: ITreeNode, parentNode: ITreeNode) => { + leave: (node: ITreeNode, parentNode: ITreeNode): any => { this.replaceNodeIdentifierByNewValue(node, parentNode, this.functionParams); } }); } -} \ No newline at end of file +} diff --git a/src/node-obfuscators/LiteralObfuscator.js b/src/node-obfuscators/LiteralObfuscator.js index 425ed514..774979cf 100644 --- a/src/node-obfuscators/LiteralObfuscator.js +++ b/src/node-obfuscators/LiteralObfuscator.js @@ -17,6 +17,8 @@ class LiteralObfuscator extends NodeObfuscator_1.NodeObfuscator { precedence: escodegen.Precedence.Primary }; break; + default: + break; } } } diff --git a/src/node-obfuscators/LiteralObfuscator.ts b/src/node-obfuscators/LiteralObfuscator.ts index 284cbe89..2a28bf52 100644 --- a/src/node-obfuscators/LiteralObfuscator.ts +++ b/src/node-obfuscators/LiteralObfuscator.ts @@ -28,6 +28,9 @@ export class LiteralObfuscator extends NodeObfuscator { }; break; + + default: + break; } } -} \ No newline at end of file +} diff --git a/src/node-obfuscators/MemberExpressionObfuscator.js b/src/node-obfuscators/MemberExpressionObfuscator.js index 1c421a4e..cd68cbd2 100644 --- a/src/node-obfuscators/MemberExpressionObfuscator.js +++ b/src/node-obfuscators/MemberExpressionObfuscator.js @@ -23,13 +23,13 @@ class MemberExpressionObfuscator extends NodeObfuscator_1.NodeObfuscator { } identifierNodeController(node) { let nodeValue = node.name, literalNode = { - type: 'Literal', - value: nodeValue, raw: `'${nodeValue}'`, 'x-verbatim-property': { content: this.replaceLiteralStringByArrayElement(nodeValue), precedence: escodegen.Precedence.Primary - } + }, + type: 'Literal', + value: nodeValue }; delete node.name; Object.assign(node, literalNode); @@ -45,6 +45,8 @@ class MemberExpressionObfuscator extends NodeObfuscator_1.NodeObfuscator { precedence: escodegen.Precedence.Primary }; break; + default: + break; } } } diff --git a/src/node-obfuscators/MemberExpressionObfuscator.ts b/src/node-obfuscators/MemberExpressionObfuscator.ts index d6f2d372..df2ebae9 100644 --- a/src/node-obfuscators/MemberExpressionObfuscator.ts +++ b/src/node-obfuscators/MemberExpressionObfuscator.ts @@ -6,7 +6,7 @@ import { ILiteralNode } from "../interfaces/nodes/ILiteralNode"; import { IMemberExpressionNode } from "../interfaces/nodes/IMemberExpressionNode"; import { ITreeNode } from "../interfaces/nodes/ITreeNode"; -import { NodeObfuscator } from './NodeObfuscator' +import { NodeObfuscator } from './NodeObfuscator'; import { NodeUtils } from "../NodeUtils"; export class MemberExpressionObfuscator extends NodeObfuscator { @@ -15,7 +15,7 @@ export class MemberExpressionObfuscator extends NodeObfuscator { */ public obfuscateNode (memberExpressionNode: IMemberExpressionNode): void { estraverse.replace(memberExpressionNode.property, { - leave: (node: ITreeNode, parentNode: ITreeNode) => { + leave: (node: ITreeNode, parentNode: ITreeNode): any => { if (NodeUtils.isLiteralNode(node)) { this.literalNodeController(node); @@ -49,13 +49,13 @@ export class MemberExpressionObfuscator extends NodeObfuscator { private identifierNodeController (node: IIdentifierNode): void { let nodeValue: string = node.name, literalNode: ILiteralNode = { - type: 'Literal', - value: nodeValue, raw: `'${nodeValue}'`, 'x-verbatim-property': { content : this.replaceLiteralStringByArrayElement(nodeValue), precedence: escodegen.Precedence.Primary - } + }, + type: 'Literal', + value: nodeValue }; delete node.name; @@ -85,6 +85,9 @@ export class MemberExpressionObfuscator extends NodeObfuscator { }; break; + + default: + break; } } -} \ No newline at end of file +} diff --git a/src/node-obfuscators/MethodDefinitionObfuscator.js b/src/node-obfuscators/MethodDefinitionObfuscator.js index 1f0523fb..c84d38ff 100644 --- a/src/node-obfuscators/MethodDefinitionObfuscator.js +++ b/src/node-obfuscators/MethodDefinitionObfuscator.js @@ -18,6 +18,7 @@ class MethodDefinitionObfuscator extends NodeObfuscator_1.NodeObfuscator { methodDefinitionNode.computed === false) { methodDefinitionNode.computed = true; node.name = this.replaceLiteralStringByArrayElement(node.name); + return; } return estraverse.VisitorOption.Skip; } diff --git a/src/node-obfuscators/MethodDefinitionObfuscator.ts b/src/node-obfuscators/MethodDefinitionObfuscator.ts index db287f3b..960cda06 100644 --- a/src/node-obfuscators/MethodDefinitionObfuscator.ts +++ b/src/node-obfuscators/MethodDefinitionObfuscator.ts @@ -34,7 +34,7 @@ export class MethodDefinitionObfuscator extends NodeObfuscator { */ private replaceMethodName (methodDefinitionNode: IMethodDefinitionNode): void { estraverse.replace(methodDefinitionNode.key, { - leave: (node: ITreeNode) => { + leave: (node: ITreeNode): any => { if ( NodeUtils.isIdentifierNode(node) && this.ignoredNames.indexOf(node.name) < 0 && @@ -42,10 +42,12 @@ export class MethodDefinitionObfuscator extends NodeObfuscator { ) { methodDefinitionNode.computed = true; node.name = this.replaceLiteralStringByArrayElement(node.name); + + return; } return estraverse.VisitorOption.Skip; } }); } -} \ No newline at end of file +} diff --git a/src/node-obfuscators/NodeObfuscator.ts b/src/node-obfuscators/NodeObfuscator.ts index cc8c3c73..93b725de 100644 --- a/src/node-obfuscators/NodeObfuscator.ts +++ b/src/node-obfuscators/NodeObfuscator.ts @@ -29,7 +29,7 @@ export abstract class NodeObfuscator implements INodeObfuscator { * @param parentNode * @param namesMap */ - protected replaceNodeIdentifierByNewValue (node: ITreeNode, parentNode: ITreeNode, namesMap: Map ) { + protected replaceNodeIdentifierByNewValue (node: ITreeNode, parentNode: ITreeNode, namesMap: Map ): void { if (NodeUtils.isIdentifierNode(node) && namesMap.has(node.name)) { if ( (NodeUtils.isPropertyNode(parentNode) && parentNode.key === node) || @@ -61,4 +61,4 @@ export abstract class NodeObfuscator implements INodeObfuscator { return `${this.nodes.get('unicodeArrayNode').getNodeIdentifier()}[${index}]`; } -} \ No newline at end of file +} diff --git a/src/node-obfuscators/ObjectExpressionObfuscator.js b/src/node-obfuscators/ObjectExpressionObfuscator.js index 9aa2bdda..5594d6b7 100644 --- a/src/node-obfuscators/ObjectExpressionObfuscator.js +++ b/src/node-obfuscators/ObjectExpressionObfuscator.js @@ -31,17 +31,19 @@ class ObjectExpressionObfuscator extends NodeObfuscator_1.NodeObfuscator { precedence: escodegen.Precedence.Primary }; break; + default: + break; } } identifierNodeController(node) { let nodeValue = node.name, literalNode = { - type: 'Literal', - value: nodeValue, raw: `'${nodeValue}'`, 'x-verbatim-property': { content: Utils_1.Utils.stringToUnicode(nodeValue), precedence: escodegen.Precedence.Primary - } + }, + type: 'Literal', + value: nodeValue }; delete node.name; Object.assign(node, literalNode); diff --git a/src/node-obfuscators/ObjectExpressionObfuscator.ts b/src/node-obfuscators/ObjectExpressionObfuscator.ts index 52d9c1de..4fab5d30 100644 --- a/src/node-obfuscators/ObjectExpressionObfuscator.ts +++ b/src/node-obfuscators/ObjectExpressionObfuscator.ts @@ -6,9 +6,10 @@ import { ILiteralNode } from "../interfaces/nodes/ILiteralNode"; import { IObjectExpressionNode } from "../interfaces/nodes/IObjectExpressionNode"; import { ITreeNode } from "../interfaces/nodes/ITreeNode"; -import { NodeObfuscator } from './NodeObfuscator' +import { NodeObfuscator } from './NodeObfuscator'; import { NodeUtils } from "../NodeUtils"; import { Utils } from '../Utils'; +import {IPropertyNode} from "../interfaces/nodes/IPropertyNode"; /** * replaces: @@ -25,9 +26,9 @@ export class ObjectExpressionObfuscator extends NodeObfuscator { * @param objectExpressionNode */ public obfuscateNode (objectExpressionNode: IObjectExpressionNode): void { - objectExpressionNode.properties.forEach((property) => { + objectExpressionNode.properties.forEach((property: IPropertyNode) => { estraverse.replace(property.key, { - leave: (node: ITreeNode, parentNode: ITreeNode) => { + leave: (node: ITreeNode, parentNode: ITreeNode): any => { if (NodeUtils.isLiteralNode(node)) { this.literalNodeController(node); @@ -58,6 +59,9 @@ export class ObjectExpressionObfuscator extends NodeObfuscator { }; break; + + default: + break; } } @@ -67,17 +71,17 @@ export class ObjectExpressionObfuscator extends NodeObfuscator { private identifierNodeController (node: IIdentifierNode): void { let nodeValue: string = node.name, literalNode: ILiteralNode = { - type: 'Literal', - value: nodeValue, raw: `'${nodeValue}'`, 'x-verbatim-property': { content : Utils.stringToUnicode(nodeValue), precedence: escodegen.Precedence.Primary - } + }, + type: 'Literal', + value: nodeValue }; delete node.name; Object.assign(node, literalNode); } -} \ No newline at end of file +} diff --git a/src/node-obfuscators/VariableDeclarationObfuscator.ts b/src/node-obfuscators/VariableDeclarationObfuscator.ts index 02eeec7c..700932ed 100644 --- a/src/node-obfuscators/VariableDeclarationObfuscator.ts +++ b/src/node-obfuscators/VariableDeclarationObfuscator.ts @@ -41,12 +41,12 @@ export class VariableDeclarationObfuscator extends NodeObfuscator { * @param variableDeclarationNode */ private replaceVariableName (variableDeclarationNode: IVariableDeclarationNode): void { - variableDeclarationNode.declarations.forEach((declarationNode) => { + variableDeclarationNode.declarations.forEach((declarationNode: ITreeNode) => { estraverse.replace(declarationNode, { - enter: (node: ITreeNode) => { + enter: (node: ITreeNode): any => { if (NodeUtils.isVariableDeclaratorNode(node)) { estraverse.replace(node.id, { - enter: (node: IIdentifierNode) => { + enter: (node: IIdentifierNode): any => { this.variableNames.set(node.name, Utils.getRandomVariableName()); node.name = this.variableNames.get(node.name); } @@ -75,7 +75,7 @@ export class VariableDeclarationObfuscator extends NodeObfuscator { let isNodeAfterVariableDeclaratorFlag: boolean = false; estraverse.replace(scopeNode, { - enter: (node: ITreeNode, parentNode: ITreeNode) => { + enter: (node: ITreeNode, parentNode: ITreeNode): any => { const functionNodes: string[] = [ 'ArrowFunctionExpression', 'FunctionDeclaration', @@ -84,7 +84,7 @@ export class VariableDeclarationObfuscator extends NodeObfuscator { if (functionNodes.indexOf(node.type) >= 0) { estraverse.replace(node, { - enter: (node: ITreeNode, parentNode: ITreeNode) => { + enter: (node: ITreeNode, parentNode: ITreeNode): any => { this.replaceNodeIdentifierByNewValue(node, parentNode, this.variableNames); } }); diff --git a/src/nodes/UnicodeArrayNode.js b/src/nodes/UnicodeArrayNode.js index 4b5d890c..26a54dea 100644 --- a/src/nodes/UnicodeArrayNode.js +++ b/src/nodes/UnicodeArrayNode.js @@ -21,6 +21,8 @@ class UnicodeArrayNode extends Node_1.Node { case 'Program': node.body.unshift(this.getNode()); break; + default: + break; } } }); diff --git a/src/nodes/UnicodeArrayNode.ts b/src/nodes/UnicodeArrayNode.ts index 6dbe58da..b18cfc7b 100644 --- a/src/nodes/UnicodeArrayNode.ts +++ b/src/nodes/UnicodeArrayNode.ts @@ -20,6 +20,11 @@ export class UnicodeArrayNode extends Node { */ protected appendState: AppendState = AppendState.AfterObfuscation; + /** + * @type {ITreeNode} + */ + protected node: ITreeNode; + /** * @type {ITreeNode} */ @@ -40,11 +45,6 @@ export class UnicodeArrayNode extends Node { */ private unicodeArrayRotateValue: number; - /** - * @type {ITreeNode} - */ - protected node: ITreeNode; - /** * @param astTree * @param unicodeArrayName @@ -61,12 +61,15 @@ export class UnicodeArrayNode extends Node { public appendNode (): void { estraverse.replace(this.astTree, { - leave: (node: ITreeNode, parent: ITreeNode) => { + leave: (node: ITreeNode, parent: ITreeNode): any => { switch (node.type) { case 'Program': (node).body.unshift(this.getNode()); break; + + default: + break; } } }); @@ -112,7 +115,7 @@ export class UnicodeArrayNode extends Node { }, 'init': { 'type': 'ArrayExpression', - 'elements': this.unicodeArray.map((value) => { + 'elements': this.unicodeArray.map((value: string) => { return { 'type': 'Literal', 'value': value, @@ -129,4 +132,4 @@ export class UnicodeArrayNode extends Node { 'kind': 'var' }; } -} \ No newline at end of file +} diff --git a/src/nodes/UnicodeArrayRotateFunctionCallNode.js b/src/nodes/UnicodeArrayRotateFunctionCallNode.js index 93331686..e279891c 100644 --- a/src/nodes/UnicodeArrayRotateFunctionCallNode.js +++ b/src/nodes/UnicodeArrayRotateFunctionCallNode.js @@ -17,6 +17,8 @@ class UnicodeArrayRotateFunctionCallNode extends Node_1.Node { case 'Program': node.body.unshift(this.getNode()); break; + default: + break; } } }); diff --git a/src/nodes/UnicodeArrayRotateFunctionCallNode.ts b/src/nodes/UnicodeArrayRotateFunctionCallNode.ts index b6049908..feb90f99 100644 --- a/src/nodes/UnicodeArrayRotateFunctionCallNode.ts +++ b/src/nodes/UnicodeArrayRotateFunctionCallNode.ts @@ -6,6 +6,11 @@ import { ITreeNode } from "../interfaces/nodes/ITreeNode"; import { Node } from './Node'; export class UnicodeArrayRotateFunctionCallNode extends Node { + /** + * @type {ITreeNode} + */ + protected node: ITreeNode; + /** * @type {ITreeNode} */ @@ -26,11 +31,6 @@ export class UnicodeArrayRotateFunctionCallNode extends Node { */ private unicodeArrayRotateFunctionName: string; - /** - * @type {ITreeNode} - */ - protected node: ITreeNode; - /** * @param astTree * @param unicodeArrayRotateFunctionName @@ -54,12 +54,15 @@ export class UnicodeArrayRotateFunctionCallNode extends Node { public appendNode (): void { estraverse.replace(this.astTree, { - leave: (node: ITreeNode, parent: ITreeNode) => { + leave: (node: ITreeNode, parent: ITreeNode): any => { switch (node.type) { case 'Program': (node).body.unshift(this.getNode()); break; + + default: + break; } } }); @@ -96,4 +99,4 @@ export class UnicodeArrayRotateFunctionCallNode extends Node { } }; } -} \ No newline at end of file +} diff --git a/src/nodes/UnicodeArrayRotateFunctionNode.js b/src/nodes/UnicodeArrayRotateFunctionNode.js index 792df0f6..17bc0634 100644 --- a/src/nodes/UnicodeArrayRotateFunctionNode.js +++ b/src/nodes/UnicodeArrayRotateFunctionNode.js @@ -17,6 +17,8 @@ class UnicodeArrayRotateFunctionNode extends Node_1.Node { case 'Program': node.body.push(this.getNode()); break; + default: + break; } } }); diff --git a/src/nodes/UnicodeArrayRotateFunctionNode.ts b/src/nodes/UnicodeArrayRotateFunctionNode.ts index 87b77132..b4cc111e 100644 --- a/src/nodes/UnicodeArrayRotateFunctionNode.ts +++ b/src/nodes/UnicodeArrayRotateFunctionNode.ts @@ -7,6 +7,11 @@ import { Node } from './Node'; import { Utils } from '../Utils'; export class UnicodeArrayRotateFunctionNode extends Node { + /** + * @type {ITreeNode} + */ + protected node: ITreeNode; + /** * @type {ITreeNode} */ @@ -21,11 +26,6 @@ export class UnicodeArrayRotateFunctionNode extends Node { */ private unicodeArrayRotateFunctionName: string; - /** - * @type {ITreeNode} - */ - protected node: ITreeNode; - /** * @param astTree * @param unicodeArrayRotateFunctionName @@ -46,12 +46,15 @@ export class UnicodeArrayRotateFunctionNode extends Node { public appendNode (): void { estraverse.replace(this.astTree, { - leave: (node: ITreeNode, parent: ITreeNode) => { + leave: (node: ITreeNode, parent: ITreeNode): any => { switch (node.type) { case 'Program': (node).body.push(this.getNode()); break; + + default: + break; } } }); @@ -307,4 +310,4 @@ export class UnicodeArrayRotateFunctionNode extends Node { 'expression': false }; } -} \ No newline at end of file +} diff --git a/tslint.json b/tslint.json new file mode 100644 index 00000000..d313255e --- /dev/null +++ b/tslint.json @@ -0,0 +1,153 @@ +{ + "rules": { + "align": [ + true, + "parameters", + "arguments", + "statements" + ], + "ban": [ + true, + [ "_", "forEach" ], + [ "_", "each" ], + [ "$", "each" ], + [ "angular", "forEach" ] + ], + "class-name": true, + "comment-format": [ + true, + "check-space", + "check-lowercase" + ], + "curly": true, + "eofline": true, + "forin": true, + "indent": [ + true, + "spaces" + ], + "interface-name": [ + true, + "always-prefix" + ], + "jsdoc-format": true, + "label-position": true, + "label-undefined": true, + "max-line-length": [ + true, + 140 + ], + "member-access": true, + "member-ordering": [ + true, + { "order": "fields-first" } + ], + "new-parens": true, + "no-angle-bracket-type-assertion": false, + "no-any": false, + "no-arg": true, + "no-bitwise": true, + "no-conditional-assignment": true, + "no-consecutive-blank-lines": false, + "no-console": [ + true, + "debug", + "info", + "time", + "timeEnd", + "trace" + ], + "no-construct": true, + "no-constructor-vars": true, + "no-debugger": true, + "no-default-export": true, + "no-duplicate-key": true, + "no-duplicate-variable": true, + "no-empty": false, + "no-eval": true, + "no-inferrable-types": false, + "no-internal-module": true, + "no-invalid-this": [ + true, + "check-function-in-method" + ], + "no-null-keyword": false, + "no-reference": true, + "no-require-imports": true, + "no-shadowed-variable": false, + "no-string-literal": false, + "no-switch-case-fall-through": true, + "no-trailing-whitespace": false, + "no-unreachable": true, + "no-unused-expression": true, + "no-unused-variable": true, + "no-use-before-declare": true, + "no-var-keyword": true, + "no-var-requires": true, + "object-literal-sort-keys": true, + "one-line": [ + true, + "check-open-brace", + "check-catch", + "check-else", + "check-finally", + "check-whitespace" + ], + "one-variable-per-declaration": false, + "quotemark": false, + "radix": true, + "semicolon": [true, "always"], + "switch-default": true, + "trailing-comma": false, + "triple-equals": [ + true, + "allow-null-check", + "allow-undefined-check" + ], + "typedef": [ + true, + "call-signature", + "parameter", + "arrow-parameter", + "property-declaration", + "variable-declaration", + "member-variable-declaration" + ], + "typedef-whitespace": [ + true, + { + "call-signature": "nospace", + "index-signature": "nospace", + "parameter": "nospace", + "property-declaration": "nospace", + "variable-declaration": "nospace" + }, + { + "call-signature": "space", + "index-signature": "space", + "parameter": "space", + "property-declaration": "space", + "variable-declaration": "space" + } + ], + "use-isnan": true, + "use-strict": [ + true, + "check-module", + "check-function" + ], + "variable-name": [ + true, + "check-format", + "allow-leading-underscore" + ], + "whitespace": [ + true, + "check-branch", + "check-decl", + "check-operator", + "check-separator", + "check-type" + ] + } +} \ No newline at end of file