Как разработчик, вы проводите много времени, создавая, разрабатывая и отлаживая свой код. Последнее, чего вы хотите, это чтобы кто-то другой имел возможность украсть весь ваш труд и использовать его в другом месте. К счастью, существует распространенная практика под названием обфускация кода
, которая может помочь защитить вашу работу от посторонних глаз.

Обфускация — это техника, которая намеренно затуманивает исходный код файла JavaScript, что затрудняет его понимание человеком. Это похоже на шифрование, но компьютерная программа все равно может понять код и выполнить его.
Анализ обфусцированного кода
function _0x33bc(_0x357a49, _0x4d043b) {
var _0x3af57c = _0x3af5();
return _0x33bc = function (_0x33bc59, _0x2d7f6b) {
_0x33bc59 = _0x33bc59 - 0xac;
var _0x433c74 = _0x3af57c[_0x33bc59];
return _0x433c74;
}, _0x33bc(_0x357a49, _0x4d043b);
}
var _0x5b0965 = _0x33bc;
function _0x3af5() {
var _0x16d4f2 = ['2293120DDXwAC', '5tguhIh', 'ExpressJS', '32097acJbHr', '1234303tDdtZs', 'HTML', '51273EoArEE', 'CSS', 'JavaScript', '3214428qqnLuG', 'MongoDB', '40qdyzEo', 'Smith', '252346qcgJWs', '292cvJCiT', 'Anthony', 'PHP', '2392880xWQHuO', 'Fullx20Stackx20Developer'];
_0x3af5 = function () {
return _0x16d4f2;
};
return _0x3af5();
}(function (_0x36cba0, _0x8d74e1) {
var _0x4b315b = _0x33bc,
_0x589073 = _0x36cba0();
while (!![]) {
try {
var _0x243a48 = -parseInt(_0x4b315b(0xb8)) / 0x1 * (-parseInt(_0x4b315b(0xb1)) / 0x2) + -parseInt(_0x4b315b(0xba)) / 0x3 * (parseInt(_0x4b315b(0xb2)) / 0x4) + parseInt(_0x4b315b(0xb5)) / 0x5 + parseInt(_0x4b315b(0xad)) / 0x6 + -parseInt(_0x4b315b(0xbb)) / 0x7 + -parseInt(_0x4b315b(0xaf)) / 0x8 * (parseInt(_0x4b315b(0xbd)) / 0x9) + -parseInt(_0x4b315b(0xb7)) / 0xa;
if (_0x243a48 === _0x8d74e1) break;
else _0x589073['push'](_0x589073['shift']());
} catch (_0x513014) {
_0x589073['push'](_0x589073['shift']());
}
}
}(_0x3af5, 0x68fca));
var person = {
'first_name': _0x5b0965(0xb3),
'last_name': _0x5b0965(0xb0),
'occupation': _0x5b0965(0xb6),
'languages': [_0x5b0965(0xac), _0x5b0965(0xbc), _0x5b0965(0xbe), 'React', _0x5b0965(0xb4), 'NodeJS', _0x5b0965(0xae), _0x5b0965(0xb9)]
};
Это обфусцированный код. Довольно сложно понять, не так ли? Скорее всего, если вы не супер-гений программирования, вы не сможете его понять. Вам придется прочитать его очень внимательно, чтобы понять, что происходит.
Вот оригинальный код:
var person = {
first_name : "Anthony",
last_name : "Smith",
occupation : "Full Stack Developer",
languages: ["JavaScript", "HTML", "CSS", "React", "PHP","NodeJS", "MongoDB","ExpressJS"],
};
Выглядит совсем по-другому, не так ли? Несмотря на то, что это всего лишь простой объект, он может быть легко украден и повторно использован в другом месте без вашего разрешения. Если это данные компании, которые вы не хотите, чтобы мир увидел, то обфускация — это то, что нужно. Это также полезно для людей, продающих код на таких платформах, как ThemeForest, Template Monster и т.д., где ваш код может быть легко скопирован из браузера и вставлен в текстовый редактор, однако с обфускатором он все равно может быть скопирован, но его будет очень трудно прочитать и расшифровать.
В этой статье я покажу вам, как можно обфусцировать ваш код с помощью библиотеки JavaScript Obfuscator в Node.js.
Когда и зачем нужно обфусцировать код JavaScript?
Одна из самых неприятных вещей в JavaScript заключается в том, что он прост для понимания большинством разработчиков, а это значит, что его можно украсть и использовать повторно в другом месте без разрешения разработчика. Последнее, чего вы хотите, это чтобы кто-то другой перехватил и повторно использовал весь код, который написали ВЫ.

