Почему Windows «ругается» на файлы, скачанные из интернета, или кое-что интересное про ntfs

Наверняка почти каждый из вас сталкивался с ситуацией, когда исполняемый файл установщика какой-либо программы, скачанный из интернета, отказывался запускаться просто так. Вместо этого Windows выкидывала предупреждение о безопасности, мол, вы действительно хотите запустить файл krutayaproga.exe от неизвестного издателя, или всё-таки подумаете. Разумеется, можно нажать «Да», да ещё и поставить флаг, мол, больше не спрашивать, но проблему это не решит и, когда вы скачаете программу с другого сайта, вы снова увидите этот запрос. Знаю многих людей, которые пытались отключить это дело через реестр, отключение SmartScreen и защитника Windows, однако, не знаю, помогло ли им это. Точно знаю, что в таких случаях помогает копирование такого файла на флешку, отформатированную в fat32 и обратно. Однако, во-первых, бывают установщики и размером более 4 гб, так что на fat32 они просто не влезут, а во-вторых это навело меня на кое-какие размышления, о которых я напишу ниже.

И так, раз при копировании на флешку и обратно это гадливое предупреждение исчезает, значит дело тут в файловой системе ntfs, вернее в том, что в ней есть что-то такое, чего нет в fat32 и что безвозвратно теряется при копировании с тома ntfs на том fat32. Имена в юникоде? Да, их нет в fat32, но англоязычные имена файлов всё равно порождают это гадливое предупреждение. Иной способ организации хранения файлов? Журналирование? Индексирование? Двоичные деревья? Всё оно не подходит к нашему случаю. Так что же подходит? А вот что. в ntfs появилось новое понятие — файловые потоки (file streams). Любой файл на томе ntfs может содержать кроме основного потока сколько угодно иных потоков. Проведите эксперимент. Для этого очень желательно, чтобы у вас был Total Commander.

  • Войдите в любую папку и создайте в ней файл test.txt, например, по комбинации клавиш shift+f4;
  • Откройте его и что-нибудь напишите, например, «это первый тест;
  • Сохранитесь;
  • Теперь нажмите shift+f4, сотрите всё, что там написано, и напишите вот так: test.txt:test2, после чего нажмите enter;
  • В открывшемся пустом окне редактора напишите что-нибудь, например, «Это второй тест»;
  • Теперь проделайте то же самое, что и во втором пункте, только после двоеточия напишите test3 вместо test2;
  • Снова откроется пустое окно редактора, в котором вы можете написать, например, «Это третий тест».

Что получилось после наших экспериментов? Получилось то, что наш файл test.txt имеет три файловых потока:

  • Поток по умолчанию, который сформировался при создании файла и в котором мы написали «Это первый тест»;
  • Поток с именем test2, в котором мы написали «Это второй тест»;
  • Поток с именем test3, в котором мы написали «Это третий тест».

После примера с файловыми потоками, думаю, вы уже догадались, что при скачивании файлов из интернета, система добавляет к ним какой-то файловый поток и, если Windows «видит» такой поток у исполняемых файлов, то при запуске на выполнение такого exe-шника она обязательно будет «ругаться.
Что же это за поток? Сведения о том, откуда конкретно был скачан файл, Windows сохраняет в потоке «zone identifier». Для примера перед написанием этого поста я скачал с официального сайта последнюю версию архиватора 7zip. Давайте посмотрим, что содержится в потоке zone.identifier.

[ZoneTransfer]
ZoneId=3
ReferrerUrl=https://www.7-zip.org/download.html
HostUrl=https://www.7-zip.org/a/7z1900.exe

Вот на это всё и «Ругается» Windows. Отсюда вывод: чтобы не заниматься глупостями с копированием на флешку и обратно и при этом сделать так, чтобы Windows не «ругалась на скачанные файлы, поток zone.identifier надо удалить. Как это сделать? Есть два способа. Способ безопасный:

  • скачайте и установите, если ещё не установили, архиватор 7zip;
  • Откройте приложение 7Zip file manager;
  • Найдите в нём файл, скачанный из интернета;
  • Вызовите контекстное меню файла и откройте пункт «Альтернативные потоки»;
  • Найдите поток zone identifier и удалите его, нажав клавишу delete.

Второй способ: открыть поток в ручную и удалить всё, что там написано. Показываю на примере Total Commander-а.

  • Найдите тоталом скачанный файл;
  • Находясь на нём, нажмите shift+f4;
  • Переместитесь в конец строки, поставьте двоеточие и напишите zone.identifier;
  • Нажмите enter;
  • В открывшемся окне редактора нажмите ctrl+a и за тем delete, чтобы выделить весь текст и удалить его;
  • Сохранитесь.

Всё, вы только что удалили штуку, из-за которой Windows «Ругалась на файлы, скачанные из интернета.

Вообще же… Файловые потоки — очень интересная вещь, с ними можно делать много чего интересного. Если интересно, что же именно с ними можно делать, спрашивайте, отвечу.

Опубликовано yuniks

Самый злобный человек на земле

Вливайтесь в общение

4 комментария

  1. Расскажи, пожалуйста, что же именно с ними можно делать. 🙂

  2. Вот например такая шутка. Никаких вирусов, всё безопасно, но обычного пользователя поставит в тупик. Скачайте по ссылке архив music.rar
    https://cloud.mail.ru/public/5hWc/38u86e3Wb
    Посмотрите на свойства файла:
    Размер: 10,8 МБ (11 407 037 байт)
    На диске: 10,8 МБ (11 407 360 байт)
    Создан: 17 июня 2020 г., 15:29:31
    Изменен: 17 июня 2020 г., 15:29:36
    А теперь распакуйте его. Вы увидите один файл music.txt, размером 89 байт. Откройте его блокнотом и прочитайте текст.
    Парадокс? Заархивированный файл больше разархивированного и это мягко говоря, что больше, больше на несколько порядков. Если быть более конкретным, то упакованный файл больше распакованного в 128169 раз. Вот так вот.

  3. Есть третий — самый лёгкий способ убрать поток «zone identifier». Если вызвать свойства файла, можно активировать пункт «Разблокировать».

  4. Да, совершенно верно, это — самый простой способ и я про него не знал, ну то есть даже не думал, что такое может быть на столько на поверхности.

Оставьте комментарий