Обфускация как метод защиты программного обеспечения

Установка de4js

Установка в Kali Linux

Установка необходимых пакетов:

sudo apt install npm ruby-dev zlib1g-dev
sudo gem install bundler

Получение исходного кода и установка зависимостей:

git clone https://github.com/lelinhtinh/de4js
cd de4js
bundle install

Установка Workbox CLI:

sudo npm install workbox-cli --global

Запуск сервера:

npm start

Или с выводом использования в реальном времени:

npm run watch

Сборка:

npm run build

Установка в BlackArch

Установка необходимых пакетов:

sudo pacman -S npm ruby zlib
sudo gem install bundler

Получение исходного кода и установка зависимостей:

git clone https://github.com/lelinhtinh/de4js
cd de4js
bundle install

Установка Workbox CLI:

sudo npm install workbox-cli --global

Запуск сервера:

npm start

Или с выводом использования в реальном времени:

npm run watch

Сборка:

npm run build

Установка в Debian, Linux Mint, Ubuntu

Установка необходимых пакетов:

sudo apt update
sudo apt install git npm ruby-dev zlib1g-dev
sudo gem install bundler

Получение исходного кода и установка зависимостей:

git clone https://github.com/lelinhtinh/de4js
cd de4js
bundle install

Установка Workbox CLI:

sudo npm install workbox-cli --global

Запуск сервера:

npm start

Или с выводом использования в реальном времени:

npm run watch

Сборка:

npm run build

Информация об установке в другие операционные системы будет добавлена позже.

6. JS Beautifier

JS Beautifier improves the appearance of JavaScript code by reformatting and indenting. In addition it knows how to unpack scripts packaged by the popular packer from Dean Edward. It can partially deobfuscate scripts processed by the npm javascript-obfuscator package. It is used to improve readability of JavaScript code.

The program is available as an online service from the authors: https://beautifier.io/

How to install JS Beautifier

Installation on Kali Linux

sudo apt install npm
sudo npm -g install js-beautify
js-beautify -h

Installation in BlackArch

There are two installation options – from repositories and as an NPM package. The Python version is available in BlackArch repositories, its features are that html-beautify is completely absent, and css-beautify cannot be installed due to an error. There are also some other differences.

If you want to install from standard repositories then run the following command:

sudo pacman -S python-jsbeautifier

If you want to install Node.js JavaScript version, then run the following commands:

sudo pacman -R python-jsbeautifier
sudo pacman -S npm
sudo npm -g install js-beautify
js-beautify -h

Windows installation

Start by installing Python in the article “How to install Python and PIP on Windows 10”.

After installing Python and PIP, run the commands:

sudo pip3 install jsbeautifier
sudo pip3 install cssbeautifier

How to install JS Beautifier on Debian, Linux Mint, Ubuntu you can find on this page: https://en.kali.tools/?p=1359

Usage:

jsbeautifier.py  <INPUT FILE>

For instance:

jsbeautifier.py  <INPUT FILE>

All js-beautify options:

CLI Options:
  -f, --file       Input file(s) (Pass '-' for stdin)
  -r, --replace    Write output in-place, replacing input
  -o, --outfile    Write output to file (default stdout)
  --config         Path to config file
  --type            
  -q, --quiet      Suppress logging to stdout
  -h, --help       Show this help
  -v, --version    Show the version

Beautifier Options:
  -s, --indent-size                 Indentation size 
  -c, --indent-char                 Indentation character 
  -t, --indent-with-tabs            Indent with tabs, overrides -s and -c
  -e, --eol                         Character(s) to use as line terminators.
                                    
  -n, --end-with-newline            End output with newline
  --indent-empty-lines              Keep indentation on empty lines
  --templating                      List of templating languages (auto,none,django,erb,handlebars,php)  auto = none in JavaScript, all in html
  --editorconfig                    Use EditorConfig to set up the options
  -l, --indent-level                Initial indentation level 
  -p, --preserve-newlines           Preserve line-breaks (--no-preserve-newlines disables)
  -m, --max-preserve-newlines       Number of line-breaks to be preserved in one chunk 
  -P, --space-in-paren              Add padding spaces within paren, ie. f( a, b )
  -E, --space-in-empty-paren        Add a single space inside empty paren, ie. f( )
  -j, --jslint-happy                Enable jslint-stricter mode
  -a, --space-after-anon-function   Add a space before an anonymous function's parens, ie. function ()
  --space_after_named_function      Add a space before a named function's parens, ie. function example ()
  -b, --brace-style                  
  -u, --unindent-chained-methods    Don't indent chained method calls
  -B, --break-chained-methods       Break chained method calls across subsequent lines
  -k, --keep-array-indentation      Preserve array indentation
  -x, --unescape-strings            Decode printable characters encoded in xNN notation
  -w, --wrap-line-length            Wrap lines that exceed N characters 
  -X, --e4x                         Pass E4X xml literals through untouched
  --good-stuff                      Warm the cockles of Crockford's heart
  -C, --comma-first                 Put commas at the beginning of new line instead of end
  -O, --operator-position           Set operator position (before-newline|after-newline|preserve-newline) 

