1. Вы находитесь в архивной версии форума xaker.name. Здесь собраны темы с 2007 по 2012 год, большинство инструкций и мануалов уже неактуальны.
    Скрыть объявление

Автоматическая расшифровка HTML-кода, зашифрованного Java

Тема в разделе "Компьютерная литература", создана пользователем error_, 23 дек 2009.

  1. error_

    error_ Guest

    Автоматическая расшифровка HTML-кода, зашифрованного Java

    Есть у меня на одном из сайтов закрытый прокси-чекер для своих нужд. За неимением ботнета пополнять списки проксей приходится вручную. Делаю я это так: захожу на сайт с бесплатными списками прокси, копирую в буфер обмена кусок страницы, содержащий прочеканные недавно адреса и вставляю это в форму своего прокси-чекера, который потом сам из этой каши при помощи регулярных выражений выбирает все сочетания ip : port и добавляет в очередь на чеканье. Проблема в том, что даже такой копипаст меня постепенно утомил. Прокси со временем дохнут, и чтобы получить более-менее приличный список работающих проксей из всевозможных стран, надо чуть ли не каждый день скармливать прокси-чекеру новые партии свежих адресов.

    В общем я подумал, что надо завязывать с копипастом и решил что новые прокси должны добавляться в мой прокси-чекер без моего участия. Вот здесь находится список свежих работающих проксей, который обновляется каждые 3 часа: checker.freeproxy.ru/checker/last_checked_proxies.php
    Поначалу мне хотелось написАть скрипт для его скачки wget-ом и парсинга, и добавить всё это в crontab. Но я быстро обломался, когда обнаружил, что ip : port проксей просто так не вытянешь со страницы, т.к. он генерится при помощи javascript и вставляется при помощи document.write():

    Код:
    <script> <!--
    name = '97.95.172.222';
    port1 = 6773;
    port2 = 7489;
    port3 = 6178;
    port4 = 7715;
    port5 = 5883;
    port6 = 3609;
    port7 = 8385;
    port8 = 3091;
    port9 = 6259;
    port10 = 6584;
    IQKYLQ = port3 + (32630-211) / 17;
    document.write(name + ':' + IQKYLQ);
    // --></script>
    <!-- Don't try to parse this code! This is second notification! -->
    Я решил прислушаться к комменту и не парсить код. Но не из-за коммента, а потому что алгоритм шифрования могут изменить в самый неподходящий момент и тогда мне придётся переделывать парсилку.

    Тогда я подумал, что будет проще заходить на эту страницу браузером и при помощи DOM вытаскивать то, что нагенерил javascript. Быстро прикинул, что для этого нужно:

    1. Нужно написАть Extension для браузера, который без моего участия раз в 3 часа заходит на checker.freeproxy.ru/checker/last_checked_proxies.php
    2. Этот Extension должен внедрять в посещённую страницу мой javascript-код, который, путешествуя по документу с помощью объектной модели, вытащит из страницы все пары ip : port.
    3. Дальше остаётся только передать собранную информацию при помощи опять же внедрённого javascript'а на мой сервер.

    Итак, за работу.

    1. Расширение я решил делать для Google Chrome, т.к это единственный браузер который я почти никогда не закрываю. Поддержка Extensions сейчас есть только в Development-версии Chrome. Короче, поставил 4.0.266.00, вроде нормальная, не падает. Чем отличается от стабильной кроме поддержки расширений — сложно сказать. Extension для Chrome создать очень просто — в новой директории размещаем типовой файл manifest.json, туда вбиваем название и другие параметры, и типа готово. Ну это в минимальном варианте. У меня получился такой manifest.json:

    Код:
    {
    "content_scripts": [ {
    "js": [ "js.js" ],
    "matches": [ "http://www.checker.freeproxy.ru/checker/*" ]
    } ],
    "name": "Proxy Grabber",
    "version": "0.1",
    "description": "http://www.checker.freeproxy.ru/checker/last_checked_proxies.php contains javascript encrypted data"
    }
    Вроде всё интиутивно понятно. От параметра matches зависит, будет ли внедрён js.js в тот или иной сайт.

    2. Код, получающий доступ к странице через DOM, я вынес в отдельный файл js.js и разместил его в той же директории, что и manifest.json. Если не заморачиваться, то он выглядит так:

    Код:
    var data = document.body.innerText;
    var re =/([\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}:[\d]{2,5})|HTTP proxies:|HTTPS proxy list:|RUSSIAN proxies:|SOCKS [45] proxy list:/g;
    var result = (data.match(re));
    
    document.getElementsByTagName('p')[0].innerHTML = '<img src="http://pontorez.ru/proxy/bulk.php?'+escape(result)+'" />';
    setTimeout('window.location.reload()', 1000*3600*3); // reload every 3 hours
    3. Передавать полученную информацию я решил по старинке — в QUERY_STRING. Дёшево и сердито, но главное — работает.

    Для активации свеженаписанного плагина достаточно указать путь к нему на странице chrome://extensions/

    Для начала работы я создаю таб с checker.freeproxy.ru/checker/last_checked_proxies.php который без моего участия начинает обновляться каждые 3 часа, пополняя базу новыми проксями. В общем нормальная такая тулза получилась, единственный минус — надо держать лишний таб в браузере, впрочем мне это не мешает.

    • Author: Pontorez
     

Поделиться этой страницей