Комментарии 38
Где здесь perl?
Автор bolknote.ru/2010/05/28/~2534#05 имел ввиду, что в первоначальном виде это очень похоже на perl, точнее, на регекспы.
ТС проделал, безусловно, титаническую работу (без иронии), приводя код в «человеческий» вид.
ТС проделал, безусловно, титаническую работу (без иронии), приводя код в «человеческий» вид.
Где здесь С++?
Действительно, просто и понятно
напоминает эпизод из мультика Вани Максимова когда цветочек нюхается так тщательно что аж из жопы вылазит www.youtube.com/watch?v=uupGLDTC9xU&feature=PlayList&p=5A71757BC9A3D74E&playnext_from=PL&playnext=1&index=34
Профессор читает лекцию по математике.
Выписывает на доске длиннющую, совершенно необозримую формулу и заявив:
«Отсюда с очевидностью следует...» выписывает еще более громоздкую формулу.
На минуту задумывается, потом, извинившись, выходит из аудитории.
Примерно через полчаса возвращается и, небрежно бросив на кафедру кипу исписанной бумаги, заявляет:
— Да, это действительно очевидно, — и продолжает лекцию.
Выписывает на доске длиннющую, совершенно необозримую формулу и заявив:
«Отсюда с очевидностью следует...» выписывает еще более громоздкую формулу.
На минуту задумывается, потом, извинившись, выходит из аудитории.
Примерно через полчаса возвращается и, небрежно бросив на кафедру кипу исписанной бумаги, заявляет:
— Да, это действительно очевидно, — и продолжает лекцию.
что-то нифига не работает или автор о чём-то умолчал
<html>
<body>
<script>(E=[A=[],µ=!A+A][µ[E=-~-~++A]+({}+A) [C=!!A+µ,?=C[A]+C[+!A],A]+?])() [µ[A]+µ[A+A]+C[E]+?](A)</script>
</body>
</html>
<html>
<body>
<script>(E=[A=[],µ=!A+A][µ[E=-~-~++A]+({}+A) [C=!!A+µ,?=C[A]+C[+!A],A]+?])() [µ[A]+µ[A+A]+C[E]+?](A)</script>
</body>
</html>
Круто! Надо написать запаковщик кода! Это ж jquery можно будет в несколько килобайт уместить.
Наоборот — сравните длину «alert(1)» и обфусцированной конструкции.
Учитывая что alert(1) — 8 байт превратили в 250 байт, то такой запаковщик с лёгкостью уместит jQuery в несколько мегабайт
попробуйте md5 — еще лучше сжимает :)
Вы не поверите, но запаковщик уже написаны до Вас :)
Небольшой о_О? То есть window.alet(1) — это длинно, а скрипт, он короткий? :)
Этот небольшой Javascript Йосуке Хасегава выполняет alert(1):
Небольшой о_О? То есть window.alet(1) — это длинно, а скрипт, он короткий? :)
dpaste.org/jDoh/
вариант по-короче (и по-вырвиглазнее). однако используется eval.
вариант по-короче (и по-вырвиглазнее). однако используется eval.
Осталось еще убрать переносы строк и добавить букв с закорючками.
dpaste.org/PyOq/
укороченная без выкрутасов (отдельная переменная для текста).
dpaste.org/OUpy/
с выкрутасами (всего 2 переменных). в 2 строки.
dpaste.org/AUtD/
одна строка. вместе с eval. :)
укороченная без выкрутасов (отдельная переменная для текста).
dpaste.org/OUpy/
с выкрутасами (всего 2 переменных). в 2 строки.
dpaste.org/AUtD/
одна строка. вместе с eval. :)
Я подумал, что под катом будет три слова: «Хер его знает!»
Забавно. так можно прятать код он любителей поковырять
С помощью подсказок автора смог восстановить последовательность действий, но несколько моментов остались загадкой. Помогите разобраться, люди добрые.
1. Что за оператор
2.1. Каков механизм действия конструкции
2.2. Почему
1. Что за оператор
~
?2.1. Каков механизм действия конструкции
[]['sort']
, возвращающей функцию sort()
? // Собственно как и аналогичных window['alert']
, 'string'['replace']
например…2.2. Почему
(f = Array.sort)();
возвращает объект Window
?1. ~ — это побитовое отрицание (побитовое инвертирование, bitwise not), которое заменяет все нулевые биты на единицы и наоборот.
2.1. Конструкции obj['something'] и obj.something работают одинаково и возвращают соответствующее свойство объекта. Метод — тоже свойство (типа Function). У объекта класса Array есть метод sort, т.е. есть свойство sort типа Function. Оно и возвращается.
2.1. Конструкции obj['something'] и obj.something работают одинаково и возвращают соответствующее свойство объекта. Метод — тоже свойство (типа Function). У объекта класса Array есть метод sort, т.е. есть свойство sort типа Function. Оно и возвращается.
1. ~ — Bitwise Not
2.1 Конструкция Object['field'] идентична Object.field, []['sort'] -> (new Array()).sort(), window['alert'] -> window.alert
2.2 Тут вызывается функция из прототипа от имени текущего скопа, (f = Array.sort)() -> sort.call() -> sort.call(Window)
2.1 Конструкция Object['field'] идентична Object.field, []['sort'] -> (new Array()).sort(), window['alert'] -> window.alert
2.2 Тут вызывается функция из прототипа от имени текущего скопа, (f = Array.sort)() -> sort.call() -> sort.call(Window)
2.2. …и, так как метод sort возвращает this, то, будучи вызванным от имени window, возвращает window.
Спасибо большое! Хотел было написать, что 2.2. до сих пор не понял, но не стал спешить и таки разобрался.
В такие моменты жалею, что мое программирование на Javascript зачастую сводится к
В такие моменты жалею, что мое программирование на Javascript зачастую сводится к
jQuery('selector').click(function(){...})
и тому подобным. Фундаментальные понятия языка либо читались ознакомительно вскользь, либо до сих пор неизвестны по причине отсутствия задач, требующих их знания и применения.какой простор для XSS
Спасибо, это было великолепно!
… и закурил.
… и закурил.
Уважаемые знатоки, скажите, почему выражение "{} + 1" интерпретируется как сложение, а то же выражение, но взятое в скобки, — как конкатенация строк (на выходе "[object Object]1")?
впечатляет
Немного развлекся и написал eval:
(È=[][(!(A=!!(Å=-~[])+[])+A)[-~Å+Å]+({}+A)[Å]+A[Å]+A[~~[]]]||A)()[({}[A]+A)[-~Å+Å]+(È+A)[-~Å+[]+((-~Å+Å)*-~Å+Å)]+(!A+A)[Å]+(!A+A)[++Å]](' alert(«Aleko») ')
// аналог eval(' alert(«Aleko») ')
(È=[][(!(A=!!(Å=-~[])+[])+A)[-~Å+Å]+({}+A)[Å]+A[Å]+A[~~[]]]||A)()[({}[A]+A)[-~Å+Å]+(È+A)[-~Å+[]+((-~Å+Å)*-~Å+Å)]+(!A+A)[Å]+(!A+A)[++Å]](' alert(«Aleko») ')
// аналог eval(' alert(«Aleko») ')
Можно ещё немного сократить:
(È=[][(!(A=!!(Å=-~[])+[])+A)[E=(µ=-~Å)+Å]+({}+A)[Å]+A[Å]+A[~~[]]]||A)()[({}[A]+A)[E]+(È+A)[µ+[]+(E*µ+Å)]+(Ç=!A+A)[Å]+Ç[++Å]](' alert(«Aleko») ')
(È=[][(!(A=!!(Å=-~[])+[])+A)[E=(µ=-~Å)+Å]+({}+A)[Å]+A[Å]+A[~~[]]]||A)()[({}[A]+A)[E]+(È+A)[µ+[]+(E*µ+Å)]+(Ç=!A+A)[Å]+Ç[++Å]](' alert(«Aleko») ')
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Perl write-only vs. JS write-only