Я думаю, что есть смысл в обфускации, чтобы затруднить, если не сделать невозможным, разборку кода. Также, я думаю, это имеет смысл для продуктов с большой клиентской базой, когда вы не хотите, чтобы ваши конкуренты знали много о ваших продуктах.
Как замаскировать код JavaScript?
Мы будем использовать Node.js и модуль JavaScript Obfuscator для обфускации нашего кода JavaScript. Модуль обфускатора javaScript — это бесплатный инструмент с открытым исходным кодом, обладающий большим количеством функций, которые могут защитить ваш код от кражи.
Основные возможности:
- сглаживание потока управления
- различные преобразования кода
- опции CLI
- Не имеет ограничений и лимитов
- Может работать как на локальной машине, так и на удаленном сервере, поскольку не требует подключения к Интернету
- переименование переменных
- внедрение мёртвого кода
Установка:
npm install javascript-obfuscator
После установки модуля вы можете потребовать его в своем коде, используя require("javascript-obfuscator")
.
Использование модуля:
Теперь мы можем приступить к использованию модуля обфускатора. Сначала мы должны создать экземпляр модуля obfuscator, после чего мы можем использовать метод obfuscate
для обфускации нашего кода. Он принимает первый аргумент, который является кодом для обфускации, и второй аргумент, который является объектом, содержащим опции для использования.
// Require the JavaScript obfuscator
var JavaScriptObfuscator = require('javascript-obfuscator');
// Obfuscate the code providen as first argument
var obfuscationResult = JavaScriptObfuscator.obfuscate(`
function myfunction() {
console.log("function");
};
myfunction();
function calculate(x, y, op) {
var answer;
if ( op = "add" ) {
answer = x + y;
};
else if ( op = "sub" ) {
answer = x - y;
};
else if ( op = "multi" ) {
answer = x * y;
};
else if ( op = "divide" ) {
answer = x / y;
};
else {
answer = "Error";
};
return answer;
};
`);
// Display obfuscated result
console.log(obfuscationResult.getObfuscatedCode());
Опции:
Вы можете настроить модуль обфускатора, передав ему объект, содержащий опции для использования.
JavaScriptObfuscator.obfuscate(YourCode, {
compact: true,
controlFlowFlattening: false,
controlFlowFlatteningThreshold: 0.75,
deadCodeInjection: false,
deadCodeInjectionThreshold: 0.4,
debugProtection: false,
debugProtectionInterval: false,
disableConsoleOutput: false,
domainLock: [],
log: false,
mangle: false,
renameGlobals: false,
reservedNames: [],
rotateStringArray: true,
seed: 0,
selfDefending: false,
sourceMap: false,
sourceMapBaseUrl: '',
sourceMapFileName: '',
sourceMapMode: 'separate',
stringArray: true,
stringArrayEncoding: false,
stringArrayThreshold: 0.75,
target: 'browser',
unicodeEscapeSequence: false
});
Вам следует ознакомиться с официальной документацией библиотеки, чтобы увидеть все новые опции, которые доступны в настоящее время. Вы также можете посетить веб-сайт JavaScript Obfuscator, чтобы увидеть все доступные на данный момент опции. В настоящее время они предоставляют предустановки, которые включают в себя ощущение «низкого», «среднего», «высокого» и «наивысшего».
A. Низкая обфускация
{
compact: true,
controlFlowFlattening: false,
deadCodeInjection: false,
debugProtection: false,
debugProtectionInterval: false,
disableConsoleOutput: true,
log: false,
mangle: true,
renameGlobals: false,
rotateStringArray: true,
selfDefending: true,
stringArray: true,
stringArrayEncoding: false,
stringArrayThreshold: 0.75,
unicodeEscapeSequence: false
}
B. Средняя обфускация
{
compact: true,
controlFlowFlattening: true,
controlFlowFlatteningThreshold: 0.75,
deadCodeInjection: true,
deadCodeInjectionThreshold: 0.4,
debugProtection: false,
debugProtectionInterval: false,
disableConsoleOutput: true,
log: false,
mangle: false,
renameGlobals: false,
rotateStringArray: true,
selfDefending: true,
stringArray: true,
stringArrayEncoding: 'base64',
stringArrayThreshold: 0.75,
unicodeEscapeSequence: false
}
C Высокая обфускация
{
compact: true,
controlFlowFlattening: true,
controlFlowFlatteningThreshold: 1,
deadCodeInjection: true,
deadCodeInjectionThreshold: 1,
debugProtection: true,
debugProtectionInterval: true,
disableConsoleOutput: true,
log: false,
mangle: false,
renameGlobals: false,
rotateStringArray: true,
selfDefending: true,
stringArray: true,
stringArrayEncoding: 'rc4',
stringArrayThreshold: 1,
unicodeEscapeSequence: false
}
Попробуйте!
Мы собираемся прочитать содержимое JS-файла и затем обфусцировать его.
// Require Filesystem module
var fs = require("fs");
// Require the Obfuscator Module
var JavaScriptObfuscator = require('javascript-obfuscator');
// Read the file of your original JavaScript Code as text
fs.readFile('./your-original-code.js', "UTF-8", function(err, data) {
if (err) {
throw err;
}
// Obfuscate content of the JS file
var obfuscationResult = JavaScriptObfuscator.obfuscate(data);
// Write the obfuscated code into a new file
fs.writeFile('./your-code-obfuscated.js', obfuscationResult.getObfuscatedCode() , function(err) {
if(err) {
return console.log(err);
}
console.log("The file was saved!");
});
});
Как вы можете видеть, приведенный выше код теперь обфусцирован, что значительно усложняет его понимание человеком. Это отличный способ защитить свой код JavaScript от хакеров и посторонних глаз.
Обфускация — это отличный способ скрыть бизнес-логику от посторонних глаз, а также сделать размер вашего js-файла намного меньше, чтобы его можно было легче передать.