Pull to refresh

Comments 37

Спасибо за статью, но…
А где же код обфускатора?
Извиняюсь, будет в следующей статье, над которой я в данный момент работаю, думаю стоит подправить название статьи добавив «Часть 1». Fixed.
Это будет познавательно.
Попробую на его основе сделать реобфускатор (вдруг столкнусь с Вашим творением).
В принципе, по завершению работ код будет доступен на github, а что касается деобфускатора — я Вам даже помогу, самому интересно =)
Можно узнать о задаче из-за которой возникла такая необходимость? Интересуюсь потому как подобный обфускатор может работать только с примитивными JS конструкциями, да и деофусцируется руками достаточно просто, что в свою очередь ставит под сомнения оправданность его создания кроме как for fun.
Задача = заказ. Что касается деобфускации кода, на мой взгляд Вы несколько торопитесь с выводами, ведь сам обфускатор еще не представлен (что будет во второй части), как и код, который он генерирует, при этом не стоит забывать, что пример в статье синтетический, созданный руками.
Готов поспорить, что напишу такой JS код, который сломается после подобной обфускации. Ждем релиза.
Окей, жду новостей в этой ветке/топике.
Вообще прикольно. Я получил удовольствие прочитав статью.

С помощью closure compiler Ваш код превращается в удобочитаемый (да и вообще — слабая защита от firebug).
По эффективности и сложности деобфускации — не самое эффективное решение.

Насчет деобфускации — ответил выше. Ну а так, рад, что Вам понравилось, мне самому было интересно писать эту статью.
Есть предположение что сам closure compiler явно лучше справится с обфускацией кода.
Его же можно было выполнить как раз из самого php ;-)
Интересно, а как с производительностью у этого обфусцированного кода?
Вы проводили какие-нибудь тесты?
Тесты не проводились, но производительность кода гарантированно упадет.
Да, с изучения этого и подобных обфускаторов я и начинал.
Да, а еще можно использовать функции atob и bota
Сейчас добавлю в пост, благодарю
Сейчас добавлю, натыкался на неё, когда собирал материал. Благодарю.
особенность js (и не только), в том, то при булевых операциях если операнд не является булевым типом и не равен 0 то он признается за true

Не совсем так. В булевых операциях если операнд равен 0, false, undefined, null, '' (пустой строке), то он приводится к false. Во всех остальных случаях — к true.
Когда меня попросили сделать защиту от ботов для тизерной сети, я ограничился генерацией кода типа 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, а вот если делить на ноль вещественное число, то будет бесконечность. Или я путаю просто ноль и стремление к нулю?
x / 0 — согласно стандарту IEEE 754, если знаменатель будет стремиться к нулю или числитель к бесконечности, то результат будет равен +/Infinity.
Спасибо за разъяснения, поставил бы плюс, но кармы не хватает
А зачем вы всё это делаете? Материал изучен (есть статьи), обсускаторы по этой методике написаны, а вы изобретаете велосипед, да ещё и плохой. Например ваше «([]|[])» заменяется просто на «+[]».
Да, а еще можно заменить на ((![[]]+![[]])) или ([[]]|[[]]). Извиняюсь, конечно, но Вы судите о том, что еще не видели. К тому же, что Вам мешает игнорировать очередной «велосипед», если Вы его таковым посчитаете. Однако, если у Вас есть конструктивная критика, то я с удовольствием её выслушаю.
Если вы хотели критики, то вы неправильно статью начали. Вы дипломную работу сдавали когда-нибудь? Там для начала спрашивают — если есть аналоги, то чем ваше решение лучше? Вот и рассказали бы для чего вы начали писать свой велосипед, если есть аналоги.
Это не обфускатор, это игрушка.
Даже если не обращать внимание на объем или производительность. Символы закодированные таким методом одназначно восстанавливаются в исходные. Это примерно такой же уровень как кодировать урлы в base64.
Тоесть всю сложность для деобфускации представляют те шаги которые были сделанны до или после самой зрелищной части со скобочками.
Согласен, сам по себе такой метод не эффективен, однако в комбинации с другими методами может получиться вполне не плохо.
Если проводить аналогию с URL дальше, то закодировав в Base64 мы ничего не добьемся, а вот если перед этим URL зашифруем любым криптоалгоритмом, то получается совсем другая песня.
Да, но зачем тогда вообще кодировать в base64?
Как вариант — психологический эффект, однако тут есть дополнительный бонус, это отсев интерпретаторов
Но в чём смысл обусфицировать javascript?
Уже сходу можно будет понять, как примерно всё работает, просто запустив пошаговое выполнение.
Sign up to leave a comment.

Articles

Change theme settings