瀏覽代碼

literal number values to hex convert

sanex3339 9 年之前
父節點
當前提交
4d9f30c642

+ 2 - 1
src/Utils.js

@@ -21,7 +21,7 @@ class Utils {
         return newArray;
     }
     static decToHex(dec) {
-        return (dec + Math.pow(16, 6)).toString(16).substr(-6);
+        return (dec + Math.pow(16, 6)).toString(16).substr(-6).replace(Utils.hexRepetitiveZerosRegExp, '');
     }
     static getRandomInteger(min, max) {
         return Math.floor(Math.random() * (max - min + 1)) + min;
@@ -39,4 +39,5 @@ class Utils {
         })}'`;
     }
 }
+Utils.hexRepetitiveZerosRegExp = new RegExp('^(0{2,})+(?!$)', '');
 exports.Utils = Utils;

+ 6 - 5
src/Utils.ts

@@ -1,4 +1,9 @@
 export class Utils {
+    /**
+     * @type {RegExp}
+     */
+    private static hexRepetitiveZerosRegExp: RegExp = new RegExp('^(0{2,})+(?!$)', '');
+
     /**
      * @param array
      * @param searchElement
@@ -40,7 +45,7 @@ export class Utils {
      * @returns {string}
      */
     public static decToHex(dec: number): string {
-        return (dec + Math.pow(16, 6)).toString(16).substr(-6);
+        return (dec + Math.pow(16, 6)).toString(16).substr(-6).replace(Utils.hexRepetitiveZerosRegExp, '');
     }
 
     /**
@@ -64,10 +69,6 @@ export class Utils {
         return `${prefix}${(Utils.decToHex(Utils.getRandomInteger(rangeMinInteger, rangeMaxInteger))).substr(0, length)}`;
     }
 
-    /**
-     * @param obj
-     * @returns {T}
-     */
     public static strEnumify <T extends { [prop: string]: '' | string }> (obj: T): T {
         return obj;
     }

+ 9 - 3
src/node-obfuscators/LiteralObfuscator.js

@@ -7,16 +7,22 @@ class LiteralObfuscator extends NodeObfuscator_1.NodeObfuscator {
         if (NodeUtils_1.NodeUtils.isPropertyNode(parentNode) && parentNode.key === literalNode) {
             return;
         }
+        if (literalNode['x-verbatim-property']) {
+            return;
+        }
         switch (typeof literalNode.value) {
             case 'string':
-                if (literalNode['x-verbatim-property']) {
-                    break;
-                }
                 literalNode['x-verbatim-property'] = {
                     content: this.replaceLiteralStringByArrayElement(literalNode.value),
                     precedence: escodegen.Precedence.Primary
                 };
                 break;
+            case 'number':
+                literalNode['x-verbatim-property'] = {
+                    content: this.replaceLiteralNumberByHexadecimalValue(literalNode.value),
+                    precedence: escodegen.Precedence.Primary
+                };
+                break;
             default:
                 break;
         }

+ 12 - 4
src/node-obfuscators/LiteralObfuscator.ts

@@ -16,12 +16,12 @@ export class LiteralObfuscator extends NodeObfuscator {
             return;
         }
 
+        if (literalNode['x-verbatim-property']) {
+            return;
+        }
+
         switch (typeof literalNode.value) {
             case 'string':
-                if (literalNode['x-verbatim-property']) {
-                    break;
-                }
-
                 literalNode['x-verbatim-property'] = {
                     content : this.replaceLiteralStringByArrayElement(<string>literalNode.value),
                     precedence: escodegen.Precedence.Primary
@@ -29,6 +29,14 @@ export class LiteralObfuscator extends NodeObfuscator {
 
                 break;
 
+            case 'number':
+                literalNode['x-verbatim-property'] = {
+                    content : this.replaceLiteralNumberByHexadecimalValue(<number>literalNode.value),
+                    precedence: escodegen.Precedence.Primary
+                };
+
+                break;
+
             default:
                 break;
         }

+ 4 - 0
src/node-obfuscators/NodeObfuscator.js

@@ -14,6 +14,10 @@ class NodeObfuscator {
             node.name = namesMap.get(node.name);
         }
     }
+    replaceLiteralNumberByHexadecimalValue(nodeValue) {
+        const prefix = '0x';
+        return `${prefix}${Utils_1.Utils.decToHex(nodeValue)}`;
+    }
     replaceLiteralStringByArrayElement(nodeValue) {
         let value = Utils_1.Utils.stringToUnicode(nodeValue), unicodeArray = this.nodes.get('unicodeArrayNode').getNodeData(), sameIndex = unicodeArray.indexOf(value), index;
         if (sameIndex < 0) {

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

@@ -42,6 +42,16 @@ export abstract class NodeObfuscator implements INodeObfuscator {
         }
     }
 
+    /**
+     * @param nodeValue
+     * @returns {string}
+     */
+    protected replaceLiteralNumberByHexadecimalValue (nodeValue: number): string {
+        const prefix: string = '0x';
+
+        return `${prefix}${Utils.decToHex(nodeValue)}`;
+    }
+
     /**
      * @param nodeValue
      * @returns {string}

+ 1 - 1
tslint.json

@@ -77,7 +77,7 @@
     "no-shadowed-variable": false,
     "no-string-literal": false,
     "no-switch-case-fall-through": true,
-    "no-trailing-whitespace": true,
+    "no-trailing-whitespace": false,
     "no-unreachable": true,
     "no-unused-expression": true,
     "no-unused-variable": true,