Сделать js код нечитаемым
Я хочу, чтобы исходный js код, при публикации был нечитаемым и чтобы нельзя было расшифровать. Можно ли вообще такое сделать? Если да, то как?
Отслеживать
задан 19 мар 2020 в 6:33
69 6 6 бронзовых знаков
Простой минификации кода вам не достаточно?
19 мар 2020 в 6:35
Это как? Что это?
19 мар 2020 в 6:38
19 мар 2020 в 6:38
Понял, спасибо)
19 мар 2020 в 6:40
@ВиталийШебаниц все равно, как бы код не был обфусцирован, его можно поставить на брейкпоинт и пройти весь по шагам, да это может быть не быстро.. в общем , ни при каких обстоятельствах, нельзя верить клиенту, все ключевые моменты надо так или иначе проверять или держать на сервере
19 мар 2020 в 6:58
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Вообще gulp например для сжатия вашего кода на лету подойдет. Но требует время на изучение и настройку.
Для начинающего не плохой вариант писать код используя какую-нибудь визуальную прогу для сборки. Я например использую prepros https://prepros.io/ на мой взгляд очень удобно.
Для примера настройка автосборки выглядит вот так

Отслеживать
ответ дан 19 мар 2020 в 6:53
Евгений Иванов Евгений Иванов
693 3 3 серебряных знака 6 6 бронзовых знаков
препрос же просто минифицирует js но не обфусцирует же . да ?
19 мар 2020 в 7:08
@MaximLensky все верно. Но этого достаточно на мой взгляд. Код все равно не редактируемый получается. Хотя там настроек сжатия приличное количество может есть и то что нужно. Плюс в том, что один раз настроил и он работает сам по себе с любым количеством проектов.
Можно ли сделать python код нечитаемым?

dospayne2, так уберите пароль от базы из скрипта и сделайте возможность при запуске скрипта указывать путь к конфигурационному файлу через параметр командной строки. Те, кто знает пароль от базы, создадут такой файл, впишут в него пароль от базы — и без проблем запустят скрипт. Если же надо давать людям скрипт на питоне, но при этом скрывать прямо внутри него пароль от базы, то это вообще не безопасный вариант — что-то делаете не так. Надо тогда, чтобы с базой взаимодействовал api-сервис, а ваш питон-скрипт делал к нему обращения по http, а не напрямую в базу ходил. А пароли в клиентских приложениях хранить вообще не безопасно. Даже если вы как-то круто обфусцируете код — все равно не безопасно.

