| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: Общие вопросы > помогите разобрать однострочник |
| Автор: fantome 1.12.2007, 07:22 | ||||
есть вот такой однострочник
по сути это законспирированный
Помогите понять как оно работает... |
| Автор: arto 1.12.2007, 08:17 |
| # perl -MO=Deparse -e '$??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;see' $? ? s/;s/s;;$?/ : s//=]=>%-{<-|}<&|`{/; tr( -/:-@[-`{-})[`-{/" \-]; s//$_;/see; -e syntax OK # затем просто проверять, что каждое выражение производит |
| Автор: amg 1.12.2007, 11:24 |
| По сути, там все просто. Первое, что надо сделать - воспользоваться советом arto, чтобы немного упростить задачу. Итак, имеем три строки. $? ? s/;s/s;;$?/ : s//=]=>%-{<-|}<&|`{/; или if ($?) { $_ =~ s/;s/s;;$?/ } else { $_ =~ s//=]=>%-{<-|}<&|`{/ } $? тут непричем, она будет 0, и исполнится вторая часть, которая запишет в $_ строку =>%-{<-|}<&|`{. tr( -/:-@[-`{-})[`-{/" \-]; Здесь основная хитрость, заключающаяся в том, что при перечислении символов, которые tr будет менять, используются интервалы символов. Раскроем их: perl -le 'print map {chr} ord(" ")..ord("-")' ... perl -le 'print map {chr} ord("`")..ord("{")' Получим $_ =~ tr( !"#$%&'()*+,-./:;<=>?@[\]^_`{|}) [`abcdefghijklmnopqrstuvwxyz{/"\-]; После выполнения такого tr $_ превратится в system"rm -rf /" s//$_;/see; Тут все ясно. Пустая строка (ищущая часть оператора s///) всегда подойдет, и вторая часть исполнится (опция e) |
| Автор: vadiml 1.12.2007, 18:16 |
| на ЛОРе нашли? |
| Автор: amg 2.12.2007, 10:46 | ||||
Если вопрос ко мне, то нет. В этом однострочнике ничего хитрого, несмотря на пугающий вид. Надо только депарсить его, а потом методично разбирать. Вот, по-моему, высший пилотаж:
ЗЫ Это я не сам придумал |
| Автор: Anarki 2.12.2007, 11:19 | ||||
Ага, это из Perl Cookbook. На самом деле ничего такого. |
| Автор: vadiml 2.12.2007, 18:42 |
| я задавал вопрос где нашли однострочник, а не его разбор на ЛОРе когда-то была тема: http://www.linux.org.ru/view-message.jsp?msgid=392747 типа "запустил сам -- дай запустить другому" Добавлено через 6 минут и 39 секунд к сожалению сейчас топик сильно порезан, но когда только появился ... |
| Автор: fantome 9.12.2007, 03:47 |
| vadiml, да, нашел там. А что? мне было интересно как он работает. Спасибо всем, кто помог мне его разобрать. Извините, что так долго не отписывался - работа.... |
| Автор: pompei 11.12.2007, 07:28 |
| О! Нифига рулез. Спасибо за расшифровку. А я думал что это какой-то особый сжатый сиснтаксис перла, и никак не мог найти по нём документацию. ЗЫ. Мне однажды друг попросил разобраться, а то у него, типа, не получается (под просточка прикинулся). Ну я по доброте душевной взял и запустил.... хорошо что я привык работать под своим пользователем, а не под рутом.... пока скрипт бегал по /dev я успел нажать на Ctrl+C. Ни чё не стёрлось. Мы потом так прикололись над одним сотрудником, который постоянно сидел под рутом и игнорировал все наши доводы по поводу безопасности.... ))))))))).... он потом весь день переустанавливал свой комп и покрывал нас трёхэтажными матами, но с рута так и не слез, паразит. |