5. Deobfuscation Obfuscator.IO

The author of the Obfuscator.IO website is looking for programs that are able to deobfuscate the code created on this service and constantly changes, fixes obfuscation, as a result of which the deobfuscation tools stop working. Therefore, automatic deobfuscation tools (including de4js) usually lag behind the most recent version, that is, they can deobfuscate the code created earlier on Obfuscator.IO, but cannot deobfuscate the latest version of the code. But this does not mean that this is a reliable tool to secure your source code – projects regularly appear that bypass all deobfuscation methods. In addition, custom-made specialists can deobfuscate any code.

javascript-obfuscator

工具

  • javascript-obfuscator/javascript-obfuscator 一个强大的JavaScript和Node.js模糊器,包含为源代码提供保护的各种特性
  • javascript-obfuscator/webpack-obfuscator javascript-obfuscator plugin for Webpack
  • javascript-obfuscator/javascript-obfuscator-ui A web UI to the JavaScript Obfuscator node.js package.
  • javascript-obfuscator/gulp-javascript-obfuscator Gulp plugin for javascript-obfuscator package.
  • javascript-obfuscator/obfuscator-loader A webpack loader for obfuscating single modules using javascript-obfuscator
  • tomasz-oponowicz/grunt-javascript-obfuscator Obfuscates JavaScript files using amazing javascript-obfuscator.
  • javascript-obfuscator/grunt-contrib-obfuscator Grunt plugin for the javascript-obfuscator package.

Browser extensions and other uses

  • A

    bookmarklet
    (drag it to your bookmarks) by Ichiro Hiroshi to see all scripts used on the page,

  • Chrome, in case the built-in CSS and javascript formatting isn’t enough for you:
    — Quick source viewer by Tomi Mickelsson (github, blog),
    — Javascript and CSS Code beautifier by c7sky,
    — jsbeautify-for-chrome by Tom Rix (github),
    — Pretty Beautiful JavaScript by Will McSweeney
    — Stackoverflow Code Beautify by Making Odd Edit Studios (github).
  • Firefox: Javascript deminifier by Ben Murphy, to be
    used together with the firebug (github),
  • Safari: Safari extension by Sandro Padin,
  • Opera: Readable JavaScript
    (github) by Dither,
  • Opera: Source extension by Deathamns,
  • Sublime Text 2/3: CodeFormatter, a python plugin by Avtandil Kikabidze, supports HTML, CSS, JS and a bunch of other languages,
  • Sublime Text 2/3: HTMLPrettify, a javascript plugin by Victor Porof,
  • Sublime Text 2: JsFormat, a javascript formatting plugin for this nice editor by Davis
    Clark,
  • vim: sourcebeautify.vim, a plugin by michalliu (requires node.js, V8, SpiderMonkey
    or cscript js engine),
  • vim: vim-jsbeautify, a plugin by Maksim Ryzhikov (node.js or V8 required),
  • Emacs: Web-beautify formatting package by Yasuyuki Oka,
  • Komodo IDE: Beautify-js addon by Bob de Haas (github),
  • C#: ghost6991 ported the javascript formatter to C#,
  • Go: ditashi has ported the javascript formatter to golang,
  • Beautify plugin (github) by HookyQR for the Visual Studio Code IDE,
  • Fiddler proxy: JavaScript Formatter addon,
  • gEdit tips by Fabio Nagao,
  • by Infocatcher,
  • Beautifier in Emacs write-up by Seth Mason,
  • Cloud9, a lovely IDE running in a browser, working in the node/cloud, uses jsbeautifier (github),
  • Devenir Hacker App, a non-free JavaScript packer for Mac,
  • REST Console, a request debugging tool for Chrome, beautifies JSON responses (github),
  • mitmproxy, a nifty SSL-capable HTTP proxy, provides pretty javascript responses (github).
  • wakanda, a neat IDE for web and mobile applications has a Beautifier extension
    (github).
  • Burp Suite now has a beautfier extension,
    thanks to Soroush Dalili,
  • Netbeans jsbeautify plugin by Drew Hamlett
    (github).
  • brackets-beautify-extension for Adobe Brackets by Drew
    Hamlett (github),
  • codecaddy.net, a collection of webdev-related tools, assembled by Darik Hall,
  • editey.com, an interesting and free Google-Drive oriented editor uses this beautifier,
  • a beautifier plugin for Grunt by Vishal Kadam,
  • SynWrite editor has a JsFormat plugin (rar, readme),
  • LIVEditor, a live-editing HTML/CSS/JS IDE (commercial, Windows-only) uses the library,

