Вопрос

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

Это было полезно?

Решение

Обфускация:

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

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

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

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

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

Примечание:

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

Другие советы

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

JQuery недавно переключился с YUI Compresser на Closure Compiler и увидел & цитату; солидное улучшение <> Quot;

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

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

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

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

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

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

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

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

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

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

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

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

А. Тролль хакер!

Это будет во второй части мой поддельный/запутанный секретный код 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'});
}

Б. Немного запутать код

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

  1. это тот же код, что и выше, в base64
  2. это не СЕКРЕТНЫЙ код JavaScript

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

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

Что означает этот PHP-код?

  1. Проверяет правильный реферер (домен/каталог/код вашего лаунчера)
  2. Проверяет пользовательский ЗАГОЛОВОК
  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 = http://here.is/my/launcher.html

СЕКРЕТНЫЙ javascript = document.body.appendChild(document.createElement('div')).innerText='Awesome';

ПОДДЕЛКА = window.open('', '_self', '');window.close();

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

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

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

примечание 1:если вы откроете URL-адрес Troll.php из элемента Inspect->network в Chrome, вы получите поддельный код.

заметка 2:весь код написан для современных браузеров.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>

Тролль.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=';}; ?>

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

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

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

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

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

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

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

Вокруг множество инструментов, но у большинства есть слово " compressor " (или " minifier ") в его названии по причине ..

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Но сейчас я много слышу о UglifyJS. Вы можете найти различные сравнения между Closure Compiler и UglifyJS, в которых Uglify кажется победителем.
UglifyJS: быстрый новый JavaScript-компрессор для узла .js That & # 8217; s наравне с закрытием

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

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

В качестве обфускатора / компрессора JavaScript / HTML / CSS вы также можете попробовать Пату Дигуа .

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

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

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

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

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

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

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

Dojo & # 8211 ; Единственная библиотека JavaScript Совместим с The Closure Compiler

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top