Подтвердить что ты не робот

Библиотека Javascript: обфускать или не запутывать - вот в чем вопрос

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

Чтобы быть ясным, меня даже не беспокоят жесткие хакерские хакеры, которые все равно будут взломать источник - это проигравшее сражение, которое не стоит драться (и в любом случае я согласен с тем, что мой код не "так драгоценен" ). Однако то, что я не могу нести, - это идея эффективно, просто передавая всю тяжелую работу, которая попала бы в библиотеку моим конкурентам, используя простой javascript, который любой может загрузить и использовать. Если кто-то собирается использовать то, над чем я работал, то я, конечно, не хочу просто передать их им, - я хочу, чтобы они много работали над его расшифровкой. Если они могут его декодировать, они заслуживают того, чтобы иметь код (они, скорее всего, узнают, что они могли бы написать лучший код сами), у них просто не было смысла предпринимать все компоненты [plain vanilla] этот конкретный порядок). Итак, я не утверждаю, что никто не мог бы написать это (что было бы нелепым утверждением в любом случае), но скорее я говорю, что никто (до сих пор ) сделал функциональность, о которой я говорю, доступную для этой конкретной отрасли - и я (считая предпринимателя, а не geek/coder), хочу доить его для все это стоит, пока оно длится, пока оно (неизбежно) не будет взломано.

Установлено, что ни один веб-сайт в той отрасли, в которой я "атакую", не обладает такой функциональностью, поэтому ценность такой библиотеки неоспорима и не обсуждается (т.е. это не то, что я прошу здесь).

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

Две из моих самых больших проблем - отладка и тонкие ошибки, которые могут быть введены обфускатором.

Я хотел бы знать:

  • Как я могу управлять этими рисками (возможность отладки ошибочного кода, обеспечения/минимизации ошибок обфускации)

  • Есть ли какие-либо качественные обфускаторы стандартного качества, которые вы можете рекомендовать (желательно то, что вы используете сами).

  • Каковы ваши опыты использования обфускационного кода в рабочей среде?

4b9b3361

Ответ 1

Если они могут его декодировать, они заслуживают того, чтобы иметь код (они, скорее всего, узнают, что они могли бы написать лучший код сами), у них просто не было смысла предпринимать все компоненты [plain vanilla] этот конкретный порядок).

Итак, вы пытаетесь решить бизнес-проблему техническими мерами.

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

Даже если вы запутаете script, он все равно будет работать как есть, конкуренты могут просто взять его и запустить с ним. Несколько настроек не должны быть слишком сложными даже с запутанным кодом.

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

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

Ответ 2

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

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

Причина, по которой Google и тому подобное не страдает от опрометчивых конкурентов, заключается в том, что JavaScript является лишь частью пакета. Чтобы иметь какой-либо контроль над тем, как и где эти вещи используются, большой компонент должен быть основан на сервере. Хорошей новостью является то, что вы можете использовать такие вещи, как Node.js, чтобы довольно легко разбить код клиента и сервера, не переделывая детали на совершенно другом языке.

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

Вы можете видеть элементы этого в том, как Google переходит к мета-библиотеке, которая просто служит загрузчиком для других библиотек. Это шаг к унификации вызовов загрузки для Google Apps, Google AdSense, Google Maps, Google Adwords и т.д.

Если вы хотите быть немного умным, вы можете быть похожими на Карты Google и добавлять ядовитую таблетку в свои библиотеки JavaScript, поскольку они обслуживаются динамически, так что они работают только в определенном субдомене. Это требует их генерации по мере необходимости, и, хотя он всегда может быть удален с достаточным опытом, он предотвращает использование копий вставки для ваших файлов JavaScript. Чтобы вставить умный вызов, который проверяет document.href, не сложно, и найти все эти экземпляры в файле с агрессивной минимизацией будет особенно раздражать и, вероятно, не стоит усилий.

Ответ 3