Doing anything interesting? Write us to team@beautifier.io so we can add your project to the list.

Written by Einar Lielmanis, maintained and evolved by Liam Newman.

We use the wonderful CodeMirror syntax highlighting editor, written by Marijn Haverbeke.

Made with a great help of Jason Diamond, Patrick Hof, Nochum Sossonko, Andreas Schneider,
Dave Vasilevsky,
Vital Batmanov, Ron Baldwin, Gabriel Harrison,
Chris J. Shull,
Mathias Bynens,
Vittorio Gambaletta,
Stefano Sanfilippo and
Daniel Stockman.

7. UglifyJS

Набор инструментов UglifyJS выполняет различные действия с кодом, написанном на JavaScript не изменяя его функциональность. Программа умеет парсить, сжимать, обфусцировать или, наоборот, делать более читаемым скрипты JavaScript.

В плане деобфускации UglifyJS умеет делать сжатый код JavaScript читаемым.

Установка в Kali Linux

sudo apt install uglifyjs

Установка в BlackArch

sudo pacman -S uglify-js

Пример запуска: для улучшения вида файла используется опция -b; файл (или несколько файлов) нужно указывать перед опциями:

uglifyjs medium.js -b

Также программа может обрабатывать файлы переданные по стандартному вводу:

cat medium.js | uglifyjs -b

Другие опции и возможности на странице https://kali.tools/?p=5594

Деобфускация Obfuscator.IO

Автор сайта Obfuscator.IO ищет программы, которые способны деобфусцировать созданный на этом сервисе код и постоянно меняет, исправляет обфускацию, в результате чего инструменты по деобфускации перестают работать. Поэтому инструменты автоматической деобфускации (включая de4js) обычно отстают от самой последней версии, то есть могут деобфусцировать код созданный ранее на Obfuscator.IO, но не могут деобфусцировать последнюю версию кода. Но это не означает, что это надёжный инструмент чтобы обезопасить свой исходный код — регулярно появляются проекты, которые обходят все методы деобфускации. К тому же, специалисты на заказ могут деобфусцировать любой код.

v0.24.0

  • Internal refactoring: completely new mechanism to rename variable names
  • Dynamic import and support. Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/505
  • Now usage of some browser-related options with will cause a validation error
  • Increased speed
  • CLI: a file path will be displayed on obfuscation error. Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/513
  • Fixed many runtime errors
  • Fixed error on large strings when option is enabled
  • Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/516
  • Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/512
  • Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/496
  • Internal: switched from on

Evaluating Loops

In order to evaluate loops, the static de-obfuscator must be able to evaluate all statements within the loop. The iteration count must also be definite and known.

The iteration count in a typical loop statements is determined by a variable, the loop control variable.

for (var i = ; i < 10; i++) // control variable = i

For reference, the following terms are used for the sub-expressions:

for (init expression; test expression; update expression) {
  statements
}

Given a function , which given an expression , returns the statically evaluated value of , the for loop can be emulated.

var result = ;
// Ommited for brevity: updating variable binding values 
while (d(test)) {
    result = statements.map(d)
    control = d(update) 
}
forLoop.replaceWith(result)

Example of a simple geometric series calculation:

Input Output
var c = 1for (var i = 0; i<3; i++) { c = c * 2} var c = 1;c = 8;

