Разводим червей Ms-Rem (Ms-Rem@yandex.ru) Хакер, номер #084, стр. 084-118-6 [cоздание аттачей в письме] В статье про управление трояном я рассматривал простейшую отправку письма и процесс SMTP-чата, но не рассматривал процесс отправки аттачей в тексте письма. Начнем с того, что аттачи передаются не в бинарном виде, а в текстовом. Связано это с тем, что изначально SMTP/POP3 протоколы предназначались исключительно для передачи текста и работали не с байтами, а с 7-битными символами, что позволяло передавать только знаки латинского алфавита. Все символы, не попадающие в этот диапазон, обрезаются почтовым сервером до 7 бит, что вынуждает нас перед передачей кодировать бинарные данные в специальный формат. В свое время было придумано множество вариантов кодирования (UUE, XXE, Base64), но прижился и с успехом используется сейчас только формат Base64. Давай кратко рассмотрим принципы кодирования Base64. Как известно, байт состоит из восьми битов. Один байт может принимать 256 значений: от 0 до 255. Однако если вместо восьми байт использовать только шесть, то объем вложенной информации уменьшается до 64 значений: от 0 до 63. Теперь главное: любую цифру 6-ти битового байта можно представить в виде печатного символа. 64 символа это не так много, ASCII-символов вполне хватит, что позволяет закодировать все данные в следующий набор: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/ А далее берутся три последовательных байта по восемь бит (всего 24 бита) и побитно делятся на четыре 6-ти битных байта (всего 24 бита). Немного странно звучит, «шестибитный байт». На самом деле бит восемь, однако используются только 6 младших бит, два старших бита игнорируются. Основываясь на этом принципе, мы можем закодировать любую двоичную информацию в текст, не очень сильно увеличивая ее объем (на 30%). Затем наша информация через почтовый сервер попадет к нужному адресату, почтовик которого декодирует текст в двоичный файл. Готовый пример Base64-кодирования ты найдешь на диске с журналом. Но просто вставить Base64-код в текст письма недостаточно. Для того чтобы почтовая программа распознала этот текст как аттач, нужно сформировать соответствующие заголовки. В начало письма обязательно нужно вставить заголовки MIME-Version и Content-Type, первый определяет версию MIME (мы будем использовать 1.0), а второй - тип содержимого письма и разделители между MIME-элементами. Перед самими Base64-данными должен быть вставлен блок, описывающий тип этих данных, имя файла в аттаче и тип его кодирования. Выглядеть это будет примерно так: |