Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #79, ИЮЛЬ 2005 г.

Управление RAT

Ms-Rem

Хакер, номер #079, стр. 079-108-6


DwFlags – задает параметры, влияющие на поведение Internet-функций. Возможно применение комбинации из следующих значений: INTERNET_FLAG_ASYNC, INTERNET_FLAG_FROM_CACHE, INTERNET_FLAG_OFFLINE.

InternetOpen вернет значение типа HINTERNET, которое впоследствии будет использоваться во всех функциях этого интерфейса. В принципе, можно неоднократно вызывать эту функцию, например для доступа к различным сервисам (FTP, HTTP, etc), но обычно бывает достаточно сделать это всего один раз. В случае неудачи она вернет nil. Кстати, непосредственно с этой функцией связана и еще одна, не менее важная - InternetCloseHandle. После завершения работы с Internet API нужно закрыть с ее помощью все указатели HINTERNET.

Итак, после инициализации Internet API нам нужно открыть скачиваемый файл. Это делается функцией InternetOpenUrl:

function InternetOpenUrl(hInet: HINTERNET; lpszUrl: PChar; lpszHeaders: PChar; dwHeadersLength: DWORD; dwFlags: DWORD; dwContext: DWORD): HINTERNET; stdcall;

Параметры:

hInet - указатель, полученный после вызова InternetOpen.

LpszUrl – целевой URL. Обязательно должен начинаться с указания протокола, по которому будет происходить соединение. Поддерживаются следующие - ftp, gopher, http и https.

LpszHeaders - содержит заголовок http-запроса. Если установлен в nil, то вычисляется автоматически.

DwHeadersLength - длина заголовка. Можно установить в 0 для автоматического вычисления.

dwFlags - флаг, задающий дополнительные параметры перед выполнением функции. У нас он тоже будет иметь значение 0.

Функция вернет указатель на файл или nil в случае ошибки. После открытия файла его можно прочитать в память с помощью InternetReadFile, а узнать его размер можно функцией InternetQueryDataAvailable. Вот простой пример скачивания файла по http-протоколу с использованием Internet API:

begin

hInternet := InternetOpen(nil, INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);

hFile := InternetOpenUrl(hInternet, 'http://www.xcontrol.com.ua/img/xclogo.jpg', nil, 0, INTERNET_FLAG_EXISTING_CONNECT, 0);

if hFile <> nil then

begin

InternetQueryDataAvailable(hFile, Size, 0, 0);

GetMem(DataBuff, Size);

InternetReadFile(hFile, DataBuff, Size, Bytes);

hOut := CreateFile('c:\image.jpg', GENERIC_WRITE, 0, nil, CREATE_NEW, 0, 0);

if hOut <> INVALID_HANDLE_VALUE then

begin

WriteFile(hOut, DataBuff^, Size, Bytes, nil);

CloseHandle(hOut);

end;

FreeMem(DataBuff);

InternetCloseHandle(hFile);

end;

InternetCloseHandle(hInternet);

end.

Этот метод обычно используется для получения команд управления трояном. Однако также может понадобиться и закачка файла на FTP. Это требуется, скажем, для того, чтобы закинуть лог-файлы или какую-нибудь полезную информацию на хостинг. Все это дело реализуется очень просто посредством Internet API. После вызова InternetOpen нам нужно подключиться к FTP-серверу и авторизоваться на нем, что можно сделать с помощью функции InternetConnect:

Назад на стр. 079-108-5  Содержание  Вперед на стр. 079-108-7