Blog. Just Blog

Как Windows определяет, что файл был загружен из Интернета

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Software | Автор: ManHunter
Часто при попытке запустить файлы, скачанные из интернета, появляется примерно такое окно:

Как Windows определяет, что файл был загружен из Интернета
Как Windows определяет, что файл был загружен из Интернета

Такую "черную метку" файлу обычно ставит браузер Internet Explorer. При этом файл можно переименовать, скопировать или даже переместить на другой диск, предупреждение все равно будет оставаться. Снять блокировку с файла можно примерно так. Но каким образом система определяет, что файл скачан из интернета? Эта информация записывается в так называемые альтернативные потоки NTFS. Суть технологии альтернативных потоков заключается в том, что у файла на дисковой системе NTFS одновременно может быть несколько потоков, содержащих данные. Проводник Windows и большинство файловых менеджеров могут работать только с главным потоком, который представляет собой основное содержимое файла.

Зато альтернативные потоки NTFS можно легко посмотреть в консоли обычной командой DIR с ключом /R

Просмотр альтернативных потоков NTFS при помощи команды DIR
Просмотр альтернативных потоков NTFS при помощи команды DIR

Можно воспользоваться консольной утилитой Streams от Mark Russinovich.

Просмотр альтернативных потоков NTFS при помощи программы Streams
Просмотр альтернативных потоков NTFS при помощи программы Streams

Для любителей оконных интерфейсов есть замечательная программа NTFS Stream Explorer, которая тоже позволяет обнаружить и посмотреть альтернативные потоки NTFS.

Просмотр альтернативных потоков NTFS при помощи NTFS Stream Explorer
Просмотр альтернативных потоков NTFS при помощи NTFS Stream Explorer

Или бесплатная утилита AlternateStreamView от NirSoft.

Просмотр альтернативных потоков NTFS при помощи программы AlternateStreamView
Просмотр альтернативных потоков NTFS при помощи программы AlternateStreamView

Что же интересного записано в этом файле, а главное, как его открыть? Проще всего это делается при помощи обычного Блокнота, который входит в состав каждой Windows. Набираем в командной строке следующее:

notepad C:\setup.exe:Zone.Identifier
В Блокноте открывается содержимое альтернативного потока Zone.Identifier. Да, это самый обычный текстовый (а точнее ini) файл:

Содержимое альтернативного потока NTFS
Содержимое альтернативного потока NTFS

Параметр ZoneId=3 отвечает именно за то, чтобы файл считался небезопасным, и на основании именно этого значения система принимает решение о показе предупреждения.

Свойства файла
Свойства файла

Хорошо, наличие спрятанного альтернативного потока мы определили, его содержимое посмотрели. А дальше-то что? А дальше можно разблокировать основной файл путем удаления альтернативного потока.

Удаление альтернативного потока через программу Streams
Удаление альтернативного потока через программу Streams

Удаление альтернативного потока программой NTFS Stream Explorer
Удаление альтернативного потока программой NTFS Stream Explorer

Удаление альтернативного потока программой AlternateStreamView
Удаление альтернативного потока программой AlternateStreamView

Альтернативный поток NTFS также удаляется при разблокировке файла через меню Проводника Windows. После удаления потока файл запускается без каких-либо предупреждений.

Можно ли заблокировать файл обратно? Да, можно. Для этого, как несложно догадаться, надо создать альтернативный поток Zone.Identifier с нужным содержимым. Делается это при помощи все того же Блокнота уже знакомой нам командой:

notepad C:\setup.exe:Zone.Identifier
На запрос о создании нового файла надо ответить подтверждением.

Создание альтернативного потока NTFS вручную
Создание альтернативного потока NTFS вручную

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

[ZoneTransfer]
ZoneId=3

После этого файл снова становится небезопасным со всеми вытекающими последствиями. Путем несложных экспериментов я также выяснил, что значение ZoneId=4 при попытке запустить файл приводит вот к такому интересному эффекту:

Файл полностью заблокирован
Файл полностью заблокирован

То есть файл становится полностью блокированным для запуска. Пусть ваша фантазия подскажет вам, где это можно использовать.

Если вам интересно, как устроен механизм работы с Zone.Identifier изнутри, то для вас я выложил статью "Работа с Zone.Identifier на Ассемблере".

Напоследок хочу предупредить вас, что неразумное создание или удаление альтернативных потоков может привести к непредсказуемым последствиям, вплоть до сбоев в работе системы. Как и при работе с любыми другими внутренностями Windows, надо быть очень осторожным.

Поделиться ссылкой ВКонтакте
Просмотров: 24868 | Комментариев: 16

Внимание! Статья опубликована больше года назад, информация могла устареть!

Комментарии

