Возможно ли запутать JavaScript-код приложения NodeJS? [Дубликат]

Что вам нужно понять, так это объем переменных в javascript, основанный на функции. Это важная разница, чем, скажем, c #, где у вас есть область блока, и просто копирование переменной в единицу внутри будет работать.

Обертывание ее в функции, которая оценивает возвращение функции, как ответ афкакера, сделает трюк, так как переменная теперь имеет область видимости функции.

Существует также ключевое слово let вместо var, что позволит использовать правило области блока. В этом случае определение переменной внутри for сделает трюк. Тем не менее, ключевое слово let не является практическим решением из-за совместимости.

var funcs = {};
for (var i = 0; i < 3; i++) {
    let index = i;          //add this
    funcs[i] = function() {            
        console.log("My value: " + index); //change to the copy
    };
}
for (var j = 0; j < 3; j++) {
    funcs[j]();                        
}
664
задан Chuck Le Butt 16 May 2016 в 12:57
поделиться

23 ответа

Вы определенно должны рассмотреть возможность взглянуть на Obfuscriptor .

Я выхожу за пределы типичных трюков Javascript, которые мы видели из других инструментов, таких как YUI Compressor или Google Closure .

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

388
ответ дан Mike 25 August 2018 в 00:51
поделиться

Как обфускатор / компрессор JavaScript / HTML / CSS вы также можете попробовать Patu Digua .

3
ответ дан Adrian 25 August 2018 в 00:51
поделиться

Попробуйте JScrambler . Я недавно дал ему отклик и был впечатлен им. Он предоставляет набор шаблонов для обфускации с предопределенными настройками для тех, кто не заботится о деталях и просто хочет быстро это сделать. Вы также можете создавать пользовательскую обфускацию, выбирая любые преобразования / методы, которые вы хотите.

18
ответ дан Chad Hedgcock 25 August 2018 в 00:51
поделиться

Этот параметр уменьшает , но не запутывает. Если вы не хотите использовать командную строку Java, вы можете вставить свой javascript в веб-форму.

3
ответ дан Chris S 25 August 2018 в 00:51
поделиться

Что бы я сделал:

A. Troll the hacker!

Это будет во второй части мой поддельный / запутанный секретный код javascript LAUNCHER.

Что этот код?

  1. загружает реальный код
  2. устанавливает пользовательский заголовок
  3. помещает пользовательскую переменную

var ajax=function(a,b,d,c,e,f){
 e=new FormData();
 for(f in d){e.append(f,d[f]);};
 c=new XMLHttpRequest();
 c.open('POST',a);
 c.setRequestHeader("Troll1","lol");
 c.onload=b;
 c.send(e);
};
window.onload=function(){
 ajax('Troll.php',function(){
  (new Function(atob(this.response)))()
 },{'Troll2':'lol'});
}

B.

  1. , который имеет тот же код, что и выше в base64
  2. , это не код javascript SECRET

    g4]


(new Function(atob('dmFyIGFqYXg9ZnVuY3Rpb24oYSxiLGQsYyxlLGYpe2U9bmV3IEZvcm1EYXRhKCk7Zm9yKGYgaW4gZCl7ZS5hcHBlbmQoZixkW2ZdKTt9O2M9bmV3IFhNTEh0dHBSZXF1ZXN0KCk7Yy5vcGVuKCdQT1NUJyxhKTtjLnNldFJlcXVlc3RIZWFkZXIoIlRyb2xsMSIsImxvbCIpO2Mub25sb2FkPWI7Yy5zZW5kKGUpO307d2luZG93Lm9ubG9hZD1mdW5jdGlvbigpe2FqYXgoJ1Ryb2xsLnBocCcsZnVuY3Rpb24oKXsgKG5ldyBGdW5jdGlvbihhdG9iKHRoaXMucmVzcG9uc2UpKSkoKX0seydUcm9sbDInOidsb2wnfSk7fQ==')))()

C Создайте жесткий файл php с реальным кодом внутри

Что делает этот php-код?

  1. Проверяет правильный реферер (домен / dir / код вашей пусковой установки)
  2. Проверяет пользовательский HEADER
  3. Проверяет пользовательскую переменную POST

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

