[win32] alternative data streams (из серии "Популярно о сложном")

Sep 29, 2006 23:22

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



Итак, если у вас 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).

Previous post Next post
Up