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



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


Это, наверное, лучшее, что вы можете сделать. Просто имейте в виду, что любой, кто обладает достаточной самоотдачей, вероятно, сможет де-запутать вашу программу. Просто убедитесь, что вам это удобно, прежде чем приступить к проекту. Я думаю, что самая большая проблема с этим будет заключаться в том, чтобы контролировать, кто использует это на своем сайте. Если кто-то заходит на сайт с вашим кодом и ему нравится то, что он делает, не имеет значения, что они не понимают, что делает код, или не могут его прочитать, когда они могут просто скопировать код и использовать его на собственном сайте.
Обфускатор вам совсем не поможет, если кто-то захочет разобраться в коде. Код все еще существует на клиентской машине, и они могут взять его копию и изучить на досуге.
Просто невозможно скрыть код, написанный на Javascript, поскольку исходный код должен быть передан браузеру для выполнения.
Если вы хотите скрыть свой код, у вас есть следующие возможности:
1) Используйте среду, в которой скомпилированный код (не исходный код) загружается клиенту, например Flash или Silverlight. Я даже не уверен, что это надежно, но это определенно лучше, чем Javascript.
2) Иметь серверную часть на стороне сервера, которая выполняет эту работу, и тонкий клиент, который просто выполняет запросы к серверу.
Я бы сказал, да, достаточно, если вы также убедитесь, что вы также сжимаете код, используя такой инструмент, как Пакер Дина Эдварда или аналогичный. Если вы подумаете о том, что возможно с такими инструментами, как .NET Reflector, с точки зрения обратного проектирования скомпилированного кода / IL в .NET, вы поймете, что вы ничего не можете сделать, чтобы полностью защитить свои вложения.
С другой стороны, помните, что люди, которые выпускают свой исходный код, в любом случае, похоже, неплохо справляются - это их опыт, что люди хотят большего, чем их интеллектуальная собственность.
Вы всегда сталкиваетесь с тем, что любой пользователь, который заходит на вашу веб-страницу, загружает некоторую рабочую версию вашего исходного кода Javascript. У них буду есть исходный код. Его запутывание может затруднить повторное использование кем-то с намерением воровать вашей тяжелой работы. Однако во многих случаях кто-то может даже повторно использовать запутанный источник! Или, в худшем случае, они могут разгадать это вручную и в конце концов понять.
Примером ситуации, подобной вашей, может быть Карты Гугл. Источник Javascript явно запутан. Однако для действительно частной / конфиденциальной логики они отправляют данные на сервер и заставляют сервер обрабатывать эту информацию с помощью XMLHttpRequests (AJAX). Благодаря такому дизайну у вас есть важные части на стороне сервера, которые гораздо более жестко контролируются.
Обфускатора кода достаточно для чего-то, что требует минимальной защиты, но я думаю, что этого будет явно недостаточно, чтобы действительно защитить вас. если вы будете терпеливы, вы действительно сможете все исправить ... и я уверен, что есть программы, которые сделают это за вас.
При этом вы не можете остановить кого-либо от пиратства ваших материалов, потому что они в конечном итоге сломают любую защиту, которую вы создаете. и это особенно просто на языке сценариев, где код не компилируется.
Если вы используете какой-либо другой язык, например java или .NET, вы можете попробовать сделать что-то вроде «звонка домой», чтобы убедиться, что номер лицензии соответствует заданному URL-адресу. Что работает, если ваше приложение представляет собой какое-то онлайн-приложение, которое будет постоянно подключаться к сети. Но, имея доступ к источнику, люди могут легко обойти эту часть.
Короче говоря, javascript - плохой выбор для того, что вы делаете. Шагом вперед по сравнению с тем, что вы делаете, может быть использование серверной части веб-службы для получения ваших данных. Позвольте веб-сервису обрабатывать процесс аутентификации / проверки. Требуется немного поработать, чтобы убедиться, что он пуленепробиваемый, но мог бы работает.
Вы проиграете битву, если попытаетесь скрыть свой код в надежде, что кто-то его не украдет. Вы можете помешать обычному браузеру добраться до этого, но кто-то из посвященных почти наверняка сможет преодолеть любую используемую вами меру.
В прошлом я видел, как люди делали несколько вещей:
Есть много других способов.
В конце концов, ваши усилия могут помешать обычному браузеру увидеть ваши данные. Если придет кто-то преданный, то вы мало что сможете сделать. Вам придется с этим жить.
Я бы посоветовал создать действительно потрясающий продукт, который привлекал бы большинство людей и побеждал любую конкуренцию, имея лучший продукт / услугу / сообщество, а не самый запутанный код.
Если это для веб-сайта, который по самой своей природе откладывает просмотр своего кода одним щелчком меню, есть ли у В самом деле какие-либо причины, чтобы что-то скрывать? Если кто-то захочет украсть ваш код, он, скорее всего, приложит все усилия, чтобы сделать даже самый искаженный код удобочитаемым. Посмотрите на коммерческие веб-сайты, они не запутывают свой код, и никто не крадет код из приложений Google. Если вас действительно беспокоит воровство кода, я бы поспорил за то, чтобы написать его на каком-нибудь другом компилируемом языке. (что, конечно же, разрушает все, что связано с веб-приложениями ...) Даже в этом случае вы не совсем в безопасности, существует множество декомпиляторов.
Так что на самом деле нет возможности делать то, что вы хотите, перед лицом кого-то, у кого есть достаточная мотивация.
Я открою тебе секрет. Как только вы это поймете, вы почувствуете себя намного лучше в связи с тем, что обфускация Javascript действительно полезна только для экономии полосы пропускания при отправке скриптов по сети.
Ваш исходный код не стоит воровать.
Я знаю, что это шокирует эго, но я могу сказать это с уверенностью, даже не видя ни строчки написанного вами кода, потому что за пределами очень немногих сфер разработки, где происходит серьезное волшебство, это верно для всего исходного кода.
Скажем, завтра кто-то вывалил к вам на порог стопку DVD-дисков с исходным кодом Windows Vista. Что бы вы с ним сделали? Конечно, вы можете скомпилировать его и раздать копии, но это всего лишь на один шаг больше усилий, чем копирование розничной версии. Вы можете кропотливо найти и удалить код проверки лицензии, но какой-то умный ребенок уже сделал это с двоичными файлами. Заменить логотип и графику, представить, что вы написали их сами, и продавать как «Vicrosoft Mista»? Вас поймают.
Вы можете потратить огромное количество времени на чтение кода, попытки понять его и по-настоящему «украсть интеллектуальную собственность», которую Microsoft вложила в разработку продукта. Но вы будете разочарованы. Вы бы обнаружили, что код представляет собой длинную серию обыденных решений, принимаемых одно за другим. Некоторые были бы умнее, чем вы могли подумать. Некоторые заставят вас качнуть головой, гадая, каких обезьян они там нанимают. Большинство просто заставит вас пожать плечами и сказать: «Да, вот как вы это делаете».
В процессе вы многое узнаете о написании операционных систем, но это не повредит Microsoft.
Замените «Vista» на «Leopard», и приведенные выше абзацы ни на йоту не изменится. Это не Microsoft, это программного обеспечения. Половина людей на этом сайте, вероятно, могла бы разработать клон Stack Overflow, независимо от того, просматривая исходный код этого сайта или нет. Они просто этого не сделали. Исходный код Firefox и WebKit доступен всем желающим. Теперь напишите свой собственный браузер с нуля. Увидимся через несколько лет.
Разработка программного обеспечения - это вложение времени. Полное высокомерие - представлять, что то, что вы делаете, настолько особенное, что никто не может клонировать его, не глядя на ваш источник, или даже что это значительно упростит их работу без значительного (и легко обнаруживаемого) количества вырезаний и вставок.
Здесь работают два разных образа мышления. ОП подходит к этому с «деловым / предпринимательским» мышлением. Ответ от программиста / компьютерщика (скорее всего, сотрудника).
Отстой, что мы не можем добавить в избранное ответ на SO. Позвольте мне посмотреть его исходный код и сделать клон с этой функцией.
Серьезно, один из лучших ответов, которые я когда-либо читал! +1, желаю большего.
+1 для Большинство просто заставит вас пожать плечами и сказать: «Да, вот как вы это делаете».
@morpheous Не совсем. Правда обфускатор или нет, любой достойный программист может воспроизвести все, что вы делаете, примерно за столько же времени, сколько вам потребовалось. Если они украли то, что вы сделали, вы могли бы подать на них в суд. Итак, итоговый результат с точки зрения «бизнеса / предпринимательства» с момента публикации о количестве времени, которое потребовалось вам для реализации вашего дизайна, до тех пор, пока конкурент не догонит вас. Период. Это все, что вам нужно. В остальном вы вводите инновации быстрее, чем ваши конкуренты.
Отличный, отличный ответ. Хотел бы я ++ больше одного раза.
@pbhohan - удачи в суде с человеком, который, вероятно, находится на другом конце планеты.
Я глубоко не согласен с большинством приведенных выше ответов.
Это правда, что любое программное обеспечение может быть украдено, несмотря на обфускацию, но, по крайней мере, это затрудняет извлекать и повторно использовать отдельные части программного обеспечения, и в этом суть.
Возможно, дешевле и менее рискованно использовать обфускацию, чем оставлять код открытым и бороться в суде после того, как кто-то украл лучшие части нашего программного обеспечения и сделал опасный параллелизм.
Необфусцированный код шепчет:
Обфусцированный код говорит:
Это не ответ, но я согласен с этим еще раз. Выбранный ответ был длинным, но не совсем для того, за чем сюда приходили люди, да и не для чего-то неочевидного.
Источник карт Google не выглядит запутанным ... Худшее, что было сделано, - это удалить все пробелы. Это большая страница, так что это сэкономило бы некоторую пропускную способность.