Существует возможность сокрытия данных от программы Проводник (Windows Explorer) и команды dir. Для этого используется специальный файл NTFS, информацию из которого невозможно просмотреть без знания его потокового имени. Файловая система NTFS позволяет применять несколько потоков для одного файла, которые указываются в формате <имя файла>:<имя потока>, для чего необходимо выполнить следующие действия.

  1.  Откройте интерпретатор командной строки (CMD.EXE).

  2.  Откройте редактор Блокнот (Notepad) и введите в файл NORMAL.TXT какой-нибудь текст. Сохраните файл в разделе только с файловой системой NTFS.

  3.  Затем повторно отредактируйте файл, указав другой поток с помощью команды notepad NORMAL.TXT:HIDDEN. Будет выдан запрос на создание нового файла. Введите необходимый текст и сохраните файл.

  4.  Введите команду dir, которая покажет первоначальный файл NORMAL.TXT с таким же, как и ранее, размером.

Допускается создание любого количества потоков данных. Скопированный файл сохраняет все настроенные потоки, поэтому копирование содержимого файла NORMAL.TXT в файл ALEX.TXT оставит неизменным поток ALEX.TXT:HIDDEN. Реализация потоков посредством командной строки невозможна, так как командный интерпретатор разрешает использование символа “:” лишь для букв дисков.

Компания Microsoft не предоставила удобного метода обнаружения или удаления таких потоков. Тем не менее, для их удаления существует два способа:

· скопируйте файл в раздел с файловой системой FAT и затем обратно в NTFS;

· воспользуйтесь следующей последовательностью команд:

ren <файл> temp.exe
cat temp.exe > <файл>
del temp.exe

Кроме того, существует возможность создания функции, которая будет перечислять все альтернативные потоки каждого файла в соответствии с шаблоном c:\windows\*. Определим новую функцию и назовем ее las. Функция будет принимать только один аргумент: шаблон пути. Затем для получения необходимой информации следует ввести такую команду:

(las ‘c:\windows\*)

Определение функции las представлено далее.

Определение функции las

(sequence
(define
(las Dir)
(filter
‘(lambda
(o)
(cdr o) )
(mapcar
‘(lambda
(FileInfo)
(if
(getfilesize
(car FileInfo) )
(cons
(car FileInfo)
(getaltstreams
(car FileInfo) ) )
(cons nil nil) ) )
(dirlist Dir) ) ) )
‘(Enhanced with las) )

Несмотря на то, что текст функции можно ввести в командной строке, проще сохранить его в файле. Назовем файл LAS.LZP. Теперь в приглашении командной строки программы Lizp можно ввести такую команду:

(eval (load ‘las.lzp))

В результате будет получена новая функция las. Затем можно ввести команду, которая уже рассматривалась ранее:

(las ‘c:\windows\*)

Для того, чтобы программа Lizp всегда использовала эту функцию, введите следующую команду:

(Compile (load ‘las.lzp) ‘Lizp_with_las.exe true)

Это приведет к созданию новой версии программы Lizp, которая называется Lizp_with_las.exe.

Наконец, предположим, что необходимо создать программа с графическим интерфейсом, которое будет запрашивать у пользователя шаблон пути и отображать альтернативные потоки в диалоговом окне. Сохраните приведенные далее строки в файле LAS_GUI.LZP.

Код файла LAS_GUI.LZP

(local
(Result)
(setq Result
(las
(inputbox
‘((Wild path to check for Alt Streams)) ) ) )
(messagebox
(if Result Result
‘((No Alt Streams found in path.)) ) )
(exit) )

Теперь в приглашении командной строки программы Lizp введите следующую команду:

(Compile (load ‘las_gui.lzp) ‘Las.exe nil

Будет создано новое программа, называемое LAS.EXE, которое будет выполняет необходимую функцию. Обратите внимание на последний аргумент функции Compile: при первой компиляции использовалось значение true, а при второй — значение nil. Причина заключается в том, что при первом запуске программы требовалось создание консоли (поскольку применялся собственный командный интерпретатор Lizp). Во второй раз использование консоли не требуется.

Еще один метод удаления альтернативных потоков заключается в редактировании потоков с помощью редактора Блокнот (Notepad) и удалении всего кода в файле. По завершению работы с редактором Блокнот (Notepad) Windows сообщит о том, что файл не заполнен и будет удален. Затем достаточно лишь подтвердить его удаление.

Единственным надежным способом обработки альтернативных потоков является использование функции BackupRead(). С этой функцией связана только одна проблема — необходимость в наличии разрешений SeResotorePriviledge/SeBackupPriviledge, которые не предоставляются большинству пользователей.

Функция BackupRead() “превращает” файл и все связанные с ним метаданные (расширенные атрибуты, данные безопасности, альтернативные потоки и связи) в поток байтов. Для обратного преобразования можно воспользоваться функцией BackupWrite().