Loops meeting these criteria can be statically evaluated:

  • Control variable value must be known at all times during the iteration
  • Iteration count must be definite

The following kinds of statements are accepted inside the loop body:

  • Assignment with pure init expression
  • Variable declaration with pure init expression
  • Call to procedure (function body must meet the same criteria as loop body)

3. Универсальный деобфускатор JavaScript кода de4js

de4js — это деобфускатор исходного кода JavaScript и распаковщик.

Поддерживает (деобфусцирует) результат работы следующих инструментов, сервисов, методов:

  • Eval, используются, например, в Packer, WiseLoop
  • Array, используются, например, в Javascript Obfuscator, Free JS Obfuscator
  • Кодирование URL, используются, например, в bookmarklet
  • JSFuck

Информацию об установке и запуске вы найдёте на странице программы: https://kali.tools/?p=6514

de4js запускается как небольшой сервер к которому можно подключиться веб-браузером. То есть у программы веб-интерфейс.

Перейдите в папку с программой:

cd bin/de4js

Запустите сервер:

npm start

В веб-интерфейсе выберите один из способов ввода обфусцированного исходного кода:

  • String — вставить код в окно веб-интерфейса
  • Local File — выбрать локальный файл на компьютере
  • Remote File — указать адрес удалённого файла

Ниже вы можете указать способ, которым выполнялась обфускация кода JavaScript:

  • None
  • Eval
  • Array
  • Obfuscator IO
  • _Number
  • JSFuck
  • JJencode
  • AAencode
  • URLencode
  • Packer
  • JS Obfuscator
  • My Obfuscate
  • Wise Eval
  • Wise Function
  • Clean Source
  • Unreadable

Либо вы можете нажать кнопку «Auto Decode», чтобы de4js автоматически определила способ обфускации. Деобфусцированный код будет показан в окне ниже.

Дополнительные опции, которые вы можете включить или выключить:

  • Line numbers — показывать номера строк
  • Format Code — форматирование и подсветка синтаксиса кода
  • Unescape strings — перевод строк из экранированных последовательностей в нормальный вид
  • Recover object-path — восстановить object-path
  • Execute expression — вычислить выражения
  • Merge strings — объединить (слить) строки
  • Remove grouping — удаление группировки

Usage

Prints the help page on the screen

Shows the version of the obfuscator

Input JAR

Output JAR

Config File

Class Path

A JS file to script certain parts of the obfuscation

Sets the number of threads the obfuscator should use

Sets logging to verbose mode

Excluding Classes

In some situations you need to prevent certain classes from being obfuscated, such as dependencies packaged with your jar or mixins in a forge mod.

You will need to exclude in two places.

Scripting Tab

Here is an example script that will obfuscate and remap all classes except the org.json dependency and mixins.

function isRemappingEnabledForClass(node) {
    var flag1 = !node.name.startsWith("org/json");
    var flag2 = !node.name.startsWith("com/client/mixin");
    return flag1 && flag2;
}
function isObfuscatorEnabledForClass(node) {
    var flag1 = !node.name.startsWith("org/json");
    var flag2 = !node.name.startsWith("com/client/mixin");
    return flag1 && flag2;
}
Name Obfuscation

If you also want to exclude these classes from name obfuscation you will need to go to Transformers -> Name Obfuscation and add these exclusions there.

To Exclude the same classes as we did above, we would need to add the following to Excluded classes, methods and fields.

org.json.**
com.client.mixin.**

If your classes are still being obfuscated after applyinng both of these exclusions please open an issue.

FAQs

Why would I want to obfuscate my JavaScript code?

There’re a numerous reasons why it’s a good idea to protect your code, such as:

  • Prevent anyone from simply copy/pasting your work. This is specially important on 100% client side
    projects, such as HTML5 games;
  • Removal of comments and whitespace that aren’t needed. Making it faster to load and harder to
    understand;
  • Protection of work that hasn’t been paid yet. You can show your work to the client knowing that they
    won’t have the source code until the invoice has been paid.

After obfuscated, can I call a function or use a variable name which was defined within the
obfuscated file from outside, for example, HTML page or the other files?

Is this obfuscator absolutely foolproof?

No, while it’s impossible to recover the exact original source code, someone with the time, knowledge and
patience can reverse-engineer it.

