Забытый протокол от AOL Вольф Данияр Спецвыпуск: Хакер, номер #058, стр. 058-078-7 */ static unsigned char *encode_toc_send_im(char *buf, const char *remscreenname, char *mess) { char *sflap, *message; message=(char )malloc(128* sizeof(char *)); memset(message, 0, 128); buf=sflap=flap_begin(buf, TYPE_DATA); sprintf(message, "toc_send_im %s \"%s\"", remscreenname, mess); buf=writes(buf, message, strlen(message)); buf=writeb(buf, 0x00); flap_end(buf, sflap); free(message); return buf; } //Функция по добавлению разрешенных пользователей static unsigned char *encode_toc_add_permit(char *buf) { char *sflap; buf=sflap=flap_begin(buf, TYPE_DATA); buf=writes(buf, "toc_add_permit ", strlen("toc_add_permit ")); buf=writeb(buf, 0x00); flap_end(buf, sflap); return buf; } //Функция по добавлению пользователя в черный список static unsigned char *encode_toc_add_deny(char *buf) { char *sflap; buf=sflap=flap_begin(buf, TYPE_DATA); buf=writes(buf, "toc_add_deny ", strlen("toc_add_deny ")); buf=writeb(buf, 0x00); flap_end(buf, sflap); return buf; } /* Функция по установке статуса пользователя, обычно она запрашивает contact list: */ static unsigned char *encode_toc_set_config(char *buf) { char *sflap, *message; message=(char *)malloc(128*sizeof(char *)); memset(message, 0, 128); buf=sflap=flap_begin(buf, TYPE_DATA); sprintf(message, "toc_set_config {%c %d.%c General.}", 'm', 4, 'g'); buf=writes(buf, message, strlen(message)); buf=writeb(buf, 0x00); flap_end(buf, sflap); free(message); return buf; } /* Добавление пользователя в contact list. Если в виде параметра к команде toc_add_buddy выступает твой UIN или SN, то ты обретаешь статус online */ static unsigned char *encode_toc_add_buddy(char *buf, const char *screenname) { char *sflap, *message; message=(char )malloc(128*sizeof(char)); buf=sflap=flap_begin(buf, TYPE_DATA); sprintf(message, "toc_add_buddy %s", screenname); buf=writes(buf, message, strlen(message)); buf=writeb(buf, 0x00); flap_end(buf, sflap); free(message); return buf; } /* Функция формирует пакет в виде команды готовности к работе приема, передачи сообщений. Обычно посылается после аутентификации на сервисе aimа. */ static unsigned char *encode_toc_init_done(char *buf) { char *sflap; buf=sflap=flap_begin(buf, TYPE_DATA); buf=writes(buf, "toc_init_done", strlen("toc_init_done")); buf=writeb(buf, 0x00); flap_end(buf, sflap); return buf; } А что же дальше? Пожалуй, с протоколом немного разобрались. Необходимая база у нас есть, какую пользу мы можем извлечь из всего этого? Конечно же, я имею в виду написание bruteforce ICQ/AIM UIN'ов или ICQ/AIM flood. Но знание одного протокола не поможет, нужна еще одна важная вещь: если производить прямые активные действия с сервером ICQ/AIM (bruteforce, flood), сервер попросту заблочит номер на некоторое время. Поэтому как в случае с bruteforce, так и в случае с flood нужно использовать косвенное соединение через proxy. Кратко поясню, как происходит работа через proxy-сервер на уровне сетевого протокола. Для работы с сервером через косвенное (proxy) соединение необходимо подключится к proxy-серверу и отослать ему команду (определенного формата) для установки соединения с реальным сервером, используя метод CONNECT (в нашем случае это toc.oscar.aol.com). Так выглядит дамп пакета уровня приложений для работы с proxy-сервером: |