Browse Source

reservedNames option base implementation

sanex3339 9 years ago
parent
commit
5e9b1c0931

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

@@ -15,7 +15,7 @@ class CatchClauseObfuscator extends NodeObfuscator_1.NodeObfuscator {
     replaceCatchClauseParam(catchClauseNode) {
         estraverse.replace(catchClauseNode.param, {
             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());
                     node.name = this.catchClauseParam.get(node.name);
                     return;

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

@@ -19,7 +19,7 @@ class FunctionDeclarationObfuscator extends NodeObfuscator_1.NodeObfuscator {
     replaceFunctionName(functionDeclarationNode) {
         estraverse.replace(functionDeclarationNode.id, {
             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());
                     node.name = this.functionName.get(node.name);
                     return;

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

@@ -16,7 +16,7 @@ class FunctionObfuscator extends NodeObfuscator_1.NodeObfuscator {
         functionNode.params.forEach((paramsNode) => {
             estraverse.replace(paramsNode, {
                 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());
                         node.name = this.functionParams.get(node.name);
                         return;

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

@@ -7,6 +7,11 @@ class NodeObfuscator {
         this.nodes = nodes;
         this.options = options;
     }
+    isReservedName(name) {
+        return this.options['reservedNames'].some((reservedName) => {
+            return reservedName === name;
+        });
+    }
     replaceNodeIdentifierByNewValue(node, parentNode, namesMap) {
         if (NodeUtils_1.NodeUtils.isIdentifierNode(node) && namesMap.has(node.name)) {
             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) => {
             estraverse.replace(declarationNode.id, {
                 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());
                         node.name = this.variableNames.get(node.name);
                         return;

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

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

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

@@ -4,6 +4,7 @@ exports.NO_CUSTOM_NODES_PRESET = Object.freeze({
     debugProtection: false,
     debugProtectionInterval: false,
     disableConsoleOutput: false,
+    reservedNames: [],
     rotateUnicodeArray: false,
     encodeUnicodeLiterals: 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.
 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
 Type: `boolean` Default: `true`
 

+ 1 - 1
src/Obfuscator.ts

@@ -157,7 +157,7 @@ export class Obfuscator {
 
         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));
         }

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

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

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

@@ -35,7 +35,7 @@ export class CatchClauseObfuscator extends NodeObfuscator {
     private replaceCatchClauseParam (catchClauseNode: ICatchClauseNode): void {
         estraverse.replace(catchClauseNode.param, {
             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());
                     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 {
         estraverse.replace(functionDeclarationNode.id, {
             leave: (node: INode): any => {
-                if (NodeUtils.isIdentifierNode(node)) {
+                if (NodeUtils.isIdentifierNode(node) && !this.isReservedName(node.name)) {
                     this.functionName.set(node.name, Utils.getRandomVariableName());
                     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) => {
             estraverse.replace(paramsNode, {
                 leave: (node: INode): any => {
-                    if (NodeUtils.isIdentifierNode(node)) {
+                    if (NodeUtils.isIdentifierNode(node) && !this.isReservedName(node.name)) {
                         this.functionParams.set(node.name, Utils.getRandomVariableName());
                         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;
 
+    /**
+     * @param name
+     * @returns {boolean}
+     */
+    protected isReservedName (name: string): boolean {
+        return this.options['reservedNames'].some((reservedName: string) => {
+            return reservedName === name;
+        });
+    }
+
     /**
      * @param node
      * @param parentNode

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

@@ -46,7 +46,7 @@ export class VariableDeclarationObfuscator extends NodeObfuscator {
         variableDeclarationNode.declarations.forEach((declarationNode: IVariableDeclaratorNode) => {
             estraverse.replace(declarationNode.id, {
                 enter: (node: INode): any => {
-                    if (NodeUtils.isIdentifierNode(node)) {
+                    if (NodeUtils.isIdentifierNode(node) && !this.isReservedName(node.name)) {
                         this.variableNames.set(node.name, Utils.getRandomVariableName());
                         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,
     debugProtectionInterval: false,
     disableConsoleOutput: true,
+    reservedNames: [],
     rotateUnicodeArray: true,
     encodeUnicodeLiterals: false,
     unicodeArray: true,

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

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