Комментарии 37
Спасибо за статью, но…
А где же код обфускатора?
А где же код обфускатора?
Можно узнать о задаче из-за которой возникла такая необходимость? Интересуюсь потому как подобный обфускатор может работать только с примитивными JS конструкциями, да и деофусцируется руками достаточно просто, что в свою очередь ставит под сомнения оправданность его создания кроме как for fun.
Вообще прикольно. Я получил удовольствие прочитав статью.
С помощью closure compiler Ваш код превращается в удобочитаемый (да и вообще — слабая защита от firebug).
По эффективности и сложности деобфускации — не самое эффективное решение.
С помощью closure compiler Ваш код превращается в удобочитаемый (да и вообще — слабая защита от firebug).
По эффективности и сложности деобфускации — не самое эффективное решение.
Интересно, а как с производительностью у этого обфусцированного кода?
Вы проводили какие-нибудь тесты?
Вы проводили какие-нибудь тесты?
Можно еще собрать слово constructor:
[]['constructor']['constructor']('alert(this)')();
… однако это не так, не вдаваясь в подробности представления чисел и всякие дебри (мантиссы, знаковые разряды) ...
Видео объясняет «магию» с числами в JS и не только (на английском)
это как дополнение к посту
Можете еще добавить ссылку на статью Обфускация JavaScript
Сейчас добавлю, натыкался на неё, когда собирал материал. Благодарю.
особенность js (и не только), в том, то при булевых операциях если операнд не является булевым типом и не равен 0 то он признается за true
Не совсем так. В булевых операциях если операнд равен
0
, false
, undefined
, null
, ''
(пустой строке), то он приводится к false
. Во всех остальных случаях — к true
.Спасибо, сейчас исправлю.
Когда меня попросили сделать защиту от ботов для тизерной сети, я ограничился генерацией кода типа
Человеку в принципе и такое достаточно сложно разобрать. А если к боту добавлен JS интерпретатор, то более-менее защитить может только динамическое обращение к окружению браузера (типа
var hash = function(){var _=substr(1, 2, substr(2, 4, 'ngveifq3dm3129ejf'))(); return substr(5, 3,_)+substr(6, 8,_)....
деталей сейчас уже не вспомню.Человеку в принципе и такое достаточно сложно разобрать. А если к боту добавлен JS интерпретатор, то более-менее защитить может только динамическое обращение к окружению браузера (типа
if(window.alert) return true; else return false
в браузере вернёт true а в голом интерпретаторе false)Давайте еще подумаем, сколько будет -1/-0? Бесконечность
Неопределённость — как математик говорю.
Хм, я всегда считал, что 0/0 = неопределенность, так же как и ∞/0, а вот если делить на ноль вещественное число, то будет бесконечность. Или я путаю просто ноль и стремление к нулю?
А зачем вы всё это делаете? Материал изучен (есть статьи), обсускаторы по этой методике написаны, а вы изобретаете велосипед, да ещё и плохой. Например ваше «([]|[])» заменяется просто на «+[]».
Да, а еще можно заменить на ((![[]]+![[]])) или ([[]]|[[]]). Извиняюсь, конечно, но Вы судите о том, что еще не видели. К тому же, что Вам мешает игнорировать очередной «велосипед», если Вы его таковым посчитаете. Однако, если у Вас есть конструктивная критика, то я с удовольствием её выслушаю.
Это не обфускатор, это игрушка.
Даже если не обращать внимание на объем или производительность. Символы закодированные таким методом одназначно восстанавливаются в исходные. Это примерно такой же уровень как кодировать урлы в base64.
Тоесть всю сложность для деобфускации представляют те шаги которые были сделанны до или после самой зрелищной части со скобочками.
Даже если не обращать внимание на объем или производительность. Символы закодированные таким методом одназначно восстанавливаются в исходные. Это примерно такой же уровень как кодировать урлы в base64.
Тоесть всю сложность для деобфускации представляют те шаги которые были сделанны до или после самой зрелищной части со скобочками.
Согласен, сам по себе такой метод не эффективен, однако в комбинации с другими методами может получиться вполне не плохо.
Если проводить аналогию с URL дальше, то закодировав в Base64 мы ничего не добьемся, а вот если перед этим URL зашифруем любым криптоалгоритмом, то получается совсем другая песня.
Если проводить аналогию с URL дальше, то закодировав в Base64 мы ничего не добьемся, а вот если перед этим URL зашифруем любым криптоалгоритмом, то получается совсем другая песня.
Но в чём смысл обусфицировать javascript?
Уже сходу можно будет понять, как примерно всё работает, просто запустив пошаговое выполнение.
Уже сходу можно будет понять, как примерно всё работает, просто запустив пошаговое выполнение.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Еще раз об обфускации JavaScript или сказ о том, как я обфускатор писал. Часть 1