<?php
$t1=apache_request_headers();
if(base64_encode($_SERVER['HTTP_REFERER'])=='aHR0cDovL2hlcmUuaXMvbXkvbGF1bmNoZXIuaHRtbA=='&&$_POST['Troll2']=='lol'&&$t1['Troll1']='lol'){
 echo 'ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSkuaW5uZXJUZXh0PSdBd2Vzb21lJzsNCg==';//here is the SECRET javascript code
}else{
 echo 'd2luZG93Lm9wZW4oJycsICdfc2VsZicsICcnKTt3aW5kb3cuY2xvc2UoKTs=';
};
?>

base64 referrer = http://here.is/my/launcher.html

SECRET javascript = document.body.appendChild(document.createElement('div')).innerText='Awesome';

FAKE = window.open('', '_self', '');window.close();

Теперь .. если вы определяете обработчики событий в javascript SECRET, это, вероятно, доступно .. вам нужно определить их снаружи с помощью запускать код и указывать на вложенную функцию SECRET.

SO ... есть ли простой способ получить код? document.body.appendChild(document.createElement('div')).innerText='Awesome';

Я не уверен, что это работает, но я использую хром и проверенные элементы, ресурсы, сеть, источники, временные рамки, профили, аудиты, но я не нашел строку выше.

note1: если u открыть URL Troll.php из Inspect element-> network in chrome, вы получите поддельный код.

note2: весь код написан для современных браузеров.

launcher.html

<!doctype html><html><head><meta charset="utf-8"><title></title><script src="data:application/javascript;base64,KG5ldyBGdW5jdGlvbihhdG9iKCdkbUZ5SUdGcVlYZzlablZ1WTNScGIyNG9ZU3hpTEdRc1l5eGxMR1lwZTJVOWJtVjNJRVp2Y20xRVlYUmhLQ2s3Wm05eUtHWWdhVzRnWkNsN1pTNWhjSEJsYm1Rb1ppeGtXMlpkS1R0OU8yTTlibVYzSUZoTlRFaDBkSEJTWlhGMVpYTjBLQ2s3WXk1dmNHVnVLQ2RRVDFOVUp5eGhLVHRqTG5ObGRGSmxjWFZsYzNSSVpXRmtaWElvSWxSeWIyeHNNU0lzSW14dmJDSXBPMk11YjI1c2IyRmtQV0k3WXk1elpXNWtLR1VwTzMwN2QybHVaRzkzTG05dWJHOWhaRDFtZFc1amRHbHZiaWdwZTJGcVlYZ29KMVJ5YjJ4c0xuQm9jQ2NzWm5WdVkzUnBiMjRvS1hzZ0tHNWxkeUJHZFc1amRHbHZiaWhoZEc5aUtIUm9hWE11Y21WemNHOXVjMlVwS1Nrb0tYMHNleWRVY205c2JESW5PaWRzYjJ3bmZTazdmUT09JykpKSgp"></script></head><body></body></html>

Troll.php

<?php $t1=apache_request_headers();if(/*base64_encode($_SERVER['HTTP_REFERER'])=='PUT THE LAUNCHER REFERER HERE'&&*/$_POST['Troll2']=='lol'&&$t1['Troll1']='lol'){echo 'ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSkuaW5uZXJUZXh0PSdBd2Vzb21lJzsNCg==';}else{echo 'd2luZG93Lm9wZW4oJycsICdfc2VsZicsICcnKTt3aW5kb3cuY2xvc2UoKTs=';}; ?>

EDIT

22
ответ дан cocco 25 August 2018 в 00:51
поделиться

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

Поговорите с адвокатом об законодательстве об интеллектуальной собственности и о ваших юридических вариантах. «Open Source» не означает, что «люди могут читать источник». Вместо этого Open Source - это определенная модель лицензирования, предоставляющая разрешение на свободное использование и изменение вашего кода. Если вы не предоставляете такую ​​лицензию, тогда люди, которые копируют ваш код, нарушают и (в большинстве стран мира), у вас есть законные варианты, чтобы остановить их.

Единственный способ защитить код действительно чтобы не отправить его. Переместите важный код на стороне сервера и получите свой общедоступный код Javascript, чтобы Ajax вызывал его.

См. Мой полный ответ об обфускаторах здесь.

115
ответ дан Community 25 August 2018 в 00:51
поделиться

