2014-09-25 2 views
1

Я знаю о мини-устройствах, обфускаторах и минитракторах JS. Мне было интересно, есть ли какой-либо существующий инструмент (или любое быстрое решение для кода) до частично обфускации JavaScript. Частично я подразумеваю, что это должно стать трудным для чтения, но не казаться угасаемым/минированным. Он должен содержать отступы, но терять комментарии и частично изменять имена переменных, делая их неясными, не преобразовывая их в «a, b, c», как обфускатор.Semi-obfuscate/uglify JavaScript

Целью этого может быть использование явного и многоразового кода, которое делает его неявным и трудным для повторного использования другими людьми, не делая невозможным работать с самим собой.

Любая идея, с чего начать это достижение? Может быть, редактирование существующего обфускатора?

+0

Конечно, обфускация предназначена для производства, а источник предназначен для разработки. Под «без невозможности работать с собой» я имею в виду, что если вы создадите очень читаемый код с комментариями и явными именами переменных, его можно повторно использовать другими разработчиками, которые могут получить доступ к источникам. Теперь, если вы хотите, чтобы эти источники были неявными, которые трудно использовать другими разработчиками, вы хотите удалить комментарии и изменить имена переменных, чтобы сделать их менее явными. – Rayjax

+0

Для этого могут быть различные варианты использования: защита интеллектуальной собственности, предотвращение злоупотреблений со стороны компании (нанял вас на создание проекта убийцы и пожары вас, потому что у них достаточно людей для его поддержания), кражи источника ... И многие другие. Я видел бы это как способ защитить некоторые исходные коды от людей, которые имеют к ним доступ. Некоторые люди пишут неявный код с самого начала, но другие могут создавать явный, читаемый и многоразовый код, а затем по какой-либо причине они хотели бы сделать его неявным. – Rayjax

ответ

1

[Этот ответ является прямым ответом на запрос ОП].

Semantic Designs JavaScript obfuscator будет делать то, что вы хотите, но вам понадобятся два прохода.

На первом проходе запустить его как обфускатор; он будет переименовывать идентификаторы (хотя вы можете контролировать, сколько и как это делается), strip whitepspace и комментарии. Если вы ограничите свою способность переименовывать идентификаторы, вы потеряете силу obfuscator, но это ваш выбор.

На втором проходе запустите его как симпатичный принтер; он снова представит хороший отступ. (На самом деле идея обзаборевания пришла от создания симпатичного принтера, если вы можете печатать-довольно, конечно, легко печатать-уродливо).

С точки зрения работы с кодом, вам лучше работать с вашей основной копией, как вам нравится, в комплекте с отступом и приятным комментарием в качестве документации. Когда вы будете готовы обфузировать, вы запускаете obfuscator, отправляя обфускационный результат. Ошибки, сообщаемые в запутанном результате, которые связаны с запутанными именами, могут быть сопоставлены с исходными именами, используя карту obfuscated < -> оригинальные имена, созданные во время этапа обфускации.

Это продукт моей компании. Я бы предоставил ссылку, но SO ненавидит ее, когда я это делаю, поэтому вам придется найти ее через мою биографию или поисковик.

PS: Он работает точно так же, как предлагает @georg, анализируя AST, искажая и красивую печать. Он не использует esprima.

1

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

  • разобрать источник в AST, используя esprima или аналогичный
  • манипулировать дерево так, как вы хотите (например, удалить комментарии, катать идентификаторы и т.д.)
  • восстановить исходный код из дерева, используя escodegen
+0

Очень проницательный, поскольку он дает нам подсказки о компонентах uglifier – Rayjax

Смежные вопросы