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

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

Вольф Данияр

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


Если взять в руки сетевой снифер и поснифить тот же плагин для Miranda (aim.dll), мы увидим содержимое рис. 1.

Здесь FLAP SIGNON – пакет, который состоит из флэп-заголовка и груза в четыре байта со значением 00 00 00 01 (сделано именно так, чтобы клиент начал проходить авторизацию на сервисе AIM).

Теперь нужно понять, как мы сформируем пакет TOC(AIM) и как передадим его на сервер. Для этого выделяют необходимое количество байт в памяти, указывают на него указатель, buf, и начинают заталкивать в него данные, которые отсылаются на сервер AIM. В основном это FLAP-заголовок и полезный груз.

Затем мы выделим место в памяти для данных buffer, которые будут приходить с сервера. Туда уже поместили, и в зависимости от типа FLAP-заголовка код должен производить те или иные манипуляции.

Объявим несколько несложных функций, которые сформируют ТОС(AIM)-пакет.

С сервера пришел пакет FLAP SIGNON, теперь серверу нужно ответить тем же FLAP SIGNON, но наш FLAP SIGNON содержит значение AIM Screenname или ICQ uin (врезка "Фрагмент 4").

Пакет формируется с помощью функции encode_flapsigon, следом посылается пакет toc_signon, сформированный с помощью функции encode_toc_signon, в которую передаются указатель на буфер buf, AIM Screenname или ICQ uin и пароль.

Если поснифить пакеты, получится нечто похожее на рис. 2.

Пароль в функции encode_toc_signon криптуется с помощью функции roast_password методом XOR'рирования пароля и строки "Tic/Toc". В буфер buf записывают команду toc_signon; адрес и порт сервера, на котором TOC-сервис должен авторизовать нас; локал-клиента english; название клиента. Замаскируем его под Miranda, не забывая записывать в конец пакета нулевой символ.

Если авторизация прошла гладко, то сервер ответит пакетом SIGN_ON:TOC1.0 (версия протокола).

После этого в течение 30-ти секунд на сервер нужно послать команду toc_init_done (см. функцию encode_toc_init_done). Но мы пойдем другим путем :). Если просто отправить команду toc_init_done, произойдет обычное подключение к серверу и установится статус ivisible: отправлять и получать сообщения получится, но статус будет не online.

Напишем четыре функции encode_toc_add_permit, encode_toc_add_deny, encode_toc_set_config, encode_toc_add_buddy. С помощью этих функций в буфере buf соберем пакет aimма, который запросит для нас contact list и добавит нас в свой же контакт, тем самым переведя в режим online. Функция encode_toc_add_permit создаст запрос на сервер пользователей, которые разрешены в нашем contact list. Функция encode_toc_add_deny делает все наоборот (ban).

Функция encode_toc_set_config с помощью запроса toc_set_config вызовет с сервера AIM наш contact list, encode_toc_add_buddy добавляет себя в свой же contact list, чтобы попасть в статус online. И, как я уже писал, мы обязаны отправить пакет, сформированный функцией toc_init_done ("Фрагмент 5"). Поснифим, чтобы увидеть полную картину происходящего, как на рис. 3.

Функциями encode_toc_add_permit и encode_toc_add_deny запрашиваются пустые access-листы, функцией toc_set_config - contact list. Чтобы получить статус online, вызываем функцию encode_toc_add_buddy.

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