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

революционные шутки aol

WOLF D.A. AKA PAYHASH FROM

Спецвыпуск: Хакер, номер #065, стр. 065-008-3


flap_end(buf, sflap);

free(data);

return buf;

}

Ничего себе! Вот как просто ;). Узнав о том, что AOL сменил версию протокола, мы сразу же ринулись расшифровывать дампы. Думали, в протоколе произошли кардинальные изменения. Однако нам открылась картина, которая почти не отличается от старой, — наше удивление было безмерно :). Изменения были формальны и поверхностны: не так был страшен черт, как его малевали.

Если авторизация в базе AOL-сервера пройдет успешно, к нам прилетит пакет SIGN_ON:TOC2.0 (см. ХС #58). Кстати, ты легко убедишься в этом, если самостоятельно сделаешь дамп этого пакета любимым снифером (под Windows рекомендую Iris).

все ясно?

Итак, по процессу авторизации нарисовалась четкая и понятная картина. Перейдем к следующему этапу — получение и передача текстовых сообщений в протоколе TOC v2.

Начнем с отправки сообщений. В принципе, здесь не изменилось ничего. Остался тот же пакет toc_send_im, и никаких ошибок в отправке сообщений не наблюдалось (имеется в виду протокол TOC). Вместо toc_send_im рекомендуется ставить toc2_send_im — это единственное, что нужно отметить.

Посмотрим дампы отправки сообщений двух протоколов (см. дампы №3, №4 и картинку №2).

Дамп пакета №3 — отправка текстового сообщения (протокол TOC v1)

TOC v.1.0:

2A 02 00 09 00 21 74 6F 63 5F 73 65 6E 64 5F 69 *....!toc_send_i

6D 20 3x 3x 3x 3x 3x 3x 20 22 48 65 6C 6C 6F 20 m xxxxxx "Hello

62 72 6F 21 0A 22 00 bro!.".

Дамп пакета №4 — отправка текстового сообщения (протокол TOC v2)

TOC v.2.0:

2A 02 00 09 00 21 74 6F 63 32 5F 73 65 6E 64 5F *.P..!toc2_send_

69 6D 20 3x 3x 3x 3x 3x 3x 20 22 48 65 6C 6C 6F im xxxxxx "Hello

20 62 72 6F 21 22 00 bro!".

Однако и здесь кардинальных изменений нет, почти все то же самое. Однако, поскольку препарирование протокола вслепую основано на изучении и разборе дампов, разберем поближе дамп исходящего сообщения.

Функция, которая собирала пакет для отправки сообщения, теперь приняла вот такой вид:

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);

//TOC v.1.0

//sprintf(message, "toc_send_im %s \"%s\"", remscreenname, mess);

//TOC v.2.0

sprintf(message, "toc2_send_im %s \"%s\"", remscreenname, mess);

buf=writes(buf, message, strlen(message));

buf=writeb(buf, 0x00);

flap_end(buf, sflap);

free(message);

return buf;

}

Что такое входящее сообщение? Это частный случай исходящего сообщения :), только относительно сервера. Почему именно так? Допустим, мы сформировали пакет toc2_send_im, отправили его с исходящим сообщением на сервер TOC/AIM. Сервер TOC/AIM, получив такое сообщение, конвертирует его в пакет IM_IN_ENC2 — исходящего сообщения для сервера (он же — пакет входящего сообщения для клиента).

Задача нашей AIM/TOC/ICQ-программы должна заключаться в том, чтобы суметь разобрать пакет IM_IN_ENC2. На дампе №5 (см. дамп №5 и картинку №3) пакет IM_IN_ENC2 входящего сообщения выглядит таким образом:

Назад на стр. 065-008-2  Содержание  Вперед на стр. 065-008-4