Деструктивные потоки A.M.D.F. (amdf@mera.net.ru) Xakep, номер #069, стр. 069-076-2 В Windows потоки обычно используются для хранения какой-то дополнительной информации о файле. Например, в потоке может содержаться сводка документа – совокупность некоторых свойств, присущих данному типу файлов. Ну например, сводка видеороликов может содержать информацию о разрешении мувика, используемом кодеке и т.д. Если система стоит на диске с NTFS, то файл explorer.exe наверняка содержит сводку. В зависимости от содержимого сводки к файлу могут прикрепляться потоки с именами SummaryInformation, DocumentSummaryInformation и некоторые другие. Исследуя собственную файловую систему, я обнаружил у себя на компьютере поток с именем $MountMgrRemoteDatabase, прикрепленный к диску C. О прикрепленных к файлу потоках пользователь может узнать лишь в некоторых случаях. Например, при перемещении файла с прикрепленным потоком на диск с FAT/FAT32. Эти файловые системы, как и следовало ожидать, не поддерживают потоки, поэтому система выдаст запрос на подтверждение потери информации в stream’ах, указав их названия. Разумеется, такая ситуация никогда не возникнет, если поток прикреплен к диску или к системной папке. Как ты уже, наверное, понял, потоки в современных файловых системах используются очень часто. Я бы также предостерег тебя от мысли, что основное применение им –прятать в файловой системе поломанного сервера своих троянов, кейлогеров и прочих паразитов :). Например, если ты разработчик shareware-программ, то вполне можешь использовать файловые потоки для хранения информации о дате регистрации и количестве дней до истечения срока использования. Словом, в потоках можно размещать все то, что должно быть скрыто от пользователя твоей программы. Впрочем, следует отчетливо понимать, что у толкового крякера такой метод защиты шаровары может вызвать только громкий смех ;). Работа с потоками В работе с файлами и потоками есть и сходства, и различия. Хотя, конечно, различий куда больше :). И файлы, и их потоки создаются и удаляются одними и теми же WinAPI функциями: CreateFile и DeleteFile. Чтение и запись реализуются, соответственно, функциями ReadFile и WriteFile. На этом, собственно, сходства заканчиваются и начинаются различия. В именах потоков могут содержаться спецсимволы, которые не могут быть частью имени нормального файла. Например, «*», «?», «<», «> », «|» и кавычки. Вообще, любое имя потока сохраняется в формате Unicode. Стало быть, в названиях могут использоваться и служебные символы из диапазона 0x01 – 0x20. Нет стандартной функции копирования и переноса потока: MoveFile и CopyFile с потоками не работают. Впрочем, никто не мешает написать свои собственные функции. У потоков отсутствуют собственные атрибуты, такие, как дата создания и модификации: эти признаки наследуются от файла, к которому прикреплены потоки. |