Я хочу создать приложение JavaScript, не имеющее открытого исходного кода, и поэтому хочу узнать, как обфускировать мой код JS? Это возможно?
Единственный способ по-настоящему сохранить что-то в секрете - это не отправлять клиенту. Если у них его нет, они не могут это прочитать. Отправка его в зашифрованном виде просто вызывает проблемы у тех немногих, кому действительно небезразлично, а все остальные не будут копаться, даже если вы отправите его в открытом виде (например, DRM).
Вы можете попробовать этот один в Интернете и использовать функции сжатия CSS и JS.
Или utf-8.jp/public/aaencode.html
вот другое решение: stackoverflow.com/questions/2060984/…
@JasonC Ха-ха, я не видел этого раньше, но я видел потрясающий utf-8.jp/public/jjencode.html
Обфускация вашего кода не лучшая идея. Это только доставит неудобства законным пользователям (например, когда им нужно исправить ошибку) и ничего не сделает, чтобы «защитить» его от людей, у которых есть (финансовый) стимул перепроектировать его. Это принципиально невозможно для предотвращения обратной инженерии кода Javascript.
Как уже было сказано, ваш код никогда не будет безопасным с точки зрения копирования. Он может генерировать «самый уродливый» код, но если кто-то потратит достаточно времени, он сможет расшифровать ваш код.
Аргумент не запутывать меня кажется ошибочным. Если вы действительно не думаете, что ваши пользователи могут исправлять / сообщать об ошибках, вам следует это сделать. Это может уменьшить время загрузки за счет минимизации. Это никогда не остановит по-настоящему преданного хакера, но замедлит его / ее и остановит наполовину попытки взлома. Это очень легко сделать, и есть много инструментов (см. Другие ответы), я бы сказал, что обязательно сделайте это, поскольку в большинстве случаев есть только преимущества, но не ожидайте, что это принесет реальную безопасность или помешает кому-то копировать ваш код. если они действительно этого хотят. Единственный способ сделать это - сохранить сторону сервера кода и использовать ajax.
Большинство упомянутых здесь обфускаторов можно отменить, просто установив window.eval = console.info.bind(console); перед запуском скрипта. В лучшем случае результат после запуска будет таким же, как при запуске минификатора на оригинале, поэтому я не вижу никаких реальных преимуществ использования выделенного обфускатора перед простым использованием минификатора. Тем более, что запутанный код обычно более раздут (и загружается медленнее), чем минимизированный код.
В заключение: перед тем, как выбрать обфускатор, попробуйте запустить запутанный пример после установки var oldEval = window.eval; window.eval= function(x){console.info(x); return oldEval(x)}. Затем вставьте результат в jsbeautifier и посмотрите, выглядит ли он по-прежнему запутанным. Если нет, выберите другой обфускатор.
Или еще проще: просто вставьте пример в deobfuscatejavascript.com. Результаты "лучшего обфускатора javascript" (согласно @abhishekbagul) после запуска деобфускатора точно такие же, как и у исходного источника, даже включая комментарии!
npm install --save-dev javascript-obfuscator which is open source and really good.
Используйте Encode.js: encodejs.devincity.com
Я сделал для этого решение: github.com/blackmiaool/decent-messup
Для каждого обфускатора можно сделать деобфускатор.
Попробуйте переместить свой код в рабочие потоки и использовать importScripts ("yourscript.js"); их будет труднее увидеть в отладчике, поскольку они будут доступны только при загрузке (при входе в систему) и по умолчанию скрыты.
Очень жаль, что этот вопрос закрыт. Это обычная проблема, имеющая множество решений, и все они вполне поддаются объяснению и сравнению / противопоставлению без прояснения вопроса.
@Benjamin: аргумент не ошибочный, он просто идеально согласован и политически корректен в соответствии с текущей повесткой дня, которая гласит: «Работайте для развлечения и демонстрации, и позволяйте другим загребать ваши деньги».



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Обфускация:
Попробуйте Компрессор YUI. Это очень популярный инструмент, созданный, улучшенный и поддерживаемый командой Yahoo UI.
Вы также можете использовать:
ОБНОВЛЕНИЕ: этот вопрос был первоначально задан более 10 лет назад, и YUI больше не поддерживается. Google Closure Compiler все еще используется, и UglifyJS можно запускать локально через диспетчер пакетов узлов: npm install -g uglify-js.
Данные частной строки:
Сохранение приватности строковых значений - это другая проблема, и обфускация не принесет особой пользы. Конечно, упаковывая исходный код в искаженный, миниатюрный беспорядок, вы получаете облегченную версию от безопасность до безвестность. В большинстве случаев источник просматривает ваш пользователь, а строковые значения на клиенте предназначены для их использования, поэтому такое частное строковое значение не всегда необходимо.
Если бы у вас действительно было значение, которое вы никогда не хотели бы видеть у пользователя, у вас было бы несколько вариантов. Во-первых, вы можете сделать какое-то шифрование, которое расшифровывается при загрузке страницы. Вероятно, это будет один из самых безопасных вариантов, но также потребуется много работы, которая может оказаться ненужной. Вероятно, вы могли бы base64 закодировать некоторые строковые значения, и это было бы проще ... но тот, кто действительно хотел эти строковые значения, мог бы легко их расшифровать. Шифрование - единственный способ по-настоящему запретить кому-либо доступ к вашим данным, и большинство людей считают, что это обеспечивает большую безопасность, чем им нужно.
Примечание:
Известно, что обфускация в Javascript вызывает некоторые ошибки. Обфускаторы становятся немного лучше, но многие компании решают, что они видят достаточную выгоду от минификация и сжатие, а также дополнительную экономию от обфускации не всегда стоит хлопот. Если вы пытаетесь защитить свой источник, возможно, вы решите, что это того стоит, просто чтобы код было труднее читать. JSMin - хорошая альтернатива.
Я хочу добавить, что выполнение кодирования base64 не принесет никакой пользы для безопасности, поскольку это тривиально обратимая процедура. Даже шифрование не поможет, если оно будет расшифровано на стороне клиента. Единственный способ обеспечить безопасность строки - сделать так, чтобы клиент видел ТОЛЬКО зашифрованную строку, и она передается в
сервер для дальнейшей обработки.
К вашему сведению, онлайн-компрессор YUI можно найти здесь: refresh-sf.com/yui
Шифрование строковых значений принесет лишь незначительно большую пользу, чем их кодирование в base64, если они должны быть расшифрованы браузером для их использования. Причина в том, что вам также придется предоставить браузеру ключ шифрования, и все, что браузер может сделать, может сделать и пользователь.
Когда я выполняю минимизацию с помощью YUI Compressor, я проверяю, что он использует «безопасные» методы минимизации, то есть сохраняет точки с запятой --preserve-semi. Перезапись частных переменных в a, b, c и т. д. Обычно безопасна. Еще я делаю так, чтобы минификатор ставил разрыв строки после каждой точки с запятой в коде --line-break 0. Затем в процессе производства, если это ошибка, у меня меньше всего действительная справочная линия для работы, и я могу найти этот код в своей копии для разработки. В противном случае вы просто получите ошибку в огромной строке кода и не поймете, где она находится.
Используйте Encode.js: encodejs.devincity.com
@nachshonf почему? Чем Encode.js лучше, чем упомянутые выше более популярные решения?
Проблема с интерпретируемыми языками заключается в том, что вы отправляете исходный код, чтобы заставить их работать (если у вас нет компилятора для байт-кода, но опять же, это довольно тривиально для декомпиляции).
Итак, если вы не хотите жертвовать производительностью, вы можете действовать только с именами переменных и функций, например. заменив их на a, b ... aa, ab ... или a101, a102 и т. д. И, конечно же, удалите столько пробелов / символов новой строки, сколько сможете (это то, что делают так называемые компрессоры JS) .
Обфускация строк снизит производительность, если вам придется их зашифровать и расшифровать в реальном времени. Плюс отладчик JS может показать окончательные значения ...
Существует ряд инструментов для обфускации JavaScript, которые доступны в свободном доступе; однако я думаю, что важно отметить, что сложно обфускировать JavaScript до такой степени, чтобы его нельзя было реконструировать.
С этой целью есть несколько вариантов, которые я использовал до некоторой степени сверхурочно:
Компрессор YUI. Компрессор JavaScript Yahoo! Делает хорошую работу по сжатию кода, что сокращает время его загрузки. Есть небольшой уровень обфускации, который работает относительно хорошо. По сути, Compressor изменит имена функций, удалит пробелы и изменит локальные переменные. Это то, что я использую чаще всего. Это инструмент на основе Java с открытым исходным кодом.
JSMin - это инструмент, написанный Дугласом Крокфордом, который стремится минимизировать ваш исходный код JavaScript. По собственным словам Крокфорда, «JSMin не запутывает, но затуманивает». Основная цель - уменьшить размер исходного кода для более быстрой загрузки в браузерах.
Бесплатный обфускатор JavaScript. Это веб-инструмент, который пытается скрыть ваш код, фактически кодируя его. Я думаю, что компромиссы его формы кодирования (или обфускации) могут быть достигнуты за счет размера файла; однако это вопрос личных предпочтений.
Поскольку код Javascript должен запускаться на клиентской машине, его сложно не только запутать до такой степени, что код не может быть реверсирован, но невозможно.
это о статистике. каков порог, при котором кто-то собирается получить доступ к вашему коду с обфускацией и без? они все еще могут получить доступ, но чем выше порог, тем меньше людей. чем меньше людей о чем-то знает, тем безопаснее это что-то. стандартная практика классификации безопасности.
Вы пробовали обфускатор zeroify.com? Он использует минификацию и сжатие, но также переименовывает классы и идентификаторы, чтобы затруднить понимание назначения классов и объектов.
@SED Это шутка, они, кажется, просто заменяют имена переменных / функций на ZER0O00OIFY , используя различные комбинации [o, O, 0]. Если бы я действительно хотел прочитать этот код, я мог бы, и поиск / замена в текстовом редакторе заняли бы несколько минут. Если люди захотят прочитать ваш JS, они это сделают. Привыкнет любой клиентский JS, который кто-то действительно хочет использовать. Либо запустите его на стороне сервера, либо преодолейте это. Скорее всего, ваш код не является уникальным или новым. Наклейте на него лицензию, если очень хотите.
Поиск / замена @PeterR в текстовом редакторе значительно усложнит вашу жизнь, пытаясь прочитать его или перепроектировать. он не идеален, но добавляет дополнительный уровень раздражения / затруднений, удаляя контекстные подсказки. большинство программистов не так умны, как вы, и это делает его отличным сдерживающим фактором.
@SED Я не знаю ни одного программиста, который не смог бы найти / заменить кучу переменных [ZER0O00OIFY, ZER0000OIFY, ZEROO00OIFY, ZEROOO0OIFY] хотя бы на [var1, var2,..] в течение одной минуты. Я могу буквально деуглифицировать, изменить отступ и искать / заменять имена переменных в течение двух минут. И нет, я умнее среднестатистического Младшего Дев. Простой факт в том, что НЕТ способа скрыть JS на стороне клиента. Вы можете купить себе 5 минут, МАКС, но это бесполезно. Этот материал на самом деле предназначен для того, чтобы продать кому-то, кто не знает кода дополнительной «безопасности». Никто, кто когда-либо писал строчку на JS, не купился бы на эту чушь.
@PeterR "Я могу буквально деуглифицировать, изменить отступ и искать / заменять имена переменных в течение двух минут" - конечно, продолжайте и попробуйте это на многопроходном минифицированном, запутанном, 20-мегабайтном пакете кодовой базы со структурой, на понимание которой уходят недели даже с исходным, прокомментированным исходным кодом. И что еще больше усложняет задачу, существуют инструменты обфускации, которые намеренно нарушают работу вашего кода при изменении отступов, строк и т. д.
Я могу порекомендовать Утилита JavaScript Патрика Дж. О'Нила. Он может запутывать / сжимать и сжимать, и, похоже, он довольно хорош в этом. Тем не менее, я никогда не пробовал интегрировать его в какой-либо сценарий сборки.
Что касается обфускации и минимизации - я не большой поклонник первого. Это делает отладку невозможной (ошибка в строке 1 ... "подождите, есть только одна строка"), и им всегда требуется время для распаковки. Но если вам нужно ... хорошо.
Но обфускация не обязательно сжимает его до одной строки, это может быть так же просто, как изменение имен функций и переменных или преобразование строк в base64. Минификация помещает весь код в одну строку.
В настоящее время UglifyJS кажется лучшим выбором. Автор тоже классный парень! :)
Что касается отладки, вы можете в основном генерировать исходные карты, которые вы можете включить при тестировании, чтобы вы могли видеть, в какой строке произошла ошибка, даже если она уменьшена.
Вы можете запутать источник javascript сколько угодно, но он всегда будет реверсивным только в силу того, что весь исходный код действительно запускается на клиентской машине ... лучший вариант, о котором я могу думать, - это выполнить всю вашу обработку с серверным кодом, и все, что делает клиентский код javascript, - это отправляет запросы для обработки на сам сервер. В противном случае любой всегда сможет отслеживать все операции, которые выполняет код.
Кто-то упомянул base64, чтобы обеспечить безопасность строк. Это ужасная идея. Base64 сразу узнают люди, которые захотят перепроектировать ваш код. Первое, что они сделают, - это его раскодируют и посмотрят, что это такое.
@Claudiu Пожалуйста, объясните, что вы имеете в виду под серверным javascript. Я не понял.
Куда бы я ни пошел, самый распространенный ответ на вопрос "как я могу скрыть свой Javascript?" это «не стоит беспокоиться об этом, потому что кто-то может это не запутать». Это не совсем ответ.
@Vivek: Немного поздно, но на самом деле я имел в виду "серверный код". Можно запускать javascript не в браузере, а только на сервере, но я не знаю, насколько это распространено.
@ Трэвис: Я не говорил, что "тебе не стоит об этом беспокоиться". Я только что сказал, что если вам нужна программа с закрытым исходным кодом, вы не захотите писать ее в клиентском javascript, потому что любое запутывание, которое вы сделаете, не помешает ее (довольно легко) реверсивной инженерии.
Верно. Что никоим образом не отвечает на вопрос «как я могу запутать свой JavaScript». Обфускация - это не абстрактное понятие, а техническое. Оператор просто спросил "как?"
@Madbreaks: Вопрос был в том, чтобы не делать его код открытым. Непосредственный технический ответ - принятый, но лучший ответ в контексте (например, что вы действительно пытаетесь сделать?), ИМО, у вас не может быть клиентского javascript, который не является открытым исходным кодом, потому что у каждого есть источник, независимо от того, как вы его запутываете. В любом случае здесь есть оба ответа, и люди могут читать и извлекать пользу из обоих.
Ответ: «Вы не можете. И вот почему ...». Возможно, это не тот ответ, который искал ОП, но это ответ на его вопрос с обоснованием. Я думаю, что Клаудиу и другие респонденты хорошо поработали, фактически ответив на вопрос.
Ответ: wasm! Напишите код на C, а затем переведите его в wasm. ПОДДЕРЖКА БУДЕТ ПОДДЕРЖИВАЕТСЯ В СЛЕДУЮЩИЕ 5 ЛЕТ. ЖДАТЬ. ИЛИ УСТАНОВИТЕ Chrome Canary, чтобы попробовать.
Приложение на основе Javascript без открытого исходного кода - это довольно глупо. Javascript - это язык, интерпретируемый на стороне клиента. Обфускация не очень надежная защита.
Обфускация JS обычно делается для уменьшения размера скрипта, а не для его «защиты». Если вы находитесь в ситуации, когда не хотите, чтобы ваш код был общедоступным, Javascript - неподходящий язык.
Существует множество инструментов, но большинство из них не зря содержат слово «компрессор» (или «минификатор»).
Обфускация никогда не может работать. Для тех, кто действительно хочет разобраться в вашем коде, это просто "лежачий полицейский". Что еще хуже, это не позволяет вашим пользователям исправлять ошибки (и отправлять вам исправления) и затрудняет диагностику проблем в полевых условиях. Это пустая трата времени и денег.
Поговорите с юристом о законе об интеллектуальной собственности и о ваших юридических вариантах. "Открытый источник" не означает «люди могут читать источник». Вместо этого Open Source - это особая модель лицензирования, дающая разрешение на свободное использование и изменение вашего кода. Если вы не предоставляете такую лицензию, люди, копирующие ваш код, нарушают правила, и (в большинстве стран мира) у вас есть законные возможности остановить их.
Единственный способ действительно защитить свой код - не отправлять его. Переместите важный код на серверную сторону, и пусть ваш общедоступный код Javascript выполняет Ajax-вызовы к нему.
Смотрите мой полный ответ об обфускаторах здесь.
+1 к юристу, но это может не сработать в других странах / юрисдикциях.
Юристы, вероятно, создают больше затрат / проблем, чем потерянный код, очень хорошо подумайте и найдите много денег, чтобы нанять юристов !!
-1: Я считаю, что найти юриста, разбирающегося в JavaScript, будет сложно ... Не говоря уже о гонорарах и количестве времени, необходимом для поиска «нарушителей». Может ли кто-то действительно нарушать лицензию, которая спрятана в файлах HTML / JavaScript, если он никогда ничего не подписывал? +1 для вызовов AJAX.
@Alerty 1) Лицензии в основном касаются использования предоставление материалов, защищенных авторским правом. У вас мало прав на его использование без лицензии. Вам не нужно подписывать его, чтобы получить права. Лицензия отличается от контракта. 2a) Поскольку речь идет о людях, копирующих и использующих HTML / Javascript без разрешения, лицензия не «похоронена», а прямо там, где берется вещь. 2b) У вас мало прав на использование чужих материалов, защищенных авторским правом, без лицензии. 3) Юристу не нужно понимать Javascript, только закон об интеллектуальной собственности.
@Schwern: Логично предположить, что должно быть какое-то лицензионное соглашение о программном обеспечении для проверки условий использования материалов, защищенных авторским правом. Невозможно увидеть эти условия, не загрузив страницу, содержащую лицензию в файле JavaScript. Так, например, если в лицензии указано, что конечный пользователь должен отдавать 100 долларов за каждое использование, конечный пользователь не сможет принять это до использования материала, защищенного авторским правом. Другими словами, это было бы несправедливо и было бы видно, что это мошенничество.
@Alerty Не будь тупицей. Речь идет о наказании тех, кто копирует файл для использования на своем сайте без разрешения. Вы говорите о контракте, а не о лицензии. Контракты требуют взаимного согласия и представляют собой компромисс. Лицензии дают вам право использовать интеллектуальную собственность. Лицензии - это один из способов (владелец выдает вам вещи), вы не обязаны подписывать, потому что вы ничего не отдаете. Многие «Лицензионные соглашения на программное обеспечение» на самом деле являются контрактами, потому что они выходят за рамки лицензирования собственности и порой приводят к нелепым вещам, например, к праву на подачу иска.
Допустим, вы хотели сделать фотошоп из холста, нет возможности отправлять данные туда и обратно. Пока все не получат 1 Гб / с интернета. Так что да, некоторые программы нельзя заработать на javascript. Следовательно, у них должна быть другая структура бизнеса. Предоставьте только облачное хранилище, сделайте его открытым исходным кодом, внедряйте инновации так быстро, что оставьте позади все копировальные устройства. И т.п.
Бесплатный онлайн-обфускатор против сложного дорогого юриста ... Интересно, кого я выберу?
Это почти как если бы люди, ищущие это, не задумывались о том, сколько пользы и сколько усилий потребуется, чтобы «защитить» их работу ...
Проголосовало против слова «наймите адвоката». Какое неприятное заявление. Вы не можете защищать авторские права на Javascript, запущенный в WWW. Это похоже на ту же логику, что и авторское право на собственный класс CSS. Удачи.
@NiCkNewman Хотя законы об авторском праве различаются от страны к стране, в большинстве стран вы (или компания, которой вы передали свои авторские права) имеете авторские права на код, который вы пишете, включая HTML, Javascript и CSS. Во многих странах вы автоматически получаете авторское право на свою работу. Размещение его в сети не меняет этого. Возможно, вы захотите поговорить с юристом или провести какое-то исследование, если вы работаете в сфере публикации (а если вы программист, то так и есть) и не понимаете авторское право и лицензирование, ваши права на ваши работы и права других.
Дверные замки никогда не могут работать. Для тех, кто действительно хочет попасть в вашу собственность, это просто лежачий полицейский. Хуже того, это не позволяет вашим друзьям решать проблемы в вашем доме, а вам становится труднее диагностировать проблемы в полевых условиях. Это пустая трата времени и денег.
@ user626528 Кто угодно в мире может попытаться взломать эти дверные замки. Они могут пытаться сломать их сколько угодно раз. Вы не можете знать, пытаются ли люди взломать ваш замок. Если они ворвутся, вы никогда не узнаете. Высококачественные автоматические пикировки (декомпиляторы / деобфускаторы) находятся в свободном доступе. Это существенные различия между физической безопасностью и онлайн-безопасностью.
И, тем не менее, любой физический замок в вашем доме, машине, офисе и т. д. - это просто лежачий полицейский для действительно решительного и хорошо оснащенного человека. Прекратите их использовать, они просто пустая трата вашего времени и денег.
The only way you can really protect your code is to not ship it. Move the important code server-side and have your public Javascript code do Ajax calls to it. nosense, если речь идет о лежачем полицейском, взятие кода из вызовов ajax займет меньше времени, чем обратная передача. Правильная обфускация сделает работу, "лежачий полицейский" - это часть игры, так что давайте взломщикам не торопимся, а мы сделаем эту работу.
Все хорошо и пони в радуге, но есть ли там юристы, которые бесплатно защищают своих клиентов, отдавая свои знания, чтобы обучать их только ради высоких этических норм и любви к общению?
Это минимизирует, но не запутывает. Если вы не хотите использовать командную строку Java, вы можете вставить свой javascript в веб-форму.
Примечание: ссылка теперь мертва.
@ScottWilson спасибо, обновил
У меня сложилось впечатление, что некоторые предприятия (например, JackBe) помещают зашифрованный код JavaScript в файлы * .gif, а не в файлы JS, в качестве дополнительной меры обфускации.
В качестве обфускатора / компрессора JavaScript / HTML / CSS вы также можете попробовать Пату Дигуа.
Я удивлен, что никто не упомянул Google Компилятор закрытия. Он не просто минимизирует / сжимает, он анализирует, чтобы найти и удалить неиспользуемый код, и перезаписывает для максимального минимизации. Он также может выполнять проверку типов и предупреждать о синтаксических ошибках.
JQuery недавно переключился с YUI Compresser на Closure Compiler и увидел "солидное улучшение"
да, но недавно они покинули компилятор Closure и теперь используют UglifyJS. Код JQuery был ошибочным после сжатия компилятором закрытия
Хочу отметить, что если вы работаете с angular. этот инструмент на самом деле не будет работать из-за внедрения зависимостей и переименования аргументов, если нет флажка, который я не вижу.
Полезный инструмент, но он не выполняет обфускации, поэтому, вероятно, никто об этом не упомянул.
@Madbreaks с расширенной оптимизацией (developers.google.com/closure/compiler/docs/api-tutorial3) минимизирует код до точки запутывания. Например, переменные можно переименовывать для краткости.
Google тоже не вариант для безопасности
Попробуйте JScrambler. Я недавно попробовал его, и он меня впечатлил. Он предоставляет набор шаблонов для обфускации с предопределенными настройками для тех, кто не заботится о деталях и просто хочет сделать это быстро. Вы также можете создать собственную обфускацию, выбрав любые преобразования / методы, которые вам нужны.
Подписка на JScrambler очень-очень дорогая ... Самая дешевая подписка требует минимальной цены на 3 месяца 145 долларов - это безумие.
Теперь у них есть бесплатный план. Остальные планы подписки по-прежнему такие же дорогие.
Бесплатный план включает только оптимизацию и минификацию.
«Бесплатный план включает оптимизацию и минификацию», да, нет. Обфускация и оптимизация несовместимы, извините.
Глядя на веб-сайт JScrambler сегодня и другие тарифные планы, я не вижу бесплатного варианта. Только бесплатная пробная версия ..
Я был очень разочарован JScrambler, потому что для него нет хорошего клиента C#, а документация по API не сообщает вам достаточно, чтобы можно было выполнять остальные вызовы с нуля, но их служба поддержки делает это стоящим денег моего босса.
В отличие от большинства других ответов, я предлагаю против YUI Compressor; вы должны использовать Закрытие Google.
Не сильно, потому что он сжимает больше, но в основном потому, что он улавливает ошибки javascript, такие как a = [1,2,3,];, из-за которых IE выходит из строя.
не следует проверять ваш код на наличие ошибок и несовместимости в любом случае. до запутывает ?? на самом деле не имеет ничего общего с запутыванием
Если вы используете библиотеку JavaScript, подумайте о Dojo Toolkit, который совместим (после незначительных изменений) с компиляцией в расширенном режиме компилятора Closure.
Dojo - единственная библиотека JavaScript Совместим с компилятором Closure
Код, скомпилированный в расширенном режиме Closure, практически невозможно реконструировать, даже пропустив через beautifier, поскольку кодовая база весь (включая библиотеку) запутана. Кроме того, в среднем он на 25% меньше.
Код JavaScript, который просто минифицирован (YUI Compressor, Uglify и т. д.), Легко реконструировать после прохождения через beautifier.
Я бы предложил сначала минимизировать что-то вроде YUI Compressor, а затем преобразовать все строки и числа в HEX-значения, используя что-то вроде http://www.javascriptobfuscator.com/
При этом код будет практически невозможным для понимания, и я думаю, что на этом этапе хакеру потребуется больше времени, чтобы воспроизвести ваш код, чем на самом деле, если бы он переписал с нуля. Переписывание и клонирование - это то, что на самом деле невозможно остановить. Ведь мы свободные люди!
Packer Дина Эдварда - отличный обфускатор, хотя он в первую очередь обфускирует код, а не любые строковые элементы, которые могут быть в вашем коде.
См .: Онлайн-инструмент сжатия Javascript и выберите Packer (Dean Edwards) из раскрывающегося списка.
Это бессмысленно. Его легко распаковать с помощью jsbeautifier.org
Я использовал это в прошлом, и он хорошо справляется. Это не бесплатно, но вам обязательно стоит взглянуть. Обфускатор и кодировщик JavaScript
Я использую утилиту Closure-Compiler для обфускации java-скриптов. Он минимизирует код и имеет больше возможностей для обфускации.
Эта утилита доступна в коде Google по следующему URL-адресу:
.
Инструменты закрытия
Но сейчас я много слышу об UglifyJS. Вы можете найти различные сравнения между Closure Compiler и UglifyJS, в которых Uglify кажется победителем. UglifyJS: новый быстрый компрессор JavaScript для Node.js, не уступающий закрытию
Скоро я дам шанс UglifyJS.
Попробуйте этот инструмент Обфускатор Javascript
Я использовал его в своей игре HTML5, он не только уменьшил его размер с 950 КБ до 150, но и сделал нечитаемый код компилятора закрытия и минификаторы обратимым. Я лично не знаю, как отменить эту обфускацию.
Я использую Ясоб в течение многих лет, и это, несомненно, лучший обфускатор. Он имеет расширенный пользовательский интерфейс, но при этом интуитивно понятен и прост в использовании. Он также будет обрабатывать файлы HTML и CSS.
Лучший способ использовать это - поставить перед всеми вашими переменными частный что-то вроде подчеркивания, затем использовать функцию sort, чтобы сгруппировать их все вместе, и исключить их из контрольный в качестве целей для обфускации.
Пользователи по-прежнему могут просматривать ваш источник, но гораздо сложнее расшифровать, когда ваши частные переменные преобразованы из чего-то вроде _sUserPreferredNickName в a.
Движок автоматически подсчитает количество целевых переменных и расставит их по приоритетам, чтобы получить максимальное сжатие.
Я не работаю на Ясоба и ничего не получаю от их продвижения, просто предлагаю дружеский совет. Обратной стороной является то, что это не бесплатно и немного дорого, но все же стоит того, если сравнивать его с альтернативами - «бесплатные» варианты даже близко не подходят.
Джейсон больше похож на минификатора, чем на обфускатора. Я что-то упускаю?
Вам определенно стоит подумать о том, чтобы взглянуть на Обфускриптор.
Я выхожу за рамки типичных приемов минимизации Javascript, которые мы видели в других инструментах, таких как Компрессор YUI или Закрытие Google.
Обфусцированный код больше похож на зашифрованный. В отличие от всего, что я видел раньше.
Спасибо за ссылку! Просто попробовал обфускриптор и код действительно зашифрован (без ключа ???). И сжал мой скрипт с 211 до 36 Кб!
Обратите внимание, что Obfuscriptor предупреждает вас, что он не работает с IE. Для некоторых это нарушает условия сделки.
Ссылка на ответ больше не указывает на инструмент. Я не мог найти другого живого упоминания об этом.
первая ссылка мертва. "Обфускриптор"
Вы пробовали Bananascript? Он производит сильно сжатый и совершенно нечитаемый код.
он хорошо сжимает код, но просто измените eval() в последней строке на console.info(), и ваша консоль выдаст все это
Что бы я сделал:
А. Тролль хакера!
Это будет во второй части моего фальшивого / запутанного секретного кода 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'});
}
Б. Немного запутать код
Это что?
(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 = 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 и проверяю элементы, ресурсы, сеть, источники, временную шкалу, профили, аудит, но я не нашел строку выше.
note1: если вы откроете 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=';}; ?>
о, и да, я бы также запутал код javascript.
Это то, о чем я как раз думал, троллинг взломщика. Хотелось бы увидеть что-то подобное без использования PHP :)
Даже если это забавно, веб-разработчик, который умеет правильно проверять сайт, может каким-то образом получить исходный код. Я действительно думаю, что невозможно скрыть какие-либо данные в тот момент, когда вы размещаете их в Интернете.
Я думаю, это не какая-то запутанность. однако знает, как открыть консоль, он также может знать о кодировании / декодировании base64, очень просто.
Вы не можете защитить код на стороне клиента: просто нажмите F12 в Google Chrome, приостановить выполнение javascript, и вы получите все строки, даже зашифрованные. Украсить это и переименовать переменные, и вы получите почти исходный код.
Если вы пишете javascript на стороне сервера (например, NodeJS), боитесь, что кто-то взломает ваш сервер, и хотите усложнить работу хакеру, давая вам больше времени для восстановления доступа, тогда используйте компиляторы javacript:
Вам нужно использовать Closure Compiler для расширенной компиляции, поскольку это единственный инструмент, который переименовывает все ваши переменные, даже если они используются в нескольких файлах / модулях. Но у него просто проблема: он работает, только если вы напишете в нем стиль кодирования.
Компиляция закрытия не является запутывающим кодом: P
Он не предназначен для этого, но хорошо работает: он не добавляет лишнего кода, как некоторые компиляторы (которые обычно можно отменить, что инструменты, которые я цитировал), но меняет его необычными способами, некоторые даже трудно отменить, и удаляет неиспользуемые код, который по сравнению с реальной обфускацией хорош для производительности.
Не хорошая идея. Уменьшение / компиляция кода на стороне сервера может вызвать проблемы с безопасностью, если в минификаторе есть ошибка: zyan.scripts.mit.edu/blog/backdooring-js
Указанная вами ошибка относится только к UglifyJS: она не относится к Closure Compiler.
Для всех тех, кто заботится о минимизации файлов javascript, также есть средство отмены минимизации javascript. так что я не думаю, что это уровень безопасности вообще
Когда я ответил на этот вопрос, минификаторы уже существовали, но минификаторы получают не исходный код, а код с переименованными переменными и свойствами. Статистическое переименование есть, но не очень. С другой стороны, одна вещь, которая делает минификацию менее эффективной сегодня, - это отладка, которая за эти четыре года стала намного лучше.
Мне было бы интересно услышать причину, по которой вы пытаетесь скрыть код, это может дать некоторый необходимый контекст, чтобы дать полезный ответ.