caiguanhao / js-obfuscator

Obfuscate JavaScript files via http://javascriptobfuscator.com. This is also a Grunt plugin. Inform me if this plugin doesn't work.
https://www.npmjs.org/package/js-obfuscator
MIT License
117 stars 39 forks source link

js-obfuscator

Obfuscate JavaScript files via javascriptobfuscator.com.

IMPORTANT: It is possible that your code can be viewed and/or stored by javascriptobfuscator.com. Please DO NOT include any sensitive data. If you care about your code, split and uglify them before obfuscating.


You can install it globally as a command:

npm install -g js-obfuscator
echo "var fs = require('fs')" | jsobfuscate -o keepIndentations=false
var _0x40c7=["\x66\x73"];var fs=require(_0x40c7[0]);

Or install it as a dependency:

npm install js-obfuscator --save
var jsObfuscator = require('js-obfuscator');
jsObfuscator ( <string> input [, <object> options ] )
Returns: a Q promise.

Or you can use it with Grunt ~0.4.0:

If you haven't used Grunt before, be sure to check out the Getting Started guide, as it explains how to create a Gruntfile as well as install and use Grunt plugins. Once you're familiar with that process, you may install this plugin with this command:

npm install js-obfuscator --save-dev

Once the plugin has been installed, it may be enabled inside your Gruntfile with this line of JavaScript:

grunt.loadNpmTasks('js-obfuscator');

Options

keepLinefeeds

Type: Boolean Default: false

keepIndentations

Type: Boolean Default: false

encodeStrings

Type: Boolean Default: true

encodeNumbers

Type: Boolean Default: true

moveStrings

Type: Boolean Default: true

replaceNames

Type: Boolean Default: true

variableExclusions

Type: Array Default: [ '^_get_', '^_set_', '^_mtd_' ]

concurrency (for Grunt plugin only)

Type: Number Default: 2 Range: 1 - 99

Command

$ jsobfuscate -h
Usage: jsobfuscate [OPTIONS] [FILES]

Obfuscate JavaScript files via javascriptobfuscator.com.
Read from STDIN if no files specified.

Default Options:
  -o keepLinefeeds=false
  -o keepIndentations=false
  -o encodeStrings=true
  -o encodeNumbers=true
  -o moveStrings=true
  -o replaceNames=true
  -o variableExclusions="['^_get_', '^_set_', '^_mtd_']"

Examples

Grunt

grunt.initConfig({
  jsObfuscate: {
    test: {
      options: {
        concurrency: 2,
        keepLinefeeds: false,
        keepIndentations: false,
        encodeStrings: true,
        encodeNumbers: true,
        moveStrings: true,
        replaceNames: true,
        variableExclusions: [ '^_get_', '^_set_', '^_mtd_' ]
      },
      files: {
        'dest/dest.js': [
          'src/src1.js',
          'src/src2.js'
        ]
      }
    }
  }
});

Call

var jsObfuscator = require('js-obfuscator');

var script = 'Array.prototype.diff = function(a) {' +
'  return this.filter(function(i) {return a.indexOf(i) === -1;});' +
'};';

var options = {
  keepLinefeeds:      true,
  keepIndentations:   true,
  encodeStrings:      true,
  encodeNumbers:      true,
  moveStrings:        true,
  replaceNames:       true,
  variableExclusions: [ '^_get_', '^_set_', '^_mtd_' ]
};

jsObfuscator(script, options).then(function(obfuscated) {
  console.log(obfuscated);
}, function(err) {
  console.error(err);
});

/*
var _0xa3c9=["\x64\x69\x66\x66","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65",
"\x69\x6E\x64\x65\x78\x4F\x66","\x66\x69\x6C\x74\x65\x72"]
Array[_0xa3c9[1]][_0xa3c9[0]]=function (_0x4068x1)
{
  return this[_0xa3c9[3]](function (_0x4068x2)
  {
    return _0x4068x1[_0xa3c9[2]](_0x4068x2)===-1;
  }
  );
}
;
*/

Developer