dospayne2, сколько вы еще будете задавать этот вопрос? Вы не скроете от любопытных глаз код написанный на интерпретируемом языке, любопытные глаза всегда его найдут.
P.S. Сделайте read-only аккаунт к вашей БД и давайте его вместе со скриптом, если боитесь что кто-то что-то вам удалит.
Прячем JavaScript-код на фронтенде от посторонних
Как защитить ваш уникальный код от копирования с помощью веб-сокетов, крипторов, обфускации и других методов? Разбираемся, как защитить код на JavaScript.
Рассказывает веб-разработчик Денис Лисогорский
На данный момент этот блок не поддерживается, но мы не забыли о нём! Наша команда уже занята его разработкой, он будет доступен в ближайшее время.
Давайте представим ситуацию, когда вы и ваша команда пишете интересный и сложный код на JavaScript. Причём этот код в кратчайшие сроки нужно использовать в проекте. Если его функциональность действительно уникальна, то в процессе разработки и у вас, и у членов команды вполне резонно возникнет вопрос: «Как защитить код от копирования?».
Как защитить код: веб-сокеты, крипторы и обфускация
Разумеется, все мы прекрасно понимаем, что JavaScript выполняется на стороне браузера. И любой зашифрованный код всегда можно расшифровать, если знать принципы работы браузера. Поэтому можно попробовать лишь затруднить понимание данного кода, а это, в свою очередь, очень сильно помешает злоумышленнику модифицировать его под свои нужды.
Итак, есть несколько вариантов защиты кода:
- Использовать веб-сокеты.
- Использовать крипторы.
- Сделать обфускацию кода.
Крипторы приводят код в нечитаемый вид, используя, как правило, base64 (что неизбежно приводит к увеличению объёма кода примерно на 30%). Затем к полученному результату прибавляется так называемая «соль» — набор символов, который при разборе кода функцией-дешифровщиком используется в качестве ключа. Ну а потом вся строка кода обычно выполняется через eval(). Проблема крипторов в том, что если понять принцип их работы, отсечь «соль» и декодировать, то сразу становится доступен весь код в его исходном виде.
Обфускаторы же изменяют сам код, вставляя между операторами нечитаемые символы, меняя имена переменных и функций на набор визуально непонятных символов. При этом объём кода также сильно увеличивается из-за вставки дополнительного псевдокода, а также замены символов на hex, когда любые символы переводятся в их hex-значения (например, латинская буква ‘e’ может быть записана как ‘\x65’, причём это прекрасно интерпретируется любым браузером). Можете посмотреть, как работает перевод в hex через любой сервис Text To Hex, например на Crypt Online.
Применение обфускаторов сильно усложняет дальнейшую отладку кода, поскольку это необратимый процесс. К тому же в некоторых случаях они могут повлиять на функциональность кода. Попробовать обфускаторы можно на любом сервисе обфускации, к примеру этом или этом. Также в Сети можно найти платные крипторы-обфускаторы, в настройках которых вы сможете указывать степень защиты, время жизни скрипта и прочее, при этом скрипт будет намертво привязан к вашему домену, т.е. для дешифровки будет использоваться уникальное для вашего хоста значение. Стоимость таких крипторов начинается от 45 $. Кроме этого, перед обфускацией вы можете предварительно минимизировать код, заменив все имена переменных и функций на их односимвольные синонимы. Отличный и очень популярный инструмент на Node.js — UglifyJS, который работает как в автоматическом режиме (скажем, через Gulp), так и в режиме командной строки.
Также есть всем известный Closure Compiler от Google, который кроме минимизации анализирует JavaScript-код, удаляет мёртвый код, переписывает и сводит к минимуму то, что осталось. Он также проверяет синтаксис, ссылки на переменные и типы и предупреждает об общих ошибках JavaScript. Имеет хорошо документированный API.
Кроме предложенных методов можно сделать следующее:
- использовать WebStorage и скрывать там JavaScript код;
- прятать часть кода в отдельном файле на сервере и вызывать его через XMLHttpRequest ;
- использовать побитовые операторы для замены чисел на наборы скобок и знака ~ ;
- делать субституцию стандартных функций и методов JavaScript.
Всё это, разумеется, не станет стопроцентной защитой. Тем не менее чем сложнее процесс дешифровки, тем больше шансов, что после множества неудачных попыток любители копировать чужой код оставят ваш сайт в покое.
Зашифровка кода на примере JavaScript-калькулятора
Не так давно я разработал JavaScript-калькулятор для расчёта стоимости услуг, с большим количеством взаимосвязанных параметров. Руководство поставило задачу защитить данный скрипт от копирования, чтобы конкуренты не смогли использовать его на своих сайтах. Искал различные решения, ничего подходящего не нашёл, поэтому начал писать собственное. Представляю его ниже.
Обращаю ваше внимание на то, что любой код можно расшифровать, просто для этого нужно время. Поэтому данное решение, разумеется, не идеально. Тем не менее, чтобы его раскрыть, требуется время, внимательность и усидчивость. И это может оттолкнуть ваших конкурентов от идеи скопировать ваш скрипт. Большинство из них после нескольких неудачных попыток просто будут искать аналог похожего скрипта на других ресурсах.
По итогам работ в браузере вы увидите нечто такое:
При этом все зашифрованные скрипты будут работать корректно. Опытный взгляд программиста сразу визуально определит кодирование через base64. Но при попытке расшифровать строку любым base64 декодером, будет ошибка. Если вставить скрипт в alert (такой метод также рекомендуют на форумах для дешифровки кода), то результат также будет нулевым.
При этом никто ведь не знает, что здесь зашифрован именно скрипт. Это может оказаться какой-то параметр, текст или изображение. Через base64 можно зашифровать всё что угодно.
Поищем в коде функцию glob() , которой передаётся шифрованная строка. Вот она: glob=function(s) Видим ещё несколько функций sfd() и rty() . Ищем эти функции. Вот они: На этом месте многие закончат попытки расшифровки и оставят ваш сайт в покое. Рассмотрим алгоритм подробнее. Первым делом указываем в футере сайта путь на скрипт и тут же кодируем его: В строке выше мы говорим интерпретатору PHP взять файл script.js, далее закодировать его через base64, прибавить строку ‘K’ и всё это записать в переменную $filebase64 . Добавление строки ‘K’ (это может быть любая латинская буква или комбинация букв или цифр) защищает нас от того, что желающий скопировать ваш скрипт расшифрует его с помощью alert() или онлайн-дешифратора. Ведь с дополнительными символами скрипт не будет работоспособен. Затем где-то дальше в коде вызываем скрипт: Пусть этот скрипт вызывается отдельно, подальше от других скриптов и ссылок на скрипты. Далее где-то в файле с общими скриптами сайта, отдельно от других скриптов, вставляем вызов функций дешифровки. Вставлять можно независимо от других функций и библиотек. Разбираем подробно что здесь происходит. Наша основная функция glob() принимает один параметр s . Он сразу передаётся функции substring() с параметром -~[] (это равно 1 в зашифрованном виде), которая извлекает из s строку начиная с первого символа и до конца. Следовательно, если мы в PHP-коде в качестве строки прибавляли более одного символа, скажем три, то нам нужно будет в функции substring() указать 2+(-~[]) . Либо путём шифрования цифр через побитовые операторы мы можем создать запутанную формулу, часть переменных которой мы можем прятать в cookies или sessionStorage, что сделает крайне затруднительным понимание того, какое количество символов необходимо отбросить для дешифровки кода. Пример замены цифр через побитовый оператор ~ : Далее полученный результат принимает функция rty() . Эта функция представляет собой набор символов, в частности: this[«\x61\x74\x6F\x62»] ; Попробуйте ввести это в консоли браузера и вы увидите, что на самом деле делает эта функция. Например, вы увидите: Т.е. набор символов — это зашифрованная функция atob() , которая, согласно описанию на MDN, декодирует строку, закодированную с использованием base64. Результат декодирования получает функция sfd() . Она также представляет собой набор символов: this[«\x65\x76\x61\x6C»]; . Вы уже догадались, что нужно сделать? ? Выполните в консоли браузера и вы увидите: Здесь, думаю, уже объяснять ничего не надо. Все мы знаем, что функция eval() выполняет скрипт, полученный из строки. «Плохая практика», как сказали бы многие, для обычного кода, но в нашем случае это безопасная и нужная функция для реализации нашей идеи. К тому же напрямую к этой функции пользователь не сможет получить доступ. Наверное, вы задались вопросом, а каким же образом функции зашифрованы в наборе символов? Очень просто: набор символов — это текст, преобразованный в шестнадцатеричную систему счисления. Т.е. это текст в формате hex (hexadecimal), в котором можно зашифровать любые символы. Таким образом, наша расшифрованная функция выглядит так (специально разбил по строчкам, чтобы было наглядно): В итоге отбрасываем первый символ шифрованной строки (при этом символов может быть хоть 353, и об этом никто не сможет быстро догадаться), потом дешифруем, потом выполняем через eval() . Вы можете пойти и дальше. Если каким-то образом кто-то всё же расшифрует ваш скрипт, немного усложните его, чтобы людям было сложнее модифицировать его. Например, можно поговорить о побитовом операторе ^ , c помощью которого можно творить чудеса. Например, a^b^b будет равно a . В качестве b может быть использован ключ, который мы зашифруем где-то выше… Всё будет работать как и раньше, но собьёт с толку нехороших копипастеров. На данный момент этот блок не поддерживается, но мы не забыли о нём! Наша команда уже занята его разработкой, он будет доступен в ближайшее время. За материал благодарим нашего подписчика Дениса Лисогорского Уже напечатанный код можно сделать нечитаемым, испортив его — закрасив вообще, наклеив стикер, сделав царапину хорошую и тд. Главное повредить целостность кода. Код, который существует в виртуальном виде, придется или исправлять в программе, в которой создавался код, или нужно изменить конечную цель для этого кода, если она принадлежит вам. То есть, вел код на сайт, фотографию, статью — удаляйте, блокируйте, меняйте адрес, тогда код хоть и прочтется, а вести будет в никуда. Если хотите скрыть код от всех, чтобы его могли прочесть избранные, то тут надо чтобы эти избранные знали, когда код будет «показывать» что нужно. Например, ведет он на пустой сайт, но ровно в 20:00 на сайте появится то, что хотите показать своим друзьям, а потом через час информация удалится.sfd=this["\x65\x76\x61\x6C"];rty=this["\x61\x74\x6F\x62"]; Как защитить JavaScript от копирования на своём сайте
sfd=this["\x65\x76\x61\x6C"];rty=this["\x61\x74\x6F\x62"];glob=function(s)
glob = function(s)
Как сделать, чтобы qr код не читался?