Приложение с открытым исходным кодом на основе Javascript довольно глупо. Javascript - интерпретируемый язык на стороне клиента. Obfuscation - это не большая защита.

Обфускация JS обычно выполняется, чтобы уменьшить размер скрипта, а не «защищать» его. Если вы находитесь в ситуации, когда вы не хотите, чтобы ваш код был общедоступным, Javascript не подходит для языка.

Существует множество инструментов, но большинство из них имеют слово «компрессор» ( или "minifier") на свое имя по причине ..

13
ответ дан dbr 25 August 2018 в 00:51
поделиться

Я бы предложил сначала минимизировать что-то вроде YUI Compressor, а затем преобразовать всю строку и числа в значения HEX, используя что-то вроде http://www.javascriptobfuscator.com/

При этом код будет практически недоступен для понимания, и я думаю, что на этом этапе потребуется больше времени, чтобы Хакер мог повторно ввести ваш код, чем на самом деле, если он переписал с нуля. Переписывание и клонирование - это то, что вы не можете остановить. Ведь мы свободные люди!

4
ответ дан Dynamite Blitzer 25 August 2018 в 00:51
поделиться

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

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

50
ответ дан El Ronnoco 25 August 2018 в 00:51
поделиться

Вы не можете защитить код на стороне клиента: просто нажмите F12 в Google Chrome, приостановите выполнение javascript , и вы получите все строки, даже зашифрованные. Украсить it и переименовать переменные , и вы получите почти исходный код.

Если вы пишете JavaScript на стороне сервера (то есть NodeJS) боится кто-то взломает ваш сервер и хочет, чтобы хакер усложнил работу, давая вам больше времени, чтобы получить ваш доступ, а затем используйте компиляторы javacript :

Вам нужно использовать Closure Compiler на Advanced Compilation, так как это единственный инструмент, который переименовывает все ваши переменные, даже если они используются в нескольких файлах / модулях. Но у него просто проблема: он работает только в том случае, если вы введете стиль кодирования .

11
ответ дан Gustavo Rodrigues 25 August 2018 в 00:51
поделиться

Я использовал это в прошлом, и он неплохо работает. Это не бесплатно, но вы должны обязательно взглянуть. JavaScript Obfuscator & amp; Кодер

2
ответ дан Henry 25 August 2018 в 00:51
поделиться

Я удивлен, что никто не упомянул компилятор Google Closure . Это не просто minify / compress, он анализирует, чтобы найти и удалить неиспользуемый код, и переписывает для максимальной минимизации. Он также может выполнять проверку типов и будет предупреждать о синтаксических ошибках.

Недавно JQuery переключился с YUI Compresser на Closure Compiler и увидел «улучшение »

129
ответ дан Jason Hall 25 August 2018 в 00:51
поделиться

Вопреки большинству других ответов, которые я предлагаю против YUI Compressor; вы должны использовать Google Closure .

Не так много, потому что он сжимает больше, но в основном потому, что он будет улавливать ошибки JavaScript, такие как a = [1,2,3,];, которые заставляют IE сходить с ума.

17
ответ дан jball 25 August 2018 в 00:51
поделиться

Попробуйте этот инструмент Javascript Obfuscator

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

3
ответ дан Jerczu 25 August 2018 в 00:51
поделиться

Вы пробовали Bananascript ? Он производит сильно сжатый и полностью нечитаемый код.

4
ответ дан niutech 25 August 2018 в 00:51
поделиться

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

Итак, если вы не хотите жертвовать производительностью, вы можете действовать только на имена переменных и функций, например. заменяя их a, b ... aa, ab ... или a101, a102 и т. д. И, конечно же, удалите столько пространства / новых строк, сколько сможете (это так называемые компрессоры JS). Обфускация строк будет иметь успех, если вы должны зашифровать их и расшифровать их в режиме реального времени. Кроме того, отладчик JS может показывать окончательные значения ...

17
ответ дан PhiLho 25 August 2018 в 00:51
поделиться

Я использую Jasob в течение многих лет, и это руки вниз лучший obfuscator там. Он имеет расширенный интерфейс, но по-прежнему интуитивно понятен и прост в использовании. Он также будет обрабатывать файлы HTML и CSS.

Лучший способ использовать это префикс для всех ваших private переменных чем-то вроде подчеркивания, а затем использовать функцию sort объединить их все вместе и проверить их как цели для обфускации.

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

