Прячем WSO от АВ

wso002

Бедняга WSO булава палица половиной АВ.  Как не пакованый (26/55), так и пакованный (лол, но даже 30/55). Сегодня мы научимся обфусцировать WSO так, что он выживет даже после самого суроваво сканенга файленгов на хостенге.

Для начала, давайте взглянем на пакованный шелл:

Я убрал данные обернутые base64, ради экономии места.
Первые 5 строк - это дикое палево, сколько шеллов было найдено по "FilesMan"... Поэтому эти 5 строк мы запихнем туда же, где остальной код в base64. А сейчас можем отбросить. И у нас будет примерно такой кодес:

Начнем с конца. Третий параметр в preg_replace - "." мы можем заменить чем угодно, работа скрипта ни капельки не измениться.
Что это за "\x65\x76....\xNN"? Все просто (выведем это дело print'ом ):

Ничего сверхъестественного.
Ну а первый параметр - "/.*/e",  это регулярка с модификатором, благодаря которому содержимое второго параметра исполняется как php-код. Именно на этот модификатор и саму функцию preg_replace часто брыкаются антивирусы и всякие скрипты поиска шеллов -  дохторы айболиты и прочие сатанинские поделки. А на серваках, где стоит suhosin патч, preg_replace с модификатором e вообще не работает.

Так давайте напишем простейший обфускатор (в смысле я написал, а вы почитайте немного говнокода) чуть больше чем в сотню строк:

Не забывайте, что мы пихаем код в eval, поэтому надо убирать "<?php", "<?", "<%" из скриптов, которые вы хотите обфусцировать. И если вы обфусцируете не WSO, то добавьте в конце скрипта "exit;".

Используется всего 3 фичи:
1. Рандомные переменные.
2. Вызов функций через переменные (справка).
3. Заменяем последовательность из \xNN на 1 из 4 вариантов.

Больше ничего сверхъестественного не используется. Каждый раз содержимое разное (не меняется разве что то, что обернуто в base64). И в коде нет намека на палевные функции - base64_decode, eval, preg_replace и т.д.

Результат:

wso001

Скрипт "Айболит" и еще пара уебищных поделок, аналогично, соснули скриптца.
UPDATE. Обфускатор WSO онлайн.