Прячем WSO от АВ

Бедняга 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“, “<?”, “<%” из скриптов, которые вы хотите обфусцировать.
Используется всего 3 фичи:
1. Рандомные переменные.
2. Вызов функций через переменные (справка).
3. Заменяем последовательность из \xNN на 1 из 4 вариантов.
Больше ничего сверхъестественного не используется. Каждый раз содержимое разное (не меняется разве что то, что обернуто в base64). И в коде нет намека на палевные функции – base64_decode, eval, preg_replace и т.д.
Результат:
wso001

Комментарии