Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #63, ФЕВРАЛЬ 2006 г.

нагибаем AOL/MSN

ВОЛЬФ ДАНИЯР AKA PAYHASH

Спецвыпуск: Хакер, номер #063, стр. 063-108-2


ну-с, приступим!

Итак, для простоты будем использовать протокол TOC(AIM) от America Online Inc. В 59-м номере Спеца я приводил пример кода для UNIX-систем (BSD, Linux), поэтому сейчас ради разнообразия приведу пример под win32-системы. Конечно, я не могу привести полный пример, поэтому: а) полезем на полку и поищем там замусоленный и запыленный 58-й номер; б) побежим в журнальный ларек и спросим, не завалялся ли там сентябрьский номер Спеца за 2005 год ;).

Открываешь номер и смотришь, что можно заменить или добавить, чтобы этот пример работал в win32-системе.

Можно оперировать с помощью директив включения типа:

#if win32

/* some any defined code */

#endif

В прошлом примере мы включали заголовки типа:

#include<stdio.h>

#include<string.h>

#include<sys/types.h>

#include<signal.h>

#include<netinet/in.h>

#include<sys/socket.h>

#include<netdb.h>

#include<sys/errno.h>

Заменим их на один универсальный заголовок:

#include<winsock2.h>

Для того чтобы типы данных UNIX-подобных систем были совместимы с типами данных win32-систем, осуществим небольшое типовое преобразование просто добавив преобразователь typedef:

typedef BYTE u_int8_t;

typedef WORD u_int16_t;

typedef DWORD u_int32_t;

До функции main() больше ничего не трогаем. Теперь в теле функции main() снова сделаем некоторые добавления и включения для работы с сетевыми вызовами в win32-системе — объявим следующие переменные:

WSADATA WSAData;

BOOL flag;

Далее объявляем аргументы, необходимые для работы нашей программы (буферы, файловые и сетевые дескрипторы, временные переменные).

Для того чтобы вызывать сетевые функции, делаем следующий вызов: WSAStartup — в противном случае не будут работать функции типа gethostbyname, socket, connect, bind, etс. Делаем вот таким образом:

if (WSAStartup(MAKEWORD(2,2), &WSAData)!=0)

{

//Здесь возвращаем ошибку или иное программное событие ;).

}

Сразу замечу, что для nix-систем нет различий между дескриптором сети и дескриптором файла, а для Windows, похоже, есть. Так что вместо close() нужно применять closesocket().

Подключившись к TOC(AIM)-серверу (для этого — пройти несложную авторизацию на сервисе TOC и установить статус online или другие), ты должен быть извещен о том, что система готова принимать входящие команды, — поступим примерно так (сразу вспоминаем 59-й номер):

/*

Из памяти динамически выделяем место для двух переменных, общий буфер и текстовое сообщение с оповещением, к примеру: READY TO EXECUTE COMMAND.

*/

buf=(char *)malloc(256, sizeof(char ));

Назад на стр. 063-108-1  Содержание  Вперед на стр. 063-108-3