Отзывы посетителей сайта о статье
Petya (11.10.2020 в 13:53):
А кнопку "Разблокировать" в окне свойств увидеть и нажать тяжело?
нэлли (07.05.2018 в 20:10):
Спасибо за хорошие советы
ManHunter (10.02.2017 в 22:27):
Архивируешь в какой-нибудь zip, распаковываешь и все потоки пропадают.
wetal (26.02.2016 в 19:14):
NTFS поток он ведь работает только на NTFS!
Самый тупой способ: переместить файл с потоками  на флешку или SD карту, которая отформатированиа в FAT32, а потом обратно. Все потоки пропадают.
Другой) Александр (20.12.2015 в 21:13):
А не, достаточно просто использовать %~1 иначе выводит тело файла или ошибку
Другой) Александр (20.12.2015 в 20:54):
Вы тут хороший способ привели:
Цитатаnotepad C:\setup.exe:Zone.Identifier

но его не просто получается автоматизировать=( пытался ярлыком на блокнот с параметром %1:Zone.Identifier и 99 ударов головой об батник, но как видно из cmd консоли между именем файла и потока вставляется "(кавычка) или вообще блым и всё( несмотря на pause в конце… в лучшем случае открывается блокнот с инфокном "Абсольтно_правильное_имя.gif:Zone.Identifier не существует создать…?"
Но всётаки ПОЛУЧИЛОСЬ у кого тожэ с первого раза глюки (хотя казалось бы…) вот рабочий bat'ник для SendTo


set aaa=%~1
notepad %aaa%:Zone.Identifier
Александр (04.08.2015 в 20:56):
Ребят подскажите что можно сделать с "клиентом" "css" чтоб при распаковки "инсталлятора" файл не блокировал фильтр "Windows 8"                             ПРИМЕР:                                                             "Неизвестный издатель" и оно предупреждает что файл может быть небезопасным ???
ZX (17.09.2014 в 14:21):
AlternateStreamView класная штука, с помощью неё я сразу удалил потоки со всех установочных файлов которые я скачал с интернетов!! ахахахх))
еремушка-дурачок (27.04.2014 в 02:35):
Ух ты, так же можно инфу прятать от кого-нибудь! Атрибут "super hidden" :))
Григорий (14.04.2014 в 23:36):
Вот описание значений ZoneId, вдруг кому-то понадобится:
0 — локальный компьютер
1 — интранет
2 — доверенный источник
3 — интернет
4 — не доверенный источник
ufo (14.04.2014 в 08:40):
Познавательно. Пригодится обязательно. Попробовал убить поток в нескольких часто используемых файлах. Стало приятней работать.
Voffka (12.04.2014 в 21:35):
Спасибо! А и вправду как-то никогда не задавался этим вопросом, отключил. Отвратительно бесполезная функция винды. Если нужно, само запустится, а так защита от дурака...
ManHunter (11.04.2014 в 12:52):
> Через cmd /c setup.exe запускается без алярма.
Уточню: при запуске из консоли с правами от Админа алярма не появляется.

Добавил AlternateStreamView.
X-Wing Top Ace (11.04.2014 в 12:18):
>>Удаление альтернативного потока
>>программой NTFS Stream Explorer
Есть еще такой рулез, как Nirsoft'овский AlternateStreamView. Маааленькая такая утила, зазипованный вес 47 килобайт.
scorpanton (11.04.2014 в 10:12):
Чтобы этот поток (:Zone.Identifier) вообще не дописывался к файлам при скачивании с интернета нужно:
- запустить gpedit.msc
- User Configuration (Конфигурация пользователя)
- Administratives Templates (Административные шаблоны)
- Windows Components (Компоненты Windows)
- Attachement Manager (Диспетчер вложений)
- утановить параметр "Do not preserve zone information in file attachement" ("Не сохранять сведения о зоне во вложенных файлах" для WinXP или "Удаление сведений о зоне происхождения вложений" для Win7) в значение "Включить"
- Перезагрузить компьютер
Андрей (11.04.2014 в 09:38):
Порадовал пример notepad file:stream . Легко воспроизводим любым юзером на коленке штатными средствами.

Насколько понимаю механизм реакции частично заложен в urlmon.dll . И немного описано тут: http://msdn.microsoft.com/en-u...n392609.aspx . Порыскав по диагонали по urlmon.dll ничего внятного найти не удалось.

PS.Через cmd /c setup.exe запускается без алярма.

PPS. На практике с потоками (в маковской терминологии "ресурсы") впервые столкнулся под macos 7 (перетащить что-то с одного компа на другой оказалось неоднокнопочной задачей). На NT использование потоков так в глаза не бросалось.

Добавить комментарий

Заполните форму для добавления комментария
Имя*:
Текст комментария (не более 2000 символов)*:

*Все поля обязательны для заполнения.
Комментарии, содержащие рекламу, ненормативную лексику, оскорбления и т.п., а также флуд и сообщения не по теме, будут удаляться. Нарушителям может быть заблокирован доступ к сайту.
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2024
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.2 сек. / MySQL: 3 (0.0046 сек.) / Память: 4.5 Mb
Наверх