From 4d9f30c642aeec6c654a0804e03381a39dd9d853 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Sat, 21 May 2016 15:03:40 +0300 Subject: [PATCH] literal number values to hex convert --- src/Utils.js | 3 ++- src/Utils.ts | 11 ++++++----- src/node-obfuscators/LiteralObfuscator.js | 12 +++++++++--- src/node-obfuscators/LiteralObfuscator.ts | 16 ++++++++++++---- src/node-obfuscators/NodeObfuscator.js | 4 ++++ src/node-obfuscators/NodeObfuscator.ts | 10 ++++++++++ tslint.json | 2 +- 7 files changed, 44 insertions(+), 14 deletions(-) diff --git a/src/Utils.js b/src/Utils.js index 05c53ab3..a3a50769 100644 --- a/src/Utils.js +++ b/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; diff --git a/src/Utils.ts b/src/Utils.ts index fee94b48..7c975ec8 100644 --- a/src/Utils.ts +++ b/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 (obj: T): T { return obj; } diff --git a/src/node-obfuscators/LiteralObfuscator.js b/src/node-obfuscators/LiteralObfuscator.js index 774979cf..559f83c8 100644 --- a/src/node-obfuscators/LiteralObfuscator.js +++ b/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; } diff --git a/src/node-obfuscators/LiteralObfuscator.ts b/src/node-obfuscators/LiteralObfuscator.ts index 2a28bf52..b4c59e05 100644 --- a/src/node-obfuscators/LiteralObfuscator.ts +++ b/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(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(literalNode.value), + precedence: escodegen.Precedence.Primary + }; + + break; + default: break; } diff --git a/src/node-obfuscators/NodeObfuscator.js b/src/node-obfuscators/NodeObfuscator.js index 0f586170..468a7981 100644 --- a/src/node-obfuscators/NodeObfuscator.js +++ b/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) { diff --git a/src/node-obfuscators/NodeObfuscator.ts b/src/node-obfuscators/NodeObfuscator.ts index 93b725de..1b024086 100644 --- a/src/node-obfuscators/NodeObfuscator.ts +++ b/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} diff --git a/tslint.json b/tslint.json index 4ce075f1..d75ebad4 100644 --- a/tslint.json +++ b/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,