Подтвердить что ты не робот

Как я могу запутать (защитить) JavaScript?

Я хочу сделать приложение JavaScript, которое не является открытым исходным кодом, и поэтому я хочу узнать, как можно запутать мой JS-код? Возможно ли это?

4b9b3361

Ответ 1

Obfuscation:

Попробуйте Компрессор YUI. Это очень популярный инструмент, встроенный, улучшенный и поддерживаемый командой UI Yahoo.

Вы также можете использовать:

Данные частной строки:

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

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

Sidenote:

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

Ответ 2

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

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

Ответ 3

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

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

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

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

Ответ 4

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

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

Ответ 5

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

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

  • Компрессор YUI. Yahoo! JavaScript-компрессор делает хорошую работу по уплотнению кода, который улучшит время загрузки. Существует небольшой уровень обфускации, который работает относительно хорошо. По сути, Compressor будет изменять имена функций, удалять пустое пространство и изменять локальные переменные. Это то, что я использую чаще всего. Это инструмент Java с открытым исходным кодом.

  • JSMin - это инструмент, написанный Дугласом Крокфордом, который пытается минимизировать ваш источник JavaScript. В собственных словах Крокфорда "JSMin не запутывает, но он угадает". Основная цель состоит в том, чтобы минимизировать размер вашего источника для более быстрой загрузки в браузерах.

  • Бесплатный обфускатор JavaScript. Это веб-инструмент, который пытается обфускать ваш код, фактически кодируя его. Я думаю, что компромиссы его формы кодирования (или обфускации) могут зависеть от размера файлов; однако, это вопрос личных предпочтений.

Ответ 6

Что я буду делать:

A. Тролль-хакер!

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

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

  • загружает реальный код
  • устанавливает пользовательский заголовок
  • публикует пользовательскую переменную

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. Обмагивание кода немного

Что это?

  • тот же код, что и выше, в base64
  • это не SECRET код javascript

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

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

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

  • Проверяет правильный реферер (домен/директория/код вашей пусковой установки)
  • Проверяет пользовательский HEADER
  • Проверяет пользовательскую переменную 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: весь код написан для современных браузеров. polyfill требуется гораздо больше кода.

ИЗМЕНИТЬ

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=';}; ?>

Ответ 7

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

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

Ответ 8

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

Ответ 9

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

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

Ответ 10

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

JS obfuscation обычно делается для уменьшения размера script, а не для "защиты". Если вы находитесь в ситуации, когда вы не хотите, чтобы ваш код был общедоступным, Javascript - неправильный язык.

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

Ответ 11

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

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

Ответ 12

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

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

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

Ответ 13

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

Смотрите: Онлайн-инструмент сжатия Javascript и выберите Пакер (Дин Эдвардс) из раскрывающегося меню

Ответ 14

Существует альфа-версия компрессора Obfuscator довольно хорошо, вы можете сообщить об ошибке cna, если после обфускации ваш код не запускается.

Обфускация javascript с грязным кодом

Ответ 16

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

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

Ответ 17

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

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

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

Ответ 18

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

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

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

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

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

Ответ 19

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

Ответ 20

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

Ответ 21

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

Ответ 22

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

Ответ 23

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

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

Ответ 24

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

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

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

Ответ 25

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

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

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

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

Ответ 26

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