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

Забытый протокол от AOL

Вольф Данияр

Спецвыпуск: Хакер, номер #058, стр. 058-078-1


aka payhash [AcidOptic]

Instant messenger, flooder, bruteforcer? Легко!

В 1998-1999 году программисты израильской фирмы Mirabilis написали первую версию протокола ICQ. В то же время компания America Online, Inc. (AOL) разработала свою версию протокола мгновенного обмена сообщениями под кодовым названием TOC v0.1. Об этом будет наш разговор.

TOC разрабатывался как протокол передачи простых текстовых сообщений в сети интернет, и старые версии AIM работали как раз по этому протоколу. В наше время AIM Client (как и ICQ, которая теперь тоже принадлежит AOL) работает с новым протоколом под кодовым названием OSCAR. Зачем нам нужно разбирать старые протоколы? Поясняю: серверы AOL и по сей день понимают протокол TOC. С какой целью – об этом знают, наверное, только сами работники AOL.

Все нам известен замечательный клиент Miranda IM. Если повнимательнее рассмотреть исходный код плагина aim.dll, то мы увидим, что этот плагин использует как раз протокол TOC ;), а не новомодный и навороченный OSCAR.

Ставлю перед собой задачу разобраться в протоколе ТОС на практике. Для того чтобы хоть немного преуспеть в обещанном, напишем свой простенький ICQ/AIM-клиент, который будет подключаться к серверу, аутентифицироваться, обрабатывать текстовые сообщения как на прием, так и на передачу.

Какова структура пакета? Пакет состоит из заголовка FLAP и остальных данных.

Длина флэп равна шести байтам, нулевой байт - это просто звездочка, которая соответствует одному байту. Следующим идет Frame Type (тип пакета) - это поле нужно для того, чтобы сервис ТОС определил, какой тип пакета к нему пришел и что сделать с ним; поле занимает ровно один байт. Поле Sequence Number занимает два байта и равно номеру отправляемого FLAP-пакета. Каждый раз, когда отправляется флэп, значение этого поля увеличивается на единицу. Последний параметр флэп-пакета Data Length означает длину полезного груза; размер поля равен двум байтам.

Какие типы ТОС-пакетов существуют? (Во FLAP это поле первого байта Frame Type.)

Наиболее распространены три типа пакетов:

1. SIGNON нужен в процессе авторизации.

2. DATA используется в процессе основной передачи данных (текст, файлы и т.д.).

5. KEEP_ALIVE приходит с сервера, чтобы проверить, подключен ли клиент к серверу (см. "Фрагмент 1").

Подключайся!

Что же нужно сделать, чтобы подключиться к ТОС(AIM)-сервису и повисеть на нем? Конечно же, не обойтись без приложения, которое сначала подключит нас на сервер AIM через интернет-сокет (см. "Фрагмент 2"). Это легко реализуется через winsock.dll/winsock2.dll или через хедеры Berkeley (socket.h и т.д.) вызовами socket и connect.

Произошло подключение к серверу toc.oscar.aol.com порт 9898, теперь нужно послать первое приглашение сервису AIM в знак того, что некто (мы) изъявляет желание немного пообщаться. Для этого в сокет просто отсылается команда вида "FLAPON\r\n\r\n": "Земля-Земля. Я Марс. Вызываю вас на чат =)". На этот широкий жест сервис AIM должен ответить пакетом FLAP SIGNON: "Марс, это Земля. Аутентифицируйтесь, пожалуйста" (посмотрим на врезку "Фрагмент 3").

Содержание  Вперед на стр. 058-078-2