Факты обфускации Javascript:

  • Никто не может предлагать обфускацию javascript на 100% без трещин. Это означает, что со временем и знаниями каждая обфускация может быть "отменена".
  • Minify!= obfuscation: Когда вы минимизируете свою цель: уменьшите размер кода. Миниатюрный код выглядит совершенно другим и его гораздо сложнее читать (подсказка: jsbeautifier.com). Obfucation имеет совершенно другую цель: защитить код. Используемые преобразования пытаются защитить Obfuscated код от отладки и подслушивания. Обфускация может даже создать еще большую версию исходного кода, которая полностью противоречит целям минимизации.
  • Obfuscation!= encryption - Это очевидно, но его распространенная ошибка, которую делают люди.
  • Обфускация должна сделать отладку намного сложнее, ее одной из целей. Поэтому, если это сделано правильно, вы можете ожидать, что потеряете много времени, пытаясь отладить запущенный код. Это говорит о том, что если это сделано правильно, появление новых ошибок - редкая проблема, и вы можете легко найти, является ли это ошибкой обфускации временно заменяя код не запутанным кодом.
  • Обфускация - не пустая трата времени - это инструмент. Если вы используете правильно, вы можете заставить других тратить много времени;)

Javascript obfuscation fiction: (я пропущу этот раздел;))

Ответа на вопрос Q2 - Инструментальные средства обфускации:

  • Для обширного списка javascript obfuscator: malwareguru.org. Мой личный выбор - jscrambler.com.

Ответ на Q3 - опыт использования обфускации кода

  • На сегодняшний день нет новых ошибок, введенных обфускацией
  • Значительно лучшее удержание клиентов. Они должны прийти к источнику, чтобы получить источник;)
  • Случайные ложные срабатывания, о которых сообщают некоторые антивирусные инструменты. Может быть протестирован перед развертыванием любого нового кода с помощью инструмента, такого как Virustotal.com

Ответ 4

Стандартный ответ на вопросы обфускации: Использует ли обфускатор достаточно, чтобы защитить код JavaScript?

ИМО, это пустая трата времени. Если конкуренты могут понять ваш код в ясности (при условии, что это что-то более нескольких тысяч строк...), у них не должно быть проблем с деобфаснением.

Как я могу управлять этими рисками (будучи способный отлаживать неисправный код, обеспечения/минимизации ошибки обфускации)

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

Каковы ваши опыты использования запутанный код в производстве окружающая среда?

  • Быть полностью обойденным атаками бокового канала, повторять атаки и т.д.
  • Bugs.

Ответ 5

Google Closure Complier обфускает ваш код после его написания. То есть, напишите свой код, запустите его через компилятор и опубликуйте оптимизированные (и запутанные) js.

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

Ответ 6

Автоматическая обфускация полного кода пока доступна только в режиме расширенного компилятора Closure.

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

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

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

http://dojo-toolkit.33424.n3.nabble.com/file/n2636749/Using_the_Dojo_Toolkit_with_the_Closure_Compiler.pdf?by-user=t

Ответ 7

Вы можете использовать бизнес-модель с открытым исходным кодом и лицензировать свои скрипты с помощью GPL или Creative Commons BY-NC-ND или аналогичных

Ответ 8

Хотя обфускация вообще плохая вещь, ИМХО, с Javascript, история немного отличается. Идея состоит не в том, чтобы запутывать сам Javascript, а в том, чтобы производить более короткую длину кода (пропускная способность дороги, и что первые пользователи могут просто злиться, ожидая загрузки вашего Javascript в первый раз). Первоначально называемый minification (с такими программами, как minify), он развился совсем немного, и теперь доступен полный компилятор, такой как компилятор YUI и компилятор Google Closure. Такой компилятор выполняет статическую проверку (что хорошо, но только если вы следуете правилам компилятора), minification (замените это длинное имя переменной на "ab", например) и многие другие методы оптимизации. В конце концов, то, что вы получили, является лучшим из обоих миров, кодированием в некомпилированном коде и развертыванием скомпилированного (, уменьшенного и обфусканного) кода. К сожалению, вам, конечно же, нужно будет тестировать его более широко.

Ответ 9

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

Ответ 10

Запишите свой веб-сайт во Flash или еще лучше в Silverlight. Это даст вашей компании непревзойденный графический интерфейс, что ваши конкуренты будут слюны. Но скомпилированная природа flash/dotnet не позволит им легко выбрать ваш код. Это ситуация победы/победы для вас;)