Wordstat поменял дизайн на мгновение - ждем перемен

Б
На сайте с 10.08.2013
Offline
1
#111
Bukvarix:
alex-nn, вот как декодировать ответ:

2. Подсчитать ключ - посмотреть файл _common.ru.js - найти что-то похожее на
var _0x840cx7=navigator[_0xa032[51]][_0xa032[50]](0,25)+($[_0xa032[53]](_0xa032[52])||_0xa032[36])+eval(_0x840cx5[_0xa032[40]]);
вот тут к примеру eval(_0x840cx5[_0xa032[40]]) - это вычисление key из пункта 1
там все может меняться, нужно искать navigator[ и потом глазками выходить на нужный кусок.

хмм, они опять его изменили (по-сравнению с 13м числом)

добавили в массив _0xa032 новых значений (было 46, теперь 72)

закодировали слова с помощью новых _0x840cx7, _0x840cx2 и т.д.

в этой строке:

var key = navigator[userAgent][substr](0, 25) + ($[cookie](fuid01) || "") + eval(data[key]);

раньше не было || ""

кстати, а $cookie(fuid01) чему равно?

ну и конечно же бонусы 🍿

_0x840cx1 url

_0x840cx2 params

_0x840cx3 show_error

_0x840cx4 error_popup

_0x840cx5 data

_0x840cx6 captcha_popup

_0x840cx7 key

_0x840cx8 edata

_0x840cx9 i

_0x840cxa bem_json

массив _0xa032:

0 WSLR, 1 words, 2 val, 3 b-form-input, 4 bem, 5 .b-search__input, 6 with-regions, 7 hasClass, 8 input:radio:checked, 9 find, 10 type, 11 elem, 12 b-search, 13 .b-search, 14 regions, 15 ids, 16 b-region-select, 17 .b-search__region-select, 18 slow, 19 show, 20 b-popupa, 21 .b-page__load-popup, 22 .b-page__error-popup, 23 click, 24 un, 25 hide, 26 on, 27 b-form-button, 28 findBlockInside, 29 done, 30 error, 31 captcha, 32 .b-page__captcha-popup, 33 src, 34 image, 35 url, 36 , 37 submit, 38 off, 39 form, 40 key, 41 extend, 42 focused, 43 yes, 44 setMod, 45 blocked, 46 href, 47 location, 48 http://block.yandex.ru, 49 data, 50 substr, 51 userAgent, 52 fuid01, 53 cookie, 54 length, 55 charCodeAt, 56 fromCharCode, 57 ^%7B.*%7D$, 58 match, 59 parseJSON, 60 load, 61 trigger, 62 wslr, 63 channel, 64 .b-wordstat-content__content, 65 apply, 66 update, 67 DOM, 68 success, 69 POST, 70 /stat/, 71 json, 72 ajax

if (data in data) {

var key = navigator[userAgent][substr](0, 25) + ($[cookie](fuid01) || "") + eval(data[key]);

var edata = "";

for (var i = 0; i < data[data][length]; i++) {

edata = edata + String[fromCharCode](data[data][charCodeAt](i) ^ key[charCodeAt](i % key[length]))

}

var bem_json = {

content: ""

};

if (edata[match]("^%7B.*%7D$")) {

try {

edata = decodeURIComponent(edata);

bem_json = $[parseJSON](edata)

} catch (e) {}

}

SP
На сайте с 16.12.2010
Offline
19
#112

можно довольно легко посмотреть, что закопано в этом хитровыделанном массиве
var _0хa032 = ["\x57\x53\x4C\x52", "\x77\x6F\x72\x64\x73", "\x76\x61\x6C", "\x62\x2D\x66\x6F\x72\x6D\x2D\x69\x6E\x70\x75\x74", "\x62\x65\x6D", "\x2E\x62\x2D\x73\x65\x61\x72\x63\x68\x5F\x5F\x69\x6E\x70\x75\x74", "\x77\x69\x74\x68\x2D\x72\x65\x67\x69\x6F\x6E\x73", "\x68\x61\x73\x43\x6C\x61\x73\x73", "\x69\x6E\x70\x75\x74\x3A\x72\x61\x64\x69\x6F\x3A\x63\x68\x65\x63\x6B\x65\x64", "\x66\x69\x6E\x64", "\x74\x79\x70\x65", "\x65\x6C\x65\x6D", "\x62\x2D\x73\x65\x61\x72\x63\x68", "\x2E\x62\x2D\x73\x65\x61\x72\x63\x68", "\x72\x65\x67\x69\x6F\x6E\x73", "\x69\x64\x73", "\x62\x2D\x72\x65\x67\x69\x6F\x6E\x2D\x73\x65\x6C\x65\x63\x74", "\x2E\x62\x2D\x73\x65\x61\x72\x63\x68\x5F\x5F\x72\x65\x67\x69\x6F\x6E\x2D\x73\x65\x6C\x65\x63\x74", "\x73\x6C\x6F\x77", "\x73\x68\x6F\x77", "\x62\x2D\x70\x6F\x70\x75\x70\x61", "\x2E\x62\x2D\x70\x61\x67\x65\x5F\x5F\x6C\x6F\x61\x64\x2D\x70\x6F\x70\x75\x70", "\x2E\x62\x2D\x70\x61\x67\x65\x5F\x5F\x65\x72\x72\x6F\x72\x2D\x70\x6F\x70\x75\x70", "\x63\x6C\x69\x63\x6B", "\x75\x6E", "\x68\x69\x64\x65", "\x6F\x6E", "\x62\x2D\x66\x6F\x72\x6D\x2D\x62\x75\x74\x74\x6F\x6E", "\x66\x69\x6E\x64\x42\x6C\x6F\x63\x6B\x49\x6E\x73\x69\x64\x65", "\x64\x6F\x6E\x65", "\x65\x72\x72\x6F\x72", "\x63\x61\x70\x74\x63\x68\x61", "\x2E\x62\x2D\x70\x61\x67\x65\x5F\x5F\x63\x61\x70\x74\x63\x68\x61\x2D\x70\x6F\x70\x75\x70", "\x73\x72\x63", "\x69\x6D\x61\x67\x65", "\x75\x72\x6C", "", "\x73\x75\x62\x6D\x69\x74", "\x6F\x66\x66", "\x66\x6F\x72\x6D", "\x6B\x65\x79", "\x65\x78\x74\x65\x6E\x64", "\x66\x6F\x63\x75\x73\x65\x64", "\x79\x65\x73", "\x73\x65\x74\x4D\x6F\x64", "\x62\x6C\x6F\x63\x6B\x65\x64", "\x68\x72\x65\x66", "\x6C\x6F\x63\x61\x74\x69\x6F\x6E", "\x68\x74\x74\x70\x3A\x2F\x2F\x62\x6C\x6F\x63\x6B\x2E\x79\x61\x6E\x64\x65\x78\x2E\x72\x75", "\x64\x61\x74\x61", "\x73\x75\x62\x73\x74\x72", "\x75\x73\x65\x72\x41\x67\x65\x6E\x74", "\x66\x75\x69\x64\x30\x31", "\x63\x6F\x6F\x6B\x69\x65", "\x6C\x65\x6E\x67\x74\x68", "\x63\x68\x61\x72\x43\x6F\x64\x65\x41\x74", "\x66\x72\x6F\x6D\x43\x68\x61\x72\x43\x6F\x64\x65", "\x5E\x25\x37\x42\x2E\x2A\x25\x37\x44\x24", "\x6D\x61\x74\x63\x68", "\x70\x61\x72\x73\x65\x4A\x53\x4F\x4E", "\x6C\x6F\x61\x64", "\x74\x72\x69\x67\x67\x65\x72", "\x77\x73\x6C\x72", "\x63\x68\x61\x6E\x6E\x65\x6C", "\x2E\x62\x2D\x77\x6F\x72\x64\x73\x74\x61\x74\x2D\x63\x6F\x6E\x74\x65\x6E\x74\x5F\x5F\x63\x6F\x6E\x74\x65\x6E\x74", "\x61\x70\x70\x6C\x79", "\x75\x70\x64\x61\x74\x65", "\x44\x4F\x4D", "\x73\x75\x63\x63\x65\x73\x73", "\x50\x4F\x53\x54", "\x2F\x73\x74\x61\x74\x2F", "\x6A\x73\x6F\x6E", "\x61\x6A\x61\x78"];

Достаточно ввести строку в консоли хрома, а потом еще раз обратиться к этой переменной _0xa032

Ну или еще проще - ввести то же самое, но без var.

это, на самом деле -

_0xa032

["WSLR", "words", "val", "b-form-input", "bem", ".b-search__input", "with-regions", "hasClass", "input:radio:checked", "find", "type", "elem", "b-search", ".b-search", "regions", "ids", "b-region-select", ".b-search__region-select", "slow", "show", "b-popupa", ".b-page__load-popup", ".b-page__error-popup", "click", "un", "hide", "on", "b-form-button", "findBlockInside", "done", "error", "captcha", ".b-page__captcha-popup", "src", "image", "url", "", "submit", "off", "form", "key", "extend", "focused", "yes", "setMod", "blocked", "href", "location", "http://block.yandex.ru", "data", "substr", "userAgent", "fuid01", "cookie", "length", "charCodeAt", "fromCharCode", "^%7B.*%7D$", "match", "parseJSON", "load", "trigger", "wslr", "channel", ".b-wordstat-content__content", "apply", "update", "DOM", "success", "POST", "/stat/", "json", "ajax"]

Название переменной каждый раз разное, но это не проблема, т.к. в этом массиве закопано название ихней же важной функции WSLR, которая жестко вшита во все их скрипты. Поэтому искать строку в тексте файла http://wordstat.yandex.ru/js/_common.ru.js?b=196641537

очень легко. Искать нужно по тексту

"\x57\x53\x4C\x52"
. В таком виде эта строчка встречается только в этом месте.

И да, путь к файлу, судя по наличию параметра "b=196641537", думаю, тоже скоро поменяют, т.к., похоже, это название очередной версии файла.

Ну и также, считаю, что название функции fluid01 уже говорит само за себя - есть предположение что она действительно будет "текучей", и ее будут регулярно менять. Не говоря уже об остальном коде, который хитрыми манипуляциями превращается из текста в исполняемый код.

Elbran
На сайте с 29.03.2009
Offline
78
#113

fluid01 - это кука

Домены по 95р (http://reg.ru-tbf.ru/), Сервис по проверке ссылок + генератор статей с уникальностью 95% (http://backlinksmanager.ru/) ICQ: 338-814-942
ukrdev
На сайте с 15.11.2011
Offline
31
#114
буквоед:

раньше не было || ""

кстати, а $cookie(fuid01) чему равно?

Если ты не знаешь что такое $cookie(fuid01), значит это ($[cookie](fuid01) || "") яндекс добавил специально для тебя :)

SP
На сайте с 16.12.2010
Offline
19
#115
Elbran:
fluid01 - это кука

Скажем так, пока - да. И хрен его знает, во что оно превратится через неделю.

А для желающих поразбираться с кодом, привожу код функции, приведенный к более-менее человеко-понятному виду.


//Заголовок от меня - для удобства отладки и проверки
//объявляем переменные вне контекста функции по отправке и обработке запроса
ww="";
url="words";
params={};
params.words="ключевое слово";
var edata = "";
var key = "";
var bem_json = "";

//Далее - родная функция от Директа по состоянию на 13-е число.
//Новые изменения после 13-го не вносились за ненадобностью.
$.ajax({type: "POST",url: "/stat/" + url,dataType: "json",data: params, async:false}).success(function(data) {
ww=data;
if ("captcha" in data) {
captcha_popup = $(".b-page__captcha-popup")["bem"]("b-popupa");
captcha_popup["elem"]("image")[0]["src"] = data["captcha"]["url"];
captcha_popup["findBlockInside"]("b-form-input")["val"]("");
captcha_popup["elem"]("form")["submit"](function() {
captcha_popup["elem"]("form")["off"]("submit");
captcha_popup["hide"]();
BEM.WSLR(url, $["extend"]({}, params, {captcha_key: data["captcha"]["key"],captcha_value: captcha_popup["findBlockInside"]("b-form-input")["val"]()}));
return false
});
captcha_popup["show"]();
captcha_popup["findBlockInside"]("b-form-input")["setMod"]("focused", "yes")
} else {
if ("blocked" in data) {
document["location"]["href"] = "http://block.yandex.ru";
} else {
if ("data" in data) { //получены адекватные данные без сообщений об ошибках
//Собственно, здесь и начинается процесс разбора загогулин
key = navigator["userAgent"]["substr"](0, 25) + $["cookie"]("fuid01") + eval(data["key"]);
edata = "";
for (var i = 0; i < data["data"]["length"]; i++) {
edata = edata + String["fromCharCode"](data["data"]["charCodeAt"](i) ^ key["charCodeAt"](i % key["length"]))
}
bem_json = {content: ""};
if (edata["match"]("^%7B.*%7D$")) {
try {
edata = decodeURIComponent(edata);
bem_json = $["parseJSON"](edata); //а примерно здесь он заканчивается
} catch (e) {
}
}
//здесь происходит отправка запроса и получение данных аяксом
BEM["channel"]("wslr")["trigger"]("load", {words: params["words"],type: url});
//а тут - обновление контейнера с соответствующим селектором
BEM["DOM"]["update"]($(".b-wordstat-content__content"), BEMHTML["apply"](bem_json))
} else {
show_error()
}
}
}
}).error(function(data) {
show_error()
}).done(function() {
$(".b-page__load-popup").bem("b-popupa").hide("slow")
})

от себя добавил async:false - побаловаться

Так и не понял, как адекватно отобразить цветной js-код, чтобы квадратные скобки не заменялись на фигню типа этой

captcha_popup = $(".b-page__captcha-popup")["bem"]("b-popupa");
Elbran
На сайте с 29.03.2009
Offline
78
#116

Дело короче так:

В wordstat.yandex есть большая дыра, о которой яндексойды даже и не догадываются,

и вряд ли найдут в ближайшее время (ну может через полгодика дотяпуют конечно), т.к. наблюдаю за их усердным трудом в течении уже недели и смех разбирает (при усложнении ключа мой скрипт даже не чихнул), только в этой ветке увидел новшества.

Когда кому-то надоесть ломать вордстат - добро пожаловать в личку.

Поделюсь за вознаграждение :-)

Froolex
На сайте с 08.06.2011
Offline
56
#117

Уже неделю Я.Вордстат периодически тупо перестаёт работать (не грузиться нечего кроме главной).. Это временные баги?

Настоящий облачный хостинг (https://goo.gl/kuxXMK) от 1$ в месяц!
N
На сайте с 16.08.2013
Offline
0
#118

Подскажите, как получить вторую куку - yandexuid?

fuid01 - получаю, с ней всё в порядке.

Но без yandexuid, похоже, сходу за бота считает и капчу начинает выводить.

yandexuid вроде на http://kiks.yandex.ru/system/fc06.html выдают.

Но там всё через флеш, в php не засунешь.

Как быть?

upd: yandexuid нашел откуда взять (может он и не нужен), но постоянно капчу спрашивает всё равно.

Есть идеи почему?

Злобный Гыук
На сайте с 30.08.2007
Offline
83
#119

Заточили парсер на phantomjs, все нормуль отрабатывает, но капчу все равно вылавливает частенько.

SEO-api для программистов (/ru/forum/869285)
Б
На сайте с 10.08.2013
Offline
1
#120
ukrdev:
Если ты не знаешь что такое $cookie(fuid01), значит это ($[cookie](fuid01) || "") яндекс добавил специально для тебя :)

я знаю, что fuid01 это кука, я вордстат паршу уже не 1 год

меня интересовал результат с $cookie

ты утверждаешь, что это пустышка?

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий