Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.10.2012, 18:15
Профессор
Отправить личное сообщение для greenwar Посмотреть профиль Найти все сообщения от greenwar
 
Регистрация: 19.08.2010
Сообщений: 150

нужно совет профи. раскодировать JS
приветы
на сайте travian.com оранжевая кнопка "register here for free"
там есть скрытый блок "play on another world", в котором лежит список доступных серверов
всё это сделано на JS, но настолько он запутан, что моих знаний не хватает его распутать
а хотелось бы получить список этих серверов при парсинге страницы перлом, например
сам код, я так понимаю, находится в: <script type="text/javascript" src="crypt.js?1348143434"></script>
т.е. вот он
конкретно там есть такой текст:
self.popcontent().set("html",'<div class="loading"></div>');
вот здесь, походу, они и содержатся (если смотреть сайт без CSS, они где-то там)
вот как его раскодировать, может подскажете инструменты или какой-нибудь ресурс, где прутся от раскодирования сложных кодов?

Последний раз редактировалось greenwar, 06.10.2012 в 18:30.
Ответить с цитированием
  #2 (permalink)  
Старый 06.10.2012, 21:34
Профессор
Отправить личное сообщение для Hoshinokoe Посмотреть профиль Найти все сообщения от Hoshinokoe
 
Регистрация: 08.01.2012
Сообщений: 253

greenwar,

Скрипт ничем не закодирован, просто сделана минификация (удалены все пробелы и табуляция, названия переменных в методах заменены на короткие). Но код в целом читаем и понятен.

Сам скрипт содержит в себе 2 части:
1) MooTools (библиотека на js), её исходники можно свободно скачать

это видно из начала файла:
(function(){this.MooTools={version:"1.4.4",

2) Собственно код для сайта травиана, начинается со строчки:
window.Travian = { applicationId: "travian", emptyFunction: function () { }

Копируешь начиная с этой строки в любой редактор (например: idea, webstorm) и форматируешь.

Вот для наглядности фрагмент кода:
showPopup: function ()
{
    var url = new URI(this.options.url);
    var anchor = url.get("fragment");
    if (this.anchorsMapping[anchor]) { anchor = this.anchorsMapping[anchor] }
    var target = anchor + ".php";
    if (url.get("query").length > 0) { target += "?" + url.get("query") }
    if (this.allowedAnchors.indexOf(anchor) == -1)
    { if (this.options.anchorcheck == false) { target = this.options.url } else { return } }
    var self = this; var prevwindow = $$(this.options.pop_bg); var prevcontainer = $$(this.options.pop_container);
    var windowWidth = document.documentElement.clientWidth; prevcontainer[0].setStyles({ display: "block", visibility: "hidden" });
    prevcontainer[0].className = anchor; var popupWidth = prevcontainer[0].getStyle("width").toInt();
    var left = windowWidth / 2 - popupWidth / 2; prevwindow[0].setStyles({ opacity: "0.7", display: "block", height: $(document).getScrollSize().y });
    var scroll = $(document.body).getScroll(); prevcontainer[0].setStyles({ left: windowWidth / 2 - popupWidth / 2, top: scroll.y + 100, visibility: "visible", display: "block" });
    self.popcontent().set("html", '<div class="loading"></div>');
    var req = new Request.HTML({ url: target, evalScripts: false, onSuccess: function (html, responseElements, responseHTML, responseJavaScript)
    {
        self.popcontent().set("text", "");
        self.popcontent().adopt(html);
        if (anchor == "tutorial") { self.startTour() }
        if (self.options.insupport) { self.startSupport() }
        if (responseJavaScript) { eval(responseJavaScript) }
    }, 
    onFailure: function () { self.popcontent().set("text", "The request failed.") } 
    });
    req.send();
    var close = $$(this.options.close);
    close.addEvent("click", function ()
    {
        self.options.pop_container[0].setStyle("display", "none");
        self.options.pop_bg.setStyle("display", "none"); this.removeEvents()
    });
    var bg = $$(this.options.pop_bg); 
    if (this.options.closeOnClickBackground) { bg.addEvent("click", function () { self.options.pop_container[0].setStyle("display", "none"); self.options.pop_bg.setStyle("display", "none"); this.removeEvents() }) }
},


По тому что я увидел, делается запрос на сервер и он возвращает список серверов. Дальше ты сам разбирайся
Ответить с цитированием
  #3 (permalink)  
Старый 06.10.2012, 23:04
Профессор
Отправить личное сообщение для greenwar Посмотреть профиль Найти все сообщения от greenwar
 
Регистрация: 19.08.2010
Сообщений: 150

ага, я уже повыкусывал и mootools и mootools.more
через этот сайт привёл к божескому виду: http://jsbeautifier.org/
вижу в коде ajax с запросом, завтра буду разгребать, спасибо большое

а вот эта строка:
var url = new URI(this.options.url);
из чего собирается, что тут this, что тут options, а что тут url?
this, это сам домен текущий, видимо?
url.get("fragment"); - тоже непонятно..
эти данные берутся из mootools чтоли?

Последний раз редактировалось greenwar, 06.10.2012 в 23:15.
Ответить с цитированием
  #4 (permalink)  
Старый 07.10.2012, 09:13
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Та посмотрите в firebug-е, или другой консоли разработчика какие идут сетевые запросы со страницы, и что в них возвращается
Ответить с цитированием
  #5 (permalink)  
Старый 07.10.2012, 11:49
Профессор
Отправить личное сообщение для Hoshinokoe Посмотреть профиль Найти все сообщения от Hoshinokoe
 
Регистрация: 08.01.2012
Сообщений: 253

greenwar,

Запрос идет на http://travian.com/register.php, в результате возвращается html для попапа. В нем список серверов.

Как сказал товарищ Gvozd, это все легко увидеть с помощью firebug (вкладка Net).
Ответить с цитированием
  #6 (permalink)  
Старый 07.10.2012, 12:12
Профессор
Отправить личное сообщение для greenwar Посмотреть профиль Найти все сообщения от greenwar
 
Регистрация: 19.08.2010
Сообщений: 150

YES!
firebug рулит
я получил список серверов
javascript.ru рулит
всем ня!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
нужно написать фейк с элементами js в vk totcam Работа 3 27.10.2017 14:42
Нужно передать массив из php в JS tuezov52 AJAX и COMET 2 07.11.2011 00:08
помогите задать переменную в js bsgroupua Общие вопросы Javascript 3 01.02.2010 18:28
Нужно изменить направление JS (прокрутка текста) Axel Общие вопросы Javascript 2 18.04.2009 23:34
Нужно с помощью JS записывать данные в БД d!mm Общие вопросы Javascript 2 01.11.2008 18:36