From 3bfc3cf869b9d0e1b931189ab6e983af01fdd1fa Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Wed, 1 Jun 2016 12:30:32 +0300 Subject: [PATCH] dev --- dist/src/JavaScriptObfuscator.js | 3 +- dist/src/OptionsNormalizer.js | 21 +++++++++++++ .../src/node-groups/UnicodeArrayNodesGroup.js | 2 +- dist/src/node-obfuscators/NodeObfuscator.js | 2 +- dist/src/preset-options/DefaultPreset.js | 2 +- .../src/preset-options/NoCustomNodesPreset.js | 2 +- dist/tests/dev-test.js | 2 +- src/JavaScriptObfuscator.ts | 3 +- src/OptionsNormalizer.ts | 30 +++++++++++++++++++ src/interfaces/IOptions.d.ts | 2 +- src/node-groups/UnicodeArrayNodesGroup.ts | 2 +- src/node-obfuscators/NodeObfuscator.ts | 2 +- src/preset-options/DefaultPreset.ts | 2 +- src/preset-options/NoCustomNodesPreset.ts | 2 +- tests/dev-test.ts | 2 +- 15 files changed, 66 insertions(+), 13 deletions(-) create mode 100644 dist/src/OptionsNormalizer.js create mode 100644 src/OptionsNormalizer.ts diff --git a/dist/src/JavaScriptObfuscator.js b/dist/src/JavaScriptObfuscator.js index 65bcbecd..9c13c8ed 100644 --- a/dist/src/JavaScriptObfuscator.js +++ b/dist/src/JavaScriptObfuscator.js @@ -3,9 +3,10 @@ const esprima = require('esprima'); const escodegen = require('escodegen'); const DefaultPreset_1 = require('./preset-options/DefaultPreset'); const Obfuscator_1 = require('./Obfuscator'); +const OptionsNormalizer_1 = require("./OptionsNormalizer"); class JavaScriptObfuscator { static obfuscate(sourceCode, customOptions) { - let astTree = esprima.parse(sourceCode), options = Object.assign({}, DefaultPreset_1.DEFAULT_PRESET, customOptions), obfuscator = new Obfuscator_1.Obfuscator(options); + let astTree = esprima.parse(sourceCode), options = OptionsNormalizer_1.OptionsNormalizer.normalize(Object.assign({}, DefaultPreset_1.DEFAULT_PRESET, customOptions)), obfuscator = new Obfuscator_1.Obfuscator(options); astTree = obfuscator.obfuscateNode(astTree); return JavaScriptObfuscator.generateCode(astTree, options); } diff --git a/dist/src/OptionsNormalizer.js b/dist/src/OptionsNormalizer.js new file mode 100644 index 00000000..3448f0cd --- /dev/null +++ b/dist/src/OptionsNormalizer.js @@ -0,0 +1,21 @@ +"use strict"; +class OptionsNormalizer { + static normalize(options) { + let normalizedOptions = Object.assign({}, options); + normalizedOptions = OptionsNormalizer.unicodeArrayRule(normalizedOptions); + return normalizedOptions; + } + static unicodeArrayRule(options) { + const disabledUnicodeArrayOptions = { + encodeUnicodeLiterals: false, + rotateUnicodeArray: false, + unicodeArray: false, + wrapUnicodeArrayCalls: false + }; + if (!options['unicodeArray']) { + Object.assign(options, disabledUnicodeArrayOptions); + } + return options; + } +} +exports.OptionsNormalizer = OptionsNormalizer; diff --git a/dist/src/node-groups/UnicodeArrayNodesGroup.js b/dist/src/node-groups/UnicodeArrayNodesGroup.js index 3cb952b4..7ed8ef93 100644 --- a/dist/src/node-groups/UnicodeArrayNodesGroup.js +++ b/dist/src/node-groups/UnicodeArrayNodesGroup.js @@ -19,7 +19,7 @@ class UnicodeArrayNodesGroup extends NodesGroup_1.NodesGroup { if (this.options['wrapUnicodeArrayCalls']) { this.nodes.set('unicodeArrayCallsWrapper', new UnicodeArrayCallsWrapper_1.UnicodeArrayCallsWrapper(this.unicodeArrayTranslatorName, this.unicodeArrayName, unicodeArray)); } - if (this.options['encodeUnicodeArray']) { + if (this.options['encodeUnicodeLiterals']) { this.nodes.set('unicodeArrayDecodeNode', new UnicodeArrayDecodeNode_1.UnicodeArrayDecodeNode(this.unicodeArrayName, unicodeArray)); } if (this.options['rotateUnicodeArray']) { diff --git a/dist/src/node-obfuscators/NodeObfuscator.js b/dist/src/node-obfuscators/NodeObfuscator.js index ab711d3f..d988d504 100644 --- a/dist/src/node-obfuscators/NodeObfuscator.js +++ b/dist/src/node-obfuscators/NodeObfuscator.js @@ -31,7 +31,7 @@ class NodeObfuscator { } replaceLiteralValueByUnicodeValue(nodeValue) { let value = nodeValue; - if (this.options['unicodeArray'] && this.options['encodeUnicodeArray']) { + if (this.options['encodeUnicodeLiterals']) { value = new Buffer(encodeURI(value)).toString('base64'); } value = Utils_1.Utils.stringToUnicode(value); diff --git a/dist/src/preset-options/DefaultPreset.js b/dist/src/preset-options/DefaultPreset.js index 0c7131be..18f72c0e 100644 --- a/dist/src/preset-options/DefaultPreset.js +++ b/dist/src/preset-options/DefaultPreset.js @@ -4,8 +4,8 @@ exports.DEFAULT_PRESET = Object.freeze({ debugProtection: false, debugProtectionInterval: false, disableConsoleOutput: true, - encodeUnicodeArray: false, rotateUnicodeArray: true, + encodeUnicodeLiterals: false, unicodeArray: true, wrapUnicodeArrayCalls: true }); diff --git a/dist/src/preset-options/NoCustomNodesPreset.js b/dist/src/preset-options/NoCustomNodesPreset.js index 87c2a72a..42e501d9 100644 --- a/dist/src/preset-options/NoCustomNodesPreset.js +++ b/dist/src/preset-options/NoCustomNodesPreset.js @@ -4,8 +4,8 @@ exports.NO_CUSTOM_NODES_PRESET = Object.freeze({ debugProtection: false, debugProtectionInterval: false, disableConsoleOutput: false, - encodeUnicodeArray: false, rotateUnicodeArray: false, + encodeUnicodeLiterals: false, unicodeArray: false, wrapUnicodeArrayCalls: false }); diff --git a/dist/tests/dev-test.js b/dist/tests/dev-test.js index 85ffa3a6..0b160fbb 100644 --- a/dist/tests/dev-test.js +++ b/dist/tests/dev-test.js @@ -48,7 +48,7 @@ let obfuscatedCode = JavaScriptObfuscator_1.JavaScriptObfuscator.obfuscate(` })(); `, { disableConsoleOutput: false, - encodeUnicodeArray: true + encodeUnicodeLiterals: true }); console.log(obfuscatedCode); console.log(eval(obfuscatedCode)); diff --git a/src/JavaScriptObfuscator.ts b/src/JavaScriptObfuscator.ts index 15fe3eff..bb29b8d7 100644 --- a/src/JavaScriptObfuscator.ts +++ b/src/JavaScriptObfuscator.ts @@ -9,6 +9,7 @@ import { IOptions } from './interfaces/IOptions'; import { DEFAULT_PRESET } from './preset-options/DefaultPreset'; import { Obfuscator } from './Obfuscator'; +import { OptionsNormalizer } from "./OptionsNormalizer"; export class JavaScriptObfuscator { /** @@ -24,7 +25,7 @@ export class JavaScriptObfuscator { */ public static obfuscate (sourceCode: string, customOptions?: IOptions): string { let astTree: INode = esprima.parse(sourceCode), - options: any = Object.assign({}, DEFAULT_PRESET, customOptions), + options: IOptions = OptionsNormalizer.normalize(Object.assign({}, DEFAULT_PRESET, customOptions)), obfuscator: Obfuscator = new Obfuscator(options); astTree = obfuscator.obfuscateNode(astTree); diff --git a/src/OptionsNormalizer.ts b/src/OptionsNormalizer.ts new file mode 100644 index 00000000..978e6fcf --- /dev/null +++ b/src/OptionsNormalizer.ts @@ -0,0 +1,30 @@ +import { IOptions } from "./interfaces/IOptions"; + +export class OptionsNormalizer { + public static normalize (options: IOptions): IOptions { + let normalizedOptions: IOptions = Object.assign({}, options); + + normalizedOptions = OptionsNormalizer.unicodeArrayRule(normalizedOptions); + + return normalizedOptions; + } + + /** + * @param options + * @returns {IOptions} + */ + private static unicodeArrayRule (options: IOptions): IOptions { + const disabledUnicodeArrayOptions: {[index: string]: boolean} = { + encodeUnicodeLiterals: false, + rotateUnicodeArray: false, + unicodeArray: false, + wrapUnicodeArrayCalls: false + }; + + if (!options['unicodeArray']) { + Object.assign(options, disabledUnicodeArrayOptions); + } + + return options; + } +} \ No newline at end of file diff --git a/src/interfaces/IOptions.d.ts b/src/interfaces/IOptions.d.ts index ee4f4428..378bc2f4 100644 --- a/src/interfaces/IOptions.d.ts +++ b/src/interfaces/IOptions.d.ts @@ -3,8 +3,8 @@ export interface IOptions { debugProtection?: boolean; debugProtectionInterval?: boolean; disableConsoleOutput?: boolean; - encodeUnicodeArray?: boolean; rotateUnicodeArray?: boolean; + encodeUnicodeLiterals?: boolean; unicodeArray?: boolean; wrapUnicodeArrayCalls?: boolean; } diff --git a/src/node-groups/UnicodeArrayNodesGroup.ts b/src/node-groups/UnicodeArrayNodesGroup.ts index 3bf9b325..56934f96 100644 --- a/src/node-groups/UnicodeArrayNodesGroup.ts +++ b/src/node-groups/UnicodeArrayNodesGroup.ts @@ -57,7 +57,7 @@ export class UnicodeArrayNodesGroup extends NodesGroup { ); } - if (this.options['encodeUnicodeArray']) { + if (this.options['encodeUnicodeLiterals']) { this.nodes.set( 'unicodeArrayDecodeNode', new UnicodeArrayDecodeNode ( diff --git a/src/node-obfuscators/NodeObfuscator.ts b/src/node-obfuscators/NodeObfuscator.ts index 2fd6402f..27f42395 100644 --- a/src/node-obfuscators/NodeObfuscator.ts +++ b/src/node-obfuscators/NodeObfuscator.ts @@ -88,7 +88,7 @@ export abstract class NodeObfuscator implements INodeObfuscator { protected replaceLiteralValueByUnicodeValue (nodeValue: string): string { let value: string = nodeValue; - if (this.options['unicodeArray'] && this.options['encodeUnicodeArray']) { + if (this.options['encodeUnicodeLiterals']) { value = new Buffer(encodeURI(value)).toString('base64'); } diff --git a/src/preset-options/DefaultPreset.ts b/src/preset-options/DefaultPreset.ts index cb886af6..79251483 100644 --- a/src/preset-options/DefaultPreset.ts +++ b/src/preset-options/DefaultPreset.ts @@ -5,8 +5,8 @@ export const DEFAULT_PRESET: IOptions = Object.freeze({ debugProtection: false, debugProtectionInterval: false, disableConsoleOutput: true, - encodeUnicodeArray: false, rotateUnicodeArray: true, + encodeUnicodeLiterals: false, unicodeArray: true, wrapUnicodeArrayCalls: true }); diff --git a/src/preset-options/NoCustomNodesPreset.ts b/src/preset-options/NoCustomNodesPreset.ts index 99505cb5..e8f79747 100644 --- a/src/preset-options/NoCustomNodesPreset.ts +++ b/src/preset-options/NoCustomNodesPreset.ts @@ -5,8 +5,8 @@ export const NO_CUSTOM_NODES_PRESET: IOptions = Object.freeze({ debugProtection: false, debugProtectionInterval: false, disableConsoleOutput: false, - encodeUnicodeArray: false, rotateUnicodeArray: false, + encodeUnicodeLiterals: false, unicodeArray: false, wrapUnicodeArrayCalls: false }); diff --git a/tests/dev-test.ts b/tests/dev-test.ts index 69541421..d40bbe00 100644 --- a/tests/dev-test.ts +++ b/tests/dev-test.ts @@ -50,7 +50,7 @@ let obfuscatedCode: string = JavaScriptObfuscator.obfuscate( `, { disableConsoleOutput: false, - encodeUnicodeArray: true + encodeUnicodeLiterals: true } );