Since the JavaScript runs on the browser, the browser’s JavaScript engine must be able to read and
interpret it, so there’s no way to prevent that. And any tool that promises that is not being
honest.

Why my obfuscated code is larger than my original source?

Because the obfuscator introduces new pieces of code that are meant to protect and defend against
debugging and reverse-engineering. Also strings are converted to hexadecimal code to
make things a little bit harder to understand. You don’t have to worry too much about code size because
since there’re a lot of repetition, the obfuscated code will be compressed extremely well by your
webserver (if you have GZIP compression enabled on your server, which most do nowadays).

Can I run a minifier such as UglifyJS or Google Closure Compiler on the obfuscated output?

No, it’s not recommended and in some cases it’ll break the code (such as if you enable self-defending).
You can run your code through a minifier before to make sure that it removes dead code and do other
optimizations, though.

Do you store my source code?

No. The source is processed by our application server, then to the obfuscator and back to the browser, so
it only stays on our server memory for a brief period of time (usually milliseconds).

I want to run the obfuscator on my own server/machine. Is it possible?

Sure. This tool uses a free and open source (BSD-2-Clause licensed) obfuscator written in TypeScript. You
can go to it’s
GitHub page and read more there.

6. JS Beautifier

Программа JS Beautifier улучшает внешний вид JavaScript кода за счёт переформатирования и проставления отступов. Также умеет распаковывать скрипты упакованные популярным пэкером от Dean Edward. Частично может деобфусцировать скрипты обработанные npm пакетом javascript-obfuscator. Применяется для улучшения читаемости JavaScript кода.

Установка JS Beautifier

Установка в Kali Linux

sudo apt install npm
sudo npm -g install js-beautify
js-beautify -h

Установка в BlackArch

Есть два варианта установки — из репозиториев и как NPM пакет. В репозиториях BlackArch доступна Python версия, её особенности в том, то html-beautify отсутствует вовсе, а css-beautify не устанавливается из-за ошибки. Также есть некоторые другие отличия.

Если вы хотите установить из стандартных репозиториев то выполните следующую команду:

sudo pacman -S python-jsbeautifier

Если вы хотите установить Node.js JavaScript версию, то выполните следующие команды:

sudo pacman -R python-jsbeautifier
sudo pacman -S npm
sudo npm -g install js-beautify
js-beautify -h

Установка в Windows

Начните с установки Python по статье «Как установить Python и PIP на Windows 10».

После установки Python и PIP выполните команды:

sudo pip3 install jsbeautifier
sudo pip3 install cssbeautifier

Использование:

jsbeautifier.py  <ВХОДНОЙ ФАЙЛ>

Например:

js-beautify -f medium.js

Все опции программ из набора инструментов JS Beautifier вы найдёте на странице https://kali.tools/?p=5581

3. Universal deobfuscator of JavaScript code de4js

de4js is a JavaScript source code deobfuscator and unpacker.

It supports (de-obfuscates) the result of the following tools, services, methods:

  • Eval, used for example in Packer, WiseLoop
  • Array, used for example in Javascript Obfuscator, Free JS Obfuscator
  • _Number
  • Packer
  • Javascript Obfuscator
  • Free JS Obfuscator
  • Obfuscator.IO (but does not always work, as this service is frequently updated, which requires updating the deobfuscator)
  • My Obfuscate
  • Кодирование URL, used for example in bookmarklet
  • JSFuck
  • JJencode
  • AAencode
  • WiseLoop

Information about installation and launch can be found on the program page: https://en.kali.tools/?p=1372

de4js runs as a small server to which you can connect with a web browser. That is, the program has a web interface.

Go to the folder with the program:

cd bin/de4js

Start the server:

npm start

In a web browser open the address http://127.0.0.1:4000/de4js/

In the web interface, select one of the following methods for entering obfuscated source code:

  • String – insert code into the web interface window
  • Local File – select a local file on the computer
  • Remote File – specify the URL address of a remote file

Below you can specify the way the JavaScript code was obfuscated:

  • None
  • Eval
  • Array
  • Obfuscator IO
  • _Number
  • JSFuck
  • JJencode
  • AAencode
  • URLencode
  • Packer
  • JS Obfuscator
  • My Obfuscate
  • Wise Eval
  • Wise Function
  • Clean Source
  • Unreadable

