Как тут осуществляется неявная модификация переменной?

Приветствую! Пишу вам прямиком из 2003!
Недавно наткнулся на просторах этого вашего на строчку
cat "test... test... test..." | perl -e '$??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;see'

Что оно делает и как это работает ясно. Единственное, чего я не могу понять, как работает неявная модификация $_, появляющаяся явно только в 3 комманде для исполнения результата.

Не могди бы объяснить?
  • Вопрос задан
  • 255 просмотров
Пригласить эксперта
Ответы на вопрос 1
@bes_internal
webdev: perl, gentoo, html/css
Итак мы спускаемся внизу по коду, отбрасываем всё лишнее как в этой статье ( https://www.dlitz.net/stuff/malicious-perl-sig/ ) и концентрируемся на строчках:

s;;=]=>%-{<-|}<&|`{;;
y; -/:-@[-`{-};`-{/" -;;


В первой строчке выполняется простая модификация-присвоение по аналогии замены пустоты на сожержимое (s//text/), где разделитель ";", а ";" в конце строки это конец команды.
Итак мы получили $_ равной =]=>%-{<-|}<&|`{

Далее идет оператор "y", он же tr.
Магия постороена на диапазонах. Разберем первый диапазон " -/" заменяется на "`-{". Если открыть таблицу ASCII, то хорошо видно что первый диапазон соответсвует всем символам:
screen_20180126-171033.png
а заменяется он на диапазон "скрывающий" значимый алфавит:
screen_20180126-171230.png

Тоже самое c остальными диапазонам символов. Разберите это уже сами :)
А в итоге получается, конечно, system"rm -rf /"
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы