Forráskód Böngészése

reservedNames option base implementation

sanex3339 9 éve
szülő
commit
5e9b1c0931

+ 1 - 1
dist/src/node-obfuscators/CatchClauseObfuscator.js

@@ -15,7 +15,7 @@ class CatchClauseObfuscator extends NodeObfuscator_1.NodeObfuscator {
     replaceCatchClauseParam(catchClauseNode) {
     replaceCatchClauseParam(catchClauseNode) {
         estraverse.replace(catchClauseNode.param, {
         estraverse.replace(catchClauseNode.param, {
             leave: (node, parentNode) => {
             leave: (node, parentNode) => {
-                if (NodeUtils_1.NodeUtils.isIdentifierNode(node)) {
+                if (NodeUtils_1.NodeUtils.isIdentifierNode(node) && !this.isReservedName(node.name)) {
                     this.catchClauseParam.set(node.name, Utils_1.Utils.getRandomVariableName());
                     this.catchClauseParam.set(node.name, Utils_1.Utils.getRandomVariableName());
                     node.name = this.catchClauseParam.get(node.name);
                     node.name = this.catchClauseParam.get(node.name);
                     return;
                     return;

+ 1 - 1
dist/src/node-obfuscators/FunctionDeclarationObfuscator.js

@@ -19,7 +19,7 @@ class FunctionDeclarationObfuscator extends NodeObfuscator_1.NodeObfuscator {
     replaceFunctionName(functionDeclarationNode) {
     replaceFunctionName(functionDeclarationNode) {
         estraverse.replace(functionDeclarationNode.id, {
         estraverse.replace(functionDeclarationNode.id, {
             leave: (node) => {
             leave: (node) => {
-                if (NodeUtils_1.NodeUtils.isIdentifierNode(node)) {
+                if (NodeUtils_1.NodeUtils.isIdentifierNode(node) && !this.isReservedName(node.name)) {
                     this.functionName.set(node.name, Utils_1.Utils.getRandomVariableName());
                     this.functionName.set(node.name, Utils_1.Utils.getRandomVariableName());
                     node.name = this.functionName.get(node.name);
                     node.name = this.functionName.get(node.name);
                     return;
                     return;

+ 1 - 1
dist/src/node-obfuscators/FunctionObfuscator.js

@@ -16,7 +16,7 @@ class FunctionObfuscator extends NodeObfuscator_1.NodeObfuscator {
         functionNode.params.forEach((paramsNode) => {
         functionNode.params.forEach((paramsNode) => {
             estraverse.replace(paramsNode, {
             estraverse.replace(paramsNode, {
                 leave: (node) => {
                 leave: (node) => {
-                    if (NodeUtils_1.NodeUtils.isIdentifierNode(node)) {
+                    if (NodeUtils_1.NodeUtils.isIdentifierNode(node) && !this.isReservedName(node.name)) {
                         this.functionParams.set(node.name, Utils_1.Utils.getRandomVariableName());
                         this.functionParams.set(node.name, Utils_1.Utils.getRandomVariableName());
                         node.name = this.functionParams.get(node.name);
                         node.name = this.functionParams.get(node.name);
                         return;
                         return;

+ 5 - 0
dist/src/node-obfuscators/NodeObfuscator.js

@@ -7,6 +7,11 @@ class NodeObfuscator {
         this.nodes = nodes;
         this.nodes = nodes;
         this.options = options;
         this.options = options;
     }
     }
+    isReservedName(name) {
+        return this.options['reservedNames'].some((reservedName) => {
+            return reservedName === name;
+        });
+    }
     replaceNodeIdentifierByNewValue(node, parentNode, namesMap) {
     replaceNodeIdentifierByNewValue(node, parentNode, namesMap) {
         if (NodeUtils_1.NodeUtils.isIdentifierNode(node) && namesMap.has(node.name)) {
         if (NodeUtils_1.NodeUtils.isIdentifierNode(node) && namesMap.has(node.name)) {
             const parentNodeIsAPropertyNode = (NodeUtils_1.NodeUtils.isPropertyNode(parentNode) &&
             const parentNodeIsAPropertyNode = (NodeUtils_1.NodeUtils.isPropertyNode(parentNode) &&

+ 1 - 1
dist/src/node-obfuscators/VariableDeclarationObfuscator.js

@@ -20,7 +20,7 @@ class VariableDeclarationObfuscator extends NodeObfuscator_1.NodeObfuscator {
         variableDeclarationNode.declarations.forEach((declarationNode) => {
         variableDeclarationNode.declarations.forEach((declarationNode) => {
             estraverse.replace(declarationNode.id, {
             estraverse.replace(declarationNode.id, {
                 enter: (node) => {
                 enter: (node) => {
-                    if (NodeUtils_1.NodeUtils.isIdentifierNode(node)) {
+                    if (NodeUtils_1.NodeUtils.isIdentifierNode(node) && !this.isReservedName(node.name)) {
                         this.variableNames.set(node.name, Utils_1.Utils.getRandomVariableName());
                         this.variableNames.set(node.name, Utils_1.Utils.getRandomVariableName());
                         node.name = this.variableNames.get(node.name);
                         node.name = this.variableNames.get(node.name);
                         return;
                         return;

+ 1 - 0
dist/src/preset-options/DefaultPreset.js

@@ -4,6 +4,7 @@ exports.DEFAULT_PRESET = Object.freeze({
     debugProtection: false,
     debugProtection: false,
     debugProtectionInterval: false,
     debugProtectionInterval: false,
     disableConsoleOutput: true,
     disableConsoleOutput: true,
+    reservedNames: [],
     rotateUnicodeArray: true,
     rotateUnicodeArray: true,
     encodeUnicodeLiterals: false,
     encodeUnicodeLiterals: false,
     unicodeArray: true,
     unicodeArray: true,

+ 1 - 0
dist/src/preset-options/NoCustomNodesPreset.js

@@ -4,6 +4,7 @@ exports.NO_CUSTOM_NODES_PRESET = Object.freeze({
     debugProtection: false,
     debugProtection: false,
     debugProtectionInterval: false,
     debugProtectionInterval: false,
     disableConsoleOutput: false,
     disableConsoleOutput: false,
+    reservedNames: [],
     rotateUnicodeArray: false,
     rotateUnicodeArray: false,
     encodeUnicodeLiterals: false,
     encodeUnicodeLiterals: false,
     unicodeArray: false,
     unicodeArray: false,

+ 5 - 0
readme.md

@@ -101,6 +101,11 @@ This option can slightly slowdown your code speed.
 All strings in unicode array becomes encoded in Base64.
 All strings in unicode array becomes encoded in Base64.
 To decode strings, special function will inserted on page under `unicodeArray` node.
 To decode strings, special function will inserted on page under `unicodeArray` node.
 
 
+####reservedNames
+Type: `string[]` Default: `[]`
+
+Disable obfuscation of given variable names, function names and names of function parameters.
+
 ####rotateUnicodeArray
 ####rotateUnicodeArray
 Type: `boolean` Default: `true`
 Type: `boolean` Default: `true`
 
 

+ 1 - 1
src/Obfuscator.ts

@@ -157,7 +157,7 @@ export class Obfuscator {
 
 
         if (this.options['unicodeArray']) {
         if (this.options['unicodeArray']) {
             /**
             /**
-             * Important to set this nodes latest to prevent runtime errors cause by `rotateUnicodeArray` option
+             * Important to set this nodes latest to prevent runtime errors caused by `rotateUnicodeArray` option
              */
              */
             this.setNodesGroup(new UnicodeArrayNodesGroup(this.options));
             this.setNodesGroup(new UnicodeArrayNodesGroup(this.options));
         }
         }

+ 1 - 0
src/interfaces/IOptions.d.ts

@@ -3,6 +3,7 @@ export interface IOptions {
     debugProtection?: boolean;
     debugProtection?: boolean;
     debugProtectionInterval?: boolean;
     debugProtectionInterval?: boolean;
     disableConsoleOutput?: boolean;
     disableConsoleOutput?: boolean;
+    reservedNames?: string[];
     rotateUnicodeArray?: boolean;
     rotateUnicodeArray?: boolean;
     encodeUnicodeLiterals?: boolean;
     encodeUnicodeLiterals?: boolean;
     unicodeArray?: boolean;
     unicodeArray?: boolean;

+ 1 - 1
src/node-obfuscators/CatchClauseObfuscator.ts

@@ -35,7 +35,7 @@ export class CatchClauseObfuscator extends NodeObfuscator {
     private replaceCatchClauseParam (catchClauseNode: ICatchClauseNode): void {
     private replaceCatchClauseParam (catchClauseNode: ICatchClauseNode): void {
         estraverse.replace(catchClauseNode.param, {
         estraverse.replace(catchClauseNode.param, {
             leave: (node: INode, parentNode: INode): any => {
             leave: (node: INode, parentNode: INode): any => {
-                if (NodeUtils.isIdentifierNode(node)) {
+                if (NodeUtils.isIdentifierNode(node) && !this.isReservedName(node.name)) {
                     this.catchClauseParam.set(node.name, Utils.getRandomVariableName());
                     this.catchClauseParam.set(node.name, Utils.getRandomVariableName());
                     node.name = this.catchClauseParam.get(node.name);
                     node.name = this.catchClauseParam.get(node.name);
 
 

+ 1 - 1
src/node-obfuscators/FunctionDeclarationObfuscator.ts

@@ -43,7 +43,7 @@ export class FunctionDeclarationObfuscator extends NodeObfuscator {
     private replaceFunctionName (functionDeclarationNode: IFunctionDeclarationNode): void {
     private replaceFunctionName (functionDeclarationNode: IFunctionDeclarationNode): void {
         estraverse.replace(functionDeclarationNode.id, {
         estraverse.replace(functionDeclarationNode.id, {
             leave: (node: INode): any => {
             leave: (node: INode): any => {
-                if (NodeUtils.isIdentifierNode(node)) {
+                if (NodeUtils.isIdentifierNode(node) && !this.isReservedName(node.name)) {
                     this.functionName.set(node.name, Utils.getRandomVariableName());
                     this.functionName.set(node.name, Utils.getRandomVariableName());
                     node.name = this.functionName.get(node.name);
                     node.name = this.functionName.get(node.name);
 
 

+ 1 - 1
src/node-obfuscators/FunctionObfuscator.ts

@@ -36,7 +36,7 @@ export class FunctionObfuscator extends NodeObfuscator {
         functionNode.params.forEach((paramsNode: INode) => {
         functionNode.params.forEach((paramsNode: INode) => {
             estraverse.replace(paramsNode, {
             estraverse.replace(paramsNode, {
                 leave: (node: INode): any => {
                 leave: (node: INode): any => {
-                    if (NodeUtils.isIdentifierNode(node)) {
+                    if (NodeUtils.isIdentifierNode(node) && !this.isReservedName(node.name)) {
                         this.functionParams.set(node.name, Utils.getRandomVariableName());
                         this.functionParams.set(node.name, Utils.getRandomVariableName());
                         node.name = this.functionParams.get(node.name);
                         node.name = this.functionParams.get(node.name);
 
 

+ 10 - 0
src/node-obfuscators/NodeObfuscator.ts

@@ -35,6 +35,16 @@ export abstract class NodeObfuscator implements INodeObfuscator {
      */
      */
     public abstract obfuscateNode (node: INode, parentNode?: INode): void;
     public abstract obfuscateNode (node: INode, parentNode?: INode): void;
 
 
+    /**
+     * @param name
+     * @returns {boolean}
+     */
+    protected isReservedName (name: string): boolean {
+        return this.options['reservedNames'].some((reservedName: string) => {
+            return reservedName === name;
+        });
+    }
+
     /**
     /**
      * @param node
      * @param node
      * @param parentNode
      * @param parentNode

+ 1 - 1
src/node-obfuscators/VariableDeclarationObfuscator.ts

@@ -46,7 +46,7 @@ export class VariableDeclarationObfuscator extends NodeObfuscator {
         variableDeclarationNode.declarations.forEach((declarationNode: IVariableDeclaratorNode) => {
         variableDeclarationNode.declarations.forEach((declarationNode: IVariableDeclaratorNode) => {
             estraverse.replace(declarationNode.id, {
             estraverse.replace(declarationNode.id, {
                 enter: (node: INode): any => {
                 enter: (node: INode): any => {
-                    if (NodeUtils.isIdentifierNode(node)) {
+                    if (NodeUtils.isIdentifierNode(node) && !this.isReservedName(node.name)) {
                         this.variableNames.set(node.name, Utils.getRandomVariableName());
                         this.variableNames.set(node.name, Utils.getRandomVariableName());
                         node.name = this.variableNames.get(node.name);
                         node.name = this.variableNames.get(node.name);
 
 

+ 1 - 0
src/preset-options/DefaultPreset.ts

@@ -5,6 +5,7 @@ export const DEFAULT_PRESET: IOptions = Object.freeze({
     debugProtection: false,
     debugProtection: false,
     debugProtectionInterval: false,
     debugProtectionInterval: false,
     disableConsoleOutput: true,
     disableConsoleOutput: true,
+    reservedNames: [],
     rotateUnicodeArray: true,
     rotateUnicodeArray: true,
     encodeUnicodeLiterals: false,
     encodeUnicodeLiterals: false,
     unicodeArray: true,
     unicodeArray: true,

+ 1 - 0
src/preset-options/NoCustomNodesPreset.ts

@@ -5,6 +5,7 @@ export const NO_CUSTOM_NODES_PRESET: IOptions = Object.freeze({
     debugProtection: false,
     debugProtection: false,
     debugProtectionInterval: false,
     debugProtectionInterval: false,
     disableConsoleOutput: false,
     disableConsoleOutput: false,
+    reservedNames: [],
     rotateUnicodeArray: false,
     rotateUnicodeArray: false,
     encodeUnicodeLiterals: false,
     encodeUnicodeLiterals: false,
     unicodeArray: false,
     unicodeArray: false,