Я тут решил, что в общеобразовательных целях могу тиснуть небольшую информацию из своей прошлой жизни.
Как обычно в популярном виде!
Итак, если у вас w2k/XP и файловая система - NTFS, то для ознакомления с alternative data streams (ADS) выполните несложное упражнение.
Например, перейдите в папку %SystemRoot%
cd %SystemRoot%
, сделайте резервную копию файла notepad.exe и исследуйте следующие команды.
echo dir > notepad.exe:hidden_stream
more < notepad.exe:hidden_stream | cmd
Т.е. мы "спрятали" команду dir в файл notepad.exe в поток с именем hidden_stream. Обратите внимание, что размер и данные файла notepad.exe при этом не изменились!
Можно спрятать еще кое-что:
type eicar.com > test.txt:hidden_test_virus
и затем выполнить:
more < test.txt:hidden_test_virus | cmd
(Естественно, что современные антивирусы прекрасно осведомлены об ADS)
Для понимания сути происходящего необходимо вспомнить, что с точки зрения NTFS файл - это совокупность пар атрибут-значение. Один из атрибутов содержит собственно сами данные, т.н. основной неименованный поток, другие атрибуты включают имя файла, временные метки и т.п. Каждый атрибут хранится как отдельный поток байтов. Поэтому NTFS читает/пишет не файлы, а потоки атрибутов. И делает это через стандартные функции Win32 API: CreateFile(), ReadFile(), WriteFile().
Дополнительная информация находится в MSDN "A Programmer's Perspective on NTFS 2000 Part 1: Stream and Hard Link" (
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnfiles/html/ntfs5.asp).