Alternatively, you can click the “Auto Decode” button for de4js to automatically detect the obfuscation method. The deobfuscated code will be shown in the window below.

Additional options that you can turn on or off:

  • Line numbers – show line numbers
  • Format Code – code formatting and syntax highlighting
  • Unescape strings – convert strings from escaped sequences to normal form
  • Recover object-path – restore object-path
  • Execute expression – perform arithmetic and other operations on expressions
  • Merge strings — concatenate strings
  • Remove grouping

de4js online: https://lelinhtinh.github.io/de4js/

Как установить графический интерфейс JavaScript Obfuscator

Установка веб интерфейса JavaScript Obfuscator в Kali Linux

sudo apt remove cmdtest
sudo apt install npm
sudo npm install -g yarn
sudo npm cache clean -f
sudo npm install -g n
sudo n stable
git clone https://github.com/javascript-obfuscator/javascript-obfuscator-ui
cd javascript-obfuscator-ui/
yarn
npm run updatesemantic
npm run webpack:dev
node server.js

Установка веб интерфейса JavaScript Obfuscator в BlackArch

sudo pacman -S npm yarn
git clone https://github.com/javascript-obfuscator/javascript-obfuscator-ui
cd javascript-obfuscator-ui/
yarn
npm run updatesemantic
npm run webpack:dev
node server.js

Информация об установке в другие операционные системы будет добавлена позже.

v0.10.0

  • New option: . With this option random blocks of dead code will add to the obfuscated code.
  • New option: allows to set percentage of nodes that will affected by .
  • New option: enables mangling of variable names.
  • New CLI option: allows to set config file with obfuscator options.
  • Breaking change: option now disabled by default.
  • Breaking change: option now disabled by default.
  • now affects string literal nodes.
  • Increased runtime performance with .
  • Added support for async functions
  • Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/71
  • Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/65
  • Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/60
  • Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/59
  • Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/54
  • Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/57
  • Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/58
  • Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/58

Evaluating Function Calls

  • New variable bindings are only valid inside the function body.
  • Bindings from the outer scope are available inside the function scope. (capturing)
  • Given multiple bindings with the same name, the inner-most bindings take precedence. (shadowing)
  • If the same function is called multiple times, the binding values may differ on each call.

Given a static context, not all function calls can be inlined. This can be caused by global state or inputs/arguments being unknowable. An implementation of static function call evaluation must therefore apply a set of rules to the call expression. Only if those rules are met, can the expression be simplified. The difficulty in implementing function call evaluation lies in deciding when a function can be inlined, without breaking the program or changing its observable behaviour.

Описание JavaScript Obfuscator

JavaScript Obfuscator — это мощный и бесплатный обфускатор для JavaScript и Node.js, содержащий большое количество функций и возможностей для защиты вашего исходного кода.

Доступен как в виде локального инструмента с открытым исходным кодом, так и в виде онлайн сервиса.

Что это такое?

Этот инструмент трансформирует ваш оригинальный исходный код JavaScript в новое представление, которое труднее понять, скопировать, повторно использовать и модифицировать без должного разрешения автора. Обфусцированный результат будет иметь в точности такую же функциональность, как и оригинальный код.

Этот инструмент похож на UglifyJS, Closure Compiler и пр.?

Да и нет. В то время как UglifyJS (и другие уменьшители) на выходе дают код, который труднее понять (сжатый или уродливый), используя JS Beautifier он может быть с лёгкостью трансформирован во что-то читаемое.

Этот инструмент предотвращает это, используя различные преобразования и «ловушки», такие как самозащита и защита от отладки.

Как работает обфускация?

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

Лицензия: BSD-2-Clause

2. JStillery

JStillery performs advanced JavaScript deobfuscation via partial evaluation.

JStillery can be used without installation – the program is available as an online service from the author: https://mindedsecurity.github.io/jstillery/.

Ho to install JStillery

Installation on Kali Linux

git clone https://github.com/mindedsecurity/JStillery
cd JStillery
sudo npm install

To compile the server (if you need not only a tool with a command line interface, but you also want to use the web interface):

npm run build_server

To start the server:

npm run start_server

After that, the web interface will be available at http://localhost:3001

Installation in BlackArch

sudo pacman -S jstillery

The use is very simple, just specify the path to the file for deobfuscation:

jstillery /path/to/file