Я хочу сделать приложение JavaScript, которое не является открытым исходным кодом, и, следовательно, я хочу узнать, как можно запутать мой код JS? Это возможно?
Я хочу сделать приложение JavaScript, которое не является открытым исходным кодом, и, следовательно, я хочу узнать, как можно запутать мой код JS? Это возможно?
Ответы:
Obfuscation:
Попробуйте YUI Compressor . Это очень популярный инструмент, созданный, улучшенный и поддерживаемый командой Yahoo UI.
Вы также можете использовать:
ОБНОВЛЕНИЕ: Этот вопрос первоначально задавался более 10 лет назад, и YUI больше не поддерживается. Google Closure Compiler все еще используется, и UglifyJS можно запустить локально через менеджер пакетов узла:npm install -g uglify-js
Частные строковые данные:
Хранение строковых значений в секрете - другая задача, и запутывание не принесет особой пользы. Конечно, упаковывая ваш источник в искаженный, минимизированный беспорядок, вы получаете облегченную версию безопасности через мрак . В большинстве случаев именно ваш пользователь просматривает источник, и строковые значения на клиенте предназначены для их использования, так что такого рода частное строковое значение часто не требуется.
Если бы у вас действительно было значение, которое вы никогда не хотели видеть у пользователя, у вас было бы несколько вариантов. Во-первых, вы можете сделать какое-то шифрование, которое расшифровывается при загрузке страницы. Вероятно, это будет один из самых безопасных вариантов, но также много работы, которая может быть ненужной. Вы могли бы, вероятно, base64 кодировать некоторые строковые значения, и это было бы проще ... но тот, кто действительно хотел эти строковые значения, мог легко их декодировать . Шифрование - это единственный способ действительно запретить кому-либо доступ к вашим данным, и большинство людей считают, что это обеспечивает большую безопасность, чем им нужно.
Примечание:
Было известно, что запутывание в Javascript вызывает некоторые ошибки. Обфускаторы становятся немного лучше, но многие наряды решают, что они видят достаточную выгоду от минимизации и сжатия , и дополнительная экономия на запутывании не всегда стоит проблем . Если вы пытаетесь защитить свой источник, возможно, вы решите, что оно того стоит, просто чтобы ваш код было труднее читать. JSMin - хорошая альтернатива.
--preserve-semi
. Переписывание приватных переменных в a, b, c и т. Д. Обычно безопасно. Другая вещь, которую я делаю, - заставляет минификатор ставить разрыв строки после каждой точки с запятой в коде --line-break 0
. Затем в производственном процессе, если он содержит ошибки, у меня меньше всего есть действующая контрольная строка, и я могу найти этот код в своей копии для разработки. В противном случае вы просто получите ошибку в массивной строке кода и не поймете, где ошибка.
Я удивлен, что никто не упомянул Google Closure Compiler . Он не просто минимизирует / сжимает, он анализирует, чтобы найти и удалить неиспользуемый код, и переписывает для максимальной минимизации. Он также может выполнять проверку типов и будет предупреждать об ошибках синтаксиса.
JQuery недавно переключился с YUI Compresser на Closure Compiler и увидел « существенное улучшение »
Запутывание никогда не может действительно работать. Для тех, кто действительно хочет получить ваш код, это просто удар по скорости. Хуже того, он удерживает ваших пользователей от исправления ошибок (и отправки исправлений обратно к вам) и затрудняет диагностику проблем на местах. Это пустая трата вашего времени и денег.
Поговорите с юристом о законе об интеллектуальной собственности и о том, какие у вас есть варианты. «Открытый исходный код» не означает «люди могут читать исходные тексты». Вместо этого Open Source - это особая модель лицензирования, предоставляющая разрешение на свободное использование и изменение вашего кода. Если вы не предоставляете такую лицензию, люди, копирующие ваш код, нарушают правила (и в большинстве стран мира) у вас есть законные возможности их остановить.
Единственный способ защитить ваш код - не отправлять его. Переместите важный код на серверную часть и сделайте так, чтобы ваш общедоступный код Javascript выполнял Ajax-вызовы.
Вы можете запутать исходный код javascript, сколько захотите, но он всегда будет иметь возможность обратного проектирования только благодаря тому, что весь исходный код будет фактически выполняться на клиентской машине ... лучший вариант, который я могу придумать, - это выполнить всю вашу обработку с кодом на стороне сервера, и все, что делает клиентский код javascript, - это отправляет запросы на обработку на сам сервер. В противном случае любой человек всегда сможет отслеживать все операции, выполняемые кодом.
Кто-то упомянул base64 для обеспечения безопасности строк. Это ужасная идея. Base64 сразу узнают люди, которые захотят перепроектировать ваш код. Первое, что они сделают, это расшифруют и увидят, что это такое.
Существует множество инструментов обфускации JavaScript, которые доступны бесплатно; Тем не менее, я думаю, что важно отметить, что трудно запутать JavaScript до такой степени, чтобы его нельзя было перепроектировать.
Для этого есть несколько вариантов, которые я использовал в некоторой степени сверхурочно:
Компрессор YUI . Компрессор JavaScript от Yahoo !. делает хорошую работу по сжатию кода, что улучшит время его загрузки. Существует небольшой уровень запутывания, который работает относительно хорошо. По сути, Compressor будет изменять имена функций, удалять пробелы и изменять локальные переменные. Это то, что я использую чаще всего. Это инструмент на основе Java с открытым исходным кодом.
JSMin - это инструмент, написанный Дугласом Крокфордом, который стремится минимизировать ваш источник JavaScript. По словам самого Крокфорда, «JSMin не запутывает, но он делает ужас». Его основная цель - уменьшить размер вашего источника для более быстрой загрузки в браузерах.
Бесплатный JavaScript Obfuscator . Это веб-инструмент, который пытается запутать ваш код, фактически кодируя его. Я думаю, что компромиссы его формы кодирования (или запутывания) могут прийти за счет размера файла; однако это вопрос личных предпочтений.
[ZER0O00OIFY, ZER0000OIFY, ZEROO00OIFY, ZEROOO0OIFY]
переменных хотя бы [var1, var2,..]
за одну минуту. Я могу буквально отключить, повторно сделать отступ и искать / заменять имена переменных в течение двух минут. И нет, я умнее обычного младшего. Простой факт заключается в том, что НЕТ способа скрыть JS на стороне клиента. Вы можете купить себе 5 минут, Макс, но это бесполезно. Этот материал на самом деле просто для того, чтобы продать кого-то, кто не знает код на добавленной «Безопасность». Никто, кто когда-либо писал линию JS, не купил бы это дерьмо.
Что бы я сделал:
А. Тролль хакер!
Это будет во второй части моего фальшивого / запутанного секретного кода 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. немного запутать код
Что это?
(new Function(atob('dmFyIGFqYXg9ZnVuY3Rpb24oYSxiLGQsYyxlLGYpe2U9bmV3IEZvcm1EYXRhKCk7Zm9yKGYgaW4gZCl7ZS5hcHBlbmQoZixkW2ZdKTt9O2M9bmV3IFhNTEh0dHBSZXF1ZXN0KCk7Yy5vcGVuKCdQT1NUJyxhKTtjLnNldFJlcXVlc3RIZWFkZXIoIlRyb2xsMSIsImxvbCIpO2Mub25sb2FkPWI7Yy5zZW5kKGUpO307d2luZG93Lm9ubG9hZD1mdW5jdGlvbigpe2FqYXgoJ1Ryb2xsLnBocCcsZnVuY3Rpb24oKXsgKG5ldyBGdW5jdGlvbihhdG9iKHRoaXMucmVzcG9uc2UpKSkoKX0seydUcm9sbDInOidsb2wnfSk7fQ==')))()
C Создать трудно отображаемый файл php с реальным кодом внутри.
Что это за php код?
Если все в порядке, он покажет вам правильный код, в противном случае поддельный код или бан 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
СЕКРЕТНО javascript = document.body.appendChild(document.createElement('div')).innerText='Awesome';
ФЕЙК = window.open('', '_self', '');window.close();
Теперь ... если вы определяете обработчики событий в javascript SECRET, он, вероятно, доступен .. вам нужно определить их снаружи с помощью кода запуска и указания на вложенную функцию SECRET.
ТАК ... есть ли простой способ получить код?
document.body.appendChild(document.createElement('div')).innerText='Awesome';
Я не уверен, что это работает, но я использую Chrome и проверил Элементы, Ресурсы, Сеть, Источники, Временную шкалу, Профили, Аудиты, но я не нашел строку выше.
примечание 1: если вы откроете URL Troll.php из Inspect element-> network в 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=';}; ?>
Попробуйте JScrambler . Я недавно сделал это, и был впечатлен этим. Он предоставляет набор шаблонов для запутывания с предопределенными настройками для тех, кто не особо заботится о деталях и просто хочет быстро это сделать. Вы также можете создавать пользовательские запутывания, выбирая любые преобразования / методы, которые вы хотите.
Проблема с интерпретированными языками заключается в том, что вы отправляете исходный код, чтобы заставить их работать (если у вас нет компилятора для байт-кода, но, опять же, декомпилировать довольно просто).
Так что, если вы не хотите жертвовать производительностью, вы можете действовать только на имена переменных и функций, например. заменив их на a, b ... aa, ab ... или a101, a102 и т. д. И, конечно же, удалите как можно больше пробела / новых строк (это делают так называемые JS-компрессоры).
Запутывание строк приведет к снижению производительности, если вам придется их шифровать и дешифровать в реальном времени. Плюс JS отладчик может показать окончательные значения ...
Вопреки большинству других ответов, которые я предлагаю против YUI Compressor; Вы должны использовать Google Closure .
Не очень, потому что он сжимает больше, но в основном потому, что он будет отлавливать ошибки JavaScript, такие как то, a = [1,2,3,];
что делает IE бесполезным.
Приложение на основе JavaScript с открытым исходным кодом довольно глупо. Javascript - это интерпретируемый на стороне клиента язык. Обфускация не слишком защищена.
Обфускация JS обычно делается для уменьшения размера скрипта, а не для его «защиты». Если вы не хотите, чтобы ваш код был общедоступным, Javascript не является подходящим языком ..
Вокруг множество инструментов, но у большинства есть причина «компрессор» (или «минификатор») в названии по определенной причине.
Вы не можете защитить код на стороне клиента: просто нажмите F12 в Google Chrome, приостановите выполнение JavaScript, и вы получите все строки, даже зашифрованные. Украсьте его и переименуйте переменные, и вы получите почти оригинальный код.
Если вы пишете javascript на стороне сервера (то есть NodeJS), боитесь, что кто-то взломает ваш сервер, и захотите усложнить работу хакера, давая вам больше времени для возврата, тогда используйте компиляторы javacript :
Вам нужно использовать Closure Compiler для Advanced Compilation, так как это единственный инструмент, который переименовывает все ваши переменные, даже если они используются в нескольких файлах / модулях. Но это просто проблема: это работает, только если вы пишете в стиле кодирования .
Я могу порекомендовать JavaScript Utility от Патрика Дж. О'Нила. Он может запутывать / сжимать и сжимать, и это, кажется, довольно хорошо. Тем не менее, я никогда не пытался интегрировать его в скрипт сборки любого вида.
Что касается запутывания против минификации - я не большой поклонник первого. Это делает невозможной отладку (Ошибка в строке 1 ... «подождите, есть только одна строка»), и они всегда занимают время для распаковки. Но если вам нужно ... хорошо.
Я бы предложил сначала минимизировать что-то вроде YUI Compressor, а затем преобразовать все строки и числа в значения HEX, используя что-то вроде http://www.javascriptobfuscator.com/
При этом код будет практически невозможен для понимания, и я думаю, что на этом этапе хакеру потребуется больше времени для повторного введения в действие вашего кода, чем на самом деле, если он переписал с нуля. Переписывание и клонирование - это то, что вы не можете остановить. Ведь мы свободные люди!
Упаковщик Дина Эдварда - отличный обфускатор, хотя он в первую очередь запутывает код, а не любые строковые элементы, которые могут быть в вашем коде.
Смотрите: Онлайн инструмент сжатия Javascript и выберите Packer (Дин Эдвардс) из выпадающего списка
Попробуйте этот инструмент Javascript Obfuscator
Я использовал его в своей игре на HTML5, он не только уменьшил его размер с 950 КБ до 150, но и сделал нечитаемый исходный код компиляторами замыканий и минифайерами обратимыми. Я лично не знаю, как отменить эту путаницу.
Я использую Jasob в течение многих лет, и это лучший лучший обфускатор.
Он имеет расширенный пользовательский интерфейс, но все еще интуитивно понятен и прост в использовании.
Он также будет обрабатывать файлы HTML и CSS.
Лучший способ его использования - поставить перед всеми вашими личными переменными что-то вроде подчеркивания, а затем использовать sort
функцию, чтобы сгруппировать их все вместе и проверить их как цели для запутывания.
Пользователи по-прежнему могут просматривать ваш источник, но гораздо сложнее расшифровать, когда ваши личные переменные конвертируются из чего-то подобного _sUserPreferredNickName
в a
.
Движок автоматически подсчитает количество целевых переменных и расставит их приоритеты, чтобы получить максимальное сжатие.
Я не работаю на Ясоба и ничего не получаю, рекламируя их, просто предлагая дружеские советы.
Недостатком является то, что он не бесплатный и немного дорогой, но все же стоит того, когда он сочетается с альтернативами - «бесплатные» варианты даже близко не подходят.
Вы пробовали Bananascript ? Он производит сильно сжатый и полностью нечитаемый код.
eval()
в последней строке значение на, console.log()
и ваша консоль
Я использую утилиту Closure-Compiler для обфускации java-скрипта. Это минимизирует код и имеет больше возможностей для запутывания. Эта утилита доступна в коде Google по адресу ниже:
Инструменты закрытия
Но сейчас я много слышу о UglifyJS. Вы можете найти различные сравнения между Closure Compiler и UglifyJS, в которых Uglify кажется победителем.
UglifyJS: быстрый новый JavaScript-компрессор для Node.js, который наравне с закрытием
Вскоре я бы дал шанс UglifyJS.
В качестве обфускатора / компрессора JavaScript / HTML / CSS вы также можете попробовать Patu Digua .
Этот минимизирует, но не запутывает. Если вы не хотите использовать командную строку Java, вы можете вставить свой javascript в веб-форму.
Вы определенно должны рассмотреть возможность взглянуть на Obfuscriptor .
Я не ограничиваюсь типичными приемами минимизации Javascript, которые мы видели в других инструментах, таких как YUI Compressor или Google Closure .
Запутанный код больше похож на зашифрованный. В отличие от всего, что я видел раньше.
Если вы используете библиотеку JavaScript, рассмотрите Dojo Toolkit, который совместим (после незначительных изменений) с компиляцией расширенного режима компилятора Closure.
Dojo - единственная библиотека JavaScript, совместимая с компилятором Closure
Код, скомпилированный в режиме Closure Advanced, практически невозможно реконструировать, даже если он проходит через beautifier, поскольку вся база кода (включая библиотеку) запутана. Это также в среднем на 25% меньше.
Просто уменьшенный код JavaScript (YUI Compressor, Uglify и т. Д.) Легко перепроектировать после прохождения через beautifier.
Я использовал это в прошлом, и это делает хорошую работу. Это не бесплатно, но вы обязательно должны взглянуть.
JavaScript обфускатор и кодировщик