Двигатель автоматически будет подсчитываться количество целевых переменных и приоритет их для получения максимального сжатия.

Я не работаю для Jasob, и я ничего не получаю от их продвижения, просто предлагая дружеские советы. Недостатком является то, что он не является бесплатным и немного дорогим, но все же стоит того, чтобы укладываться в альтернативные варианты - «свободные» варианты даже не приближаются.

4
ответ дан Shadow Wizard 25 August 2018 в 00:51
поделиться

Я использую утилиту Closure-Compiler для обфускации java-скрипта. Он минимизирует код и имеет больше возможностей для обфускации. Эта утилита доступна в коде Google по адресу ниже: Инструменты закрытия

Но теперь дни, когда я слышу большую часть UglifyJS. Вы можете найти различное сравнение между Closure Compiler и UglifyJS, в котором Uglify кажется победителем. UglifyJS: быстрый новый компрессор JavaScript для Node.js, который находится на грани с закрытием

Вскоре я бы дал шанс UglifyJS.

4
ответ дан shaILU 25 August 2018 в 00:51
поделиться

Packer Дина Эдварда - отличный обфускатор, хотя он в первую очередь запутывает код, а не любые строковые элементы, которые у вас могут быть в вашем коде.

См. Онлайн-инструмент сжатия Javascript и выберите Packer (Dean Edwards) из раскрывающегося списка

5
ответ дан smdrager 25 August 2018 в 00:51
поделиться

Если вы используете библиотеку JavaScript, рассмотрите Dojo Toolkit, который совместим (после незначительных изменений) с компиляцией расширенного режима Closure Compiler.

Dojo - Библиотека только JavaScript, совместимая с компилятором Closure

Код, скомпилированный с расширенным режимом Closure, практически невозможно перепрограммировать, даже проходя через декоратор, так как вся кодовая база кода (в том числе в библиотеке) обфускается , В среднем он также на 25%.

JavaScript-код, который просто минимизирован (YUI Compressor, Uglify и т. Д.), Легко реверсировать после прохождения через декодер.

2
ответ дан Stephen Chung 25 August 2018 в 00:51
поделиться

Существует ряд инструментов для обфускации JavaScript, которые свободно доступны; однако, я думаю, важно отметить, что трудно запутать JavaScript до такой степени, что он не может быть реконструирован.

С этой целью существует несколько вариантов, которые я использовал в некоторой степени сверхурочно:

  • Компрессор YUI . JavaScript! JavaScript-компрессор делает хорошую работу по уплотнению кода, который улучшит время загрузки. Существует небольшой уровень обфускации, который работает относительно хорошо. По сути, Compressor будет изменять имена функций, удалять пустое пространство и изменять локальные переменные. Это то, что я использую чаще всего. Это инструмент Java с открытым исходным кодом.
  • JSMin - это инструмент, написанный Дугласом Крокфордом, который пытается минимизировать ваш источник JavaScript. По словам Крокфорда, «JSMin не запутывает, но он угадает». Основной задачей является минимизация размера вашего источника для более быстрой загрузки в браузерах.
  • Бесплатный JavaScript Obfuscator . Это веб-инструмент, который пытается обфускать ваш код, фактически кодируя его. Я думаю, что компромиссы его формы кодирования (или обфускации) могут зависеть от размера файлов; однако это вопрос личных предпочтений.
44
ответ дан Tom 25 August 2018 в 00:51
поделиться

У меня создается впечатление, что некоторые предприятия (например, JackBe) помещают зашифрованный код JavaScript внутри * .gif-файлов, а не JS-файлов, в качестве дополнительной меры обфускации.

3
ответ дан xgMz 25 August 2018 в 00:51
поделиться

Я рекомендую JavaScript Utility Патрика Дж. О'Нила. Он может запутывать / сжимать и сжимать, и, похоже, это очень хорошо. Тем не менее, я никогда не пытался интегрировать его в скрипт сборки любого типа.

Что касается обфускации против минимизации - я не большой поклонник первого. Это делает невозможным отладку (Ошибка в строке 1 ... «Подождите, есть только одна строка»), и они всегда требуют времени для распаковки. Но если вам нужно ... хорошо.

11
ответ дан ʍǝɥʇɐɯ 25 August 2018 в 00:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: