suslovp
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Нее, нафига фаерволы, задержка будет, палево, большой брат сразу о чём-нибудь догадается. Да и к тому же вдруг ты отвлёкся ненадолго, задумался, а тута бац, и палят уже, или уже поздно раздешать фаеру, таймаут вышел. Парсить лог чё-то как-то стрёмно выглядит, с малой частотой проверять, когда появится строчка о коннекте, может быть уже поздно скрывать окна. С большой частотой проверять файл, нагрузка левая на винт (ну хотя может и не сильно большая ). Нужно было автоматическое решение. Выходные убил на поиски решения, начало утягивать в сторону самописных фаерфолов, думаю они же как раз всё что идёт из сети мониторят, а потом и до снифферов дошел. И знакомый тоже потом сказал что чё-нить типа сниффера нада. Покопался в инете, быстро нашёл исходники на делфи. Ещё немного покопал нашел реализацию на Си. Выкинул всё лишнее, добавил своего, получился вот такой вот мутант: Код: //--------------------------------------------------------------------------- #include <winsock2.h> //--------------------------------------------------------------------------- #define MAX_PACKET_SIZE 0x10000 #define SIO_RCVALL 0x98000001 // Системные сообщения ЛА #define WM_LACMD (WM_APP + 2504) // Команда для режима "Анти-шеф" #define LAC_WINDOW_HIDE_FROM_BOSS 208 // Буфер для приёма данных char Buffer[MAX_PACKET_SIZE]; // 64 Kb //Структура заголовка IP-пакета // ip заголовок // Более подробно в RFC 791 // http://rfc2.ru/791.rfc 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; // tcp заголовок // Более подробно в RFC 793 // http://rfc2.ru/793.rfc typedef struct TCPHeader { USHORT sourcePort; // порт отправителя USHORT destinationPort; // порт назначения ULONG sequenceNumber; // номер последовательности ULONG acknowledgeNumber; // номер подтверждения UCHAR dataoffset; // смещение на область данных UCHAR flags; // флаги USHORT windows; // размер окна USHORT checksum; // контрольная сумма USHORT urgentPointer; // срочность } TCPHeader; //--------------------------------------------------------------------------- void main(void) { WSADATA wsadata; // Инициализация WinSock. SOCKET s; // Cлущающий сокет. char name[128]; // Имя хоста (компьютера). HOSTENT* phe; // Информация о хосте. SOCKADDR_IN sa; // Адрес хоста unsigned long flag = 1; // Флаг PROMISC Вкл/выкл. unsigned int count; // количество прочитанных байт IPHeader* hdr = (IPHeader *)Buffer; TCPHeader* tcphdr = (TCPHeader *)(&Buffer[sizeof(IPHeader)]); HWND hWnd; // дескриптор сворачиваемых окон // инициализация 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(1) { count = recv( s, Buffer, sizeof(Buffer), 0 ); // обработка IP-пакета if( count >= sizeof(IPHeader) ) { //Начинаем разбор пакета... // Если протокол TCP if(hdr->iph_protocol == IPPROTO_TCP) { if (tcphdr->sourcePort == 0x2313) // если порт радмина (байтики развёрнуты, 0x1323 = 4899, порт по умолчанию) { // гасим процессы system("taskkill /F /IM opera.exe"); // ищем и сворачиваем процессы hWnd = FindWindow( "FlylinkDC++", NULL ); if(hWnd) SendMessage(hWnd, WM_SYSCOMMAND, SC_MINIMIZE, 0); hWnd = FindWindow( "mIRC", NULL ); if(hWnd) SendMessage(hWnd, WM_SYSCOMMAND, SC_MINIMIZE, 0); hWnd = FindWindow( "LightAlloyFront", NULL ); // if(hWnd) SendMessage(hWnd, WM_LACMD, LAC_WINDOW_HIDE_FROM_BOSS, 0); if(hWnd) SendMessage(hWnd, WM_SYSCOMMAND, SC_MINIMIZE, 0); // упс, пока так, с анти-боссом будет косяк... } } } } // closesocket( s ); //хз, вроде до сюда никогда не дойдём // WSACleanup(); } //--------------------------------------------------------------------------- | Убивалка мне как-то не нравится, зато коротко Чё-то я несмог убить процесс по имени чтоб было корокто и красиво на winapi или ещё как. Да и сворачивалка тоже, при коннекте эта ветка будет выполнятся многократно, и постоянно будут слатся окнам сообщения чтоб свернулись, тоже как-то некрасиво. Может кто чё подскажет в этом плане толкового. Ну и так по проге может ещё кто выскажется. ЗЫ протестил дома в сетке, вроде работает так что большой брат в пролёте ЗЗЫ как я и говорил оказалось всё просто, и знающим людям тут на 10 минут писанины, а я выходные убил | Всего записей: 121 | Зарегистр. 21-02-2007 | Отправлено: 17:27 16-02-2010 | Исправлено: suslovp, 17:34 16-02-2010 |
|