SergeyPalch

Рейтинг
19
Регистрация
16.12.2010
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");

можно довольно легко посмотреть, что закопано в этом хитровыделанном массиве
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 уже говорит само за себя - есть предположение что она действительно будет "текучей", и ее будут регулярно менять. Не говоря уже об остальном коде, который хитрыми манипуляциями превращается из текста в исполняемый код.