|
@@ -1,20 +1,27 @@
|
|
|
# JavaScript obfuscator for Node.js
|
|
|
|
|
|
-JavaScript obfuscator for Node.js is a free alternative of [js-obfuscator](https://github.com/caiguanhao/js-obfuscator) (which uses [javascriptobfuscator.com](https://javascriptobfuscator.com/Javascript-Obfuscator.aspx)) without any limits and sending data to a server.
|
|
|
-Compatible with ES6.
|
|
|
-Tested on Angular2 bundle.
|
|
|
+JavaScript obfuscator for Node.js is a free alternative to [js-obfuscator](https://github.com/caiguanhao/js-obfuscator) (which uses [javascriptobfuscator.com](https://javascriptobfuscator.com/Javascript-Obfuscator.aspx))
|
|
|
+
|
|
|
+* without any limits and sending data to a server;
|
|
|
+* compatible with ES6;
|
|
|
+* tested on Angular2 bundle;
|
|
|
+
|
|
|
https://gist.github.com/sanex3339/ffc2876123b52e6d11ce45369fd53acf
|
|
|
|
|
|
[](https://badge.fury.io/js/javascript-obfuscator)
|
|
|
|
|
|
## Installation
|
|
|
|
|
|
-Install the package with NPM and add it to your `devDependencies`:
|
|
|
+Install the package from NPM and add it to your `devDependencies`:
|
|
|
|
|
|
-`npm install --save-dev javascript-obfuscator`
|
|
|
+```sh
|
|
|
+$ npm install --save-dev javascript-obfuscator
|
|
|
+```
|
|
|
|
|
|
## Usage
|
|
|
|
|
|
+Here's an example of how to use it:
|
|
|
+
|
|
|
```javascript
|
|
|
var JavaScriptObfuscator = require('javascript-obfuscator');
|
|
|
|
|
@@ -45,68 +52,74 @@ var _0xabf1 = [
|
|
|
|
|
|
## `obfuscate(sourceCode, options)`
|
|
|
|
|
|
-#### `sourceCode`
|
|
|
-Type: `string` Default: `null`
|
|
|
+This is the main function that runs the Obfuscator. It takes two parameters, `sourceCode` and `options` – the source code and the opitons respectively:
|
|
|
|
|
|
-Any valid SourceCode.
|
|
|
+* `sourceCode` (`string`, default: `null`) – any valid source code, passed as a string variable. JS Obfuscator will parse this string and apply a set of modificating functions to it, generating a string with the new (obfuscated) code and printing it to the console;
|
|
|
+* `options` (`Object`, default: `null`) – an object literal.
|
|
|
|
|
|
-#### `options`
|
|
|
-Type: `Object` Default: `null`
|
|
|
+## JavaScript Obfuscator Options
|
|
|
|
|
|
-Options for JavaScript obfuscator:
|
|
|
+At this moment of time, there are following options (`name: default`) available for the JS Obfuscator:
|
|
|
|
|
|
```javascript
|
|
|
{
|
|
|
- rotateUnicodeArray: true
|
|
|
- // ...
|
|
|
+ compact: true,
|
|
|
+ debugProtection: false,
|
|
|
+ debugProtectionInterval: false,
|
|
|
+ disableConsoleOutput: true,
|
|
|
+ encodeUnicodeLiterals: false,
|
|
|
+ reservedNames: [],
|
|
|
+ rotateUnicodeArray: true,
|
|
|
+ selfDefending: true,
|
|
|
+ unicodeArray: true,
|
|
|
+ unicodeArrayThreshold: 0.8,
|
|
|
+ wrapUnicodeArrayCalls: true
|
|
|
}
|
|
|
```
|
|
|
|
|
|
-### Available options
|
|
|
-#### `compact`
|
|
|
+### `compact`
|
|
|
Type: `boolean` Default: `true`
|
|
|
|
|
|
-Compact code output into one line.
|
|
|
+Compact code output on one line.
|
|
|
|
|
|
-#### `debugProtection`
|
|
|
+### `debugProtection`
|
|
|
Type: `boolean` Default: `false`
|
|
|
|
|
|
-##### :warning: This option can cause browser freeze while Developer Tools is enabled! Use at own risk.
|
|
|
+#### :warning: Can freeze browser while Developer Tools are enabled! Use at own risk.
|
|
|
|
|
|
-Force enable debug mode in some browsers (mainly based on WebKit) on page load if Developer Tools panel is enabled.
|
|
|
-With this options using of Debug panel is impossible.
|
|
|
+Force enable debug mode on page load if Developer Tools panel is enabled (in some, mainly WebKit-based, browsers). This makes it almost impossible to use the Console (the debug panel).
|
|
|
|
|
|
-WebKit-based browsers: blocks the site window, but you still can navigate through Developer Tools panel.
|
|
|
-Firefox: does *not* block the site window, but you still can't use Debug panel.
|
|
|
+* WebKit-based: blocks the site window, but you still can navigate through Developer Tools panel.
|
|
|
+* Firefox: does *not* block the site window, but still won't let you use DevTools.
|
|
|
|
|
|
-#### `debugProtectionInterval`
|
|
|
+### `debugProtectionInterval`
|
|
|
Type: `boolean` Default: `false`
|
|
|
|
|
|
-##### :warning: This option can cause browser freeze even while Developer Tools is disabled! Use at own risk.
|
|
|
+#### :warning: Can freeze browser even while Developer Tools are disabled! Use at own risk.
|
|
|
|
|
|
Works if `debugProtection` is enabled.
|
|
|
|
|
|
-Force enable debug mode in some browsers (mainly based on WebKit) when Developer Tools panel was enabled, even after page was loaded.
|
|
|
+Force enable debug mode in some browsers (mainly WebKit-based) when Developer Tools panel is enabled, even after page is loaded.
|
|
|
|
|
|
-#### `disableConsoleOutput`
|
|
|
+### `disableConsoleOutput`
|
|
|
Type: `boolean` Default: `true`
|
|
|
|
|
|
-Disable `console.log`, `console.info`, `console.error` and `console.warn` messages output into browser console.
|
|
|
+Disable `console.log`, `console.info`, `console.error` and `console.warn` messages output into the browser console.
|
|
|
|
|
|
-#### `encodeUnicodeLiterals`
|
|
|
+### `encodeUnicodeLiterals`
|
|
|
Type: `boolean` Default: `false`
|
|
|
|
|
|
-##### :warning: `unicodeArray` option must be enabled
|
|
|
+#### :warning: `unicodeArray` option must be enabled
|
|
|
|
|
|
-This option can slightly slowdown your code speed.
|
|
|
+This option can slightly slow down your code speed.
|
|
|
|
|
|
-All literals in unicode array becomes encoded in Base64.
|
|
|
-To decode strings, special function will be inserted on page under `unicodeArray` node.
|
|
|
+All literals in Unicode array become encoded in Base64.
|
|
|
+To decode strings, a special function will be inserted on the page under `unicodeArray` node.
|
|
|
|
|
|
-#### `reservedNames`
|
|
|
+### `reservedNames`
|
|
|
Type: `string[]` Default: `[]`
|
|
|
|
|
|
-Disable obfuscation of variable names, function names and names of function parameters that match with given RegExp pattern.
|
|
|
+Disable obfuscation of variable names, function names and names of function parameters that match the passed RegExp pattern.
|
|
|
|
|
|
Example:
|
|
|
```javascript
|
|
@@ -118,47 +131,45 @@ Example:
|
|
|
}
|
|
|
```
|
|
|
|
|
|
-#### `rotateUnicodeArray`
|
|
|
+### `rotateUnicodeArray`
|
|
|
Type: `boolean` Default: `true`
|
|
|
|
|
|
-##### :warning: `unicodeArray` option must be enabled
|
|
|
+#### :warning: `unicodeArray` must be enabled
|
|
|
|
|
|
-This option will rotate all values inside `unicodeArray` on a random value during obfuscation of code, and insert inside source code helper function
|
|
|
-which will rotate array values back to their original indexes.
|
|
|
+Shift the `unicodeArray` values by a random number of places during the code obfuscation and insert a helper function for shifting the array back into the source code. (It works just like the Caesar cypher.)
|
|
|
|
|
|
Keep in mind that this option affects only how the code is visually organised, since the original arrays can be easily accessed during the debug process.
|
|
|
|
|
|
-It is also not recommended to enable `rotateUnicodeArray` for small source code, because a helper function might attract attention.
|
|
|
+It is also not recommended to enable `rotateUnicodeArray` for small source code because a helper function might attract attention.
|
|
|
|
|
|
-#### `selfDefending`
|
|
|
+### `selfDefending`
|
|
|
Type: `boolean` Default: `true`
|
|
|
|
|
|
-##### :warning: this option forcibly set `compact` value to `true`
|
|
|
+#### :warning: this option forcibly set `compact` value to `true`
|
|
|
|
|
|
Enables self-defending for obfuscated code. If obfuscated compact code is formatted, it will not work any more.
|
|
|
|
|
|
-#### `unicodeArray`
|
|
|
+### `unicodeArray`
|
|
|
Type: `boolean` Default: `true`
|
|
|
|
|
|
-Put all literal strings into array and replace every literal string by array call.
|
|
|
+Put all literal strings into an array and replace every literal string by an array call.
|
|
|
|
|
|
-#### `unicodeArrayThreshold`
|
|
|
+### `unicodeArrayThreshold`
|
|
|
Type: `number` Default: `0.8` Min: `0` Max: `1`
|
|
|
|
|
|
-##### :warning: `unicodeArray` option must be enabled
|
|
|
+#### :warning: `unicodeArray` option must be enabled
|
|
|
|
|
|
-Probability that the literal string will inserted into `unicodeArray`.
|
|
|
-Use this option for huge source code size, because many calls to `unicodeArray` will slowdown code performance.
|
|
|
+The probability that the literal string will be inserted into `unicodeArray`.
|
|
|
+Use this option for huge source code size, because many calls to `unicodeArray` will slow down code performance.
|
|
|
|
|
|
-Value `0` is equals `unicodeArray: false`.
|
|
|
+`unicodeArrayThreshold: 0` equals to `unicodeArray: false`.
|
|
|
|
|
|
-#### `wrapUnicodeArrayCalls`
|
|
|
+### `wrapUnicodeArrayCalls`
|
|
|
Type: `boolean` Default: `true`
|
|
|
|
|
|
-##### :warning: `unicodeArray` option must be enabled
|
|
|
+#### :warning: `unicodeArray` option must be enabled
|
|
|
|
|
|
-Instead using direct calls to `unicodeArray` items `var t = _0x43a123[0x0]`,
|
|
|
-when index `0x0` can be easily reverted to `0` with few js beautifiers, this option will wrap all calls to special function instead.
|
|
|
+Instead of using direct calls to `unicodeArray` items `var t = _0x43a123[0x0]`, when index `0x0` can be easily reverted to `0` with few js beautifiers, this option will wrap all calls to special function instead.
|
|
|
|
|
|
```javascript
|
|
|
var t = _0x12a634('0x0')
|