一条命令,看出下载文件来自哪个网站

下载文件夹里堆了几十个安装包,过一阵子再看,常常想不起某个 exe 到底是从官网下的还是从论坛转来的。更常见的情况是:双击下载来的程序,系统弹出「此文件来自其他计算机,可能被阻止以帮助保护该计算机」;用 Office 打开下载的表格,顶部横幅提示进入受保护的视图,编辑按钮点不了。

这些提示不是凭空冒出来的。NTFS 文件系统里有一个沿用了 33 年的机制——替代数据流(Alternate Data Streams,简称 ADS),一个文件除了肉眼能看到的正文,还能挂上若干个独立命名的「附加层」。文件名、图标、文件大小都不露痕迹,资源管理器也从未打算显示它。Windows 正是用其中一个叫 Zone.Identifier 的流,记下这个文件从哪儿来。

一、先做个实验,亲眼看见第二层

MakeUseOf 撰稿人 Afam Onyimadu 给出的验证步骤只要一分钟:

  1. 任意文件夹里右键 →「新建」→「文本文档」,命名 test.txt,写一句话后保存关闭。
  2. 点击资源管理器地址栏,输入 cmd 回车,在当前目录打开命令提示符。
  3. 执行 notepad test.txt:secret.txt,在弹出的记事本里随便写点内容,保存关闭。
  4. 回到命令行执行 dir,列表里依然只有 test.txt,看不出异常。
  5. 再执行 dir /r,test.txt 下面会多出一行以 $DATA 结尾的记录,带着自己的名字和体积。

这不是文件里藏了另一个文件,而是同一条文件记录上挂了第二条数据流。查属性、比大小都发现不了。

二、查出下载文件的真实来源

把同样的动作用到下载目录,收获会更实用:

  1. 在「下载」文件夹地址栏输入 cmd 回车,执行 dir /r
  2. 很多文件下方会出现名为 Zone.Identifier 的流。
  3. notepad 文件名:Zone.Identifier 直接打开它(文件名含空格时用引号括起来)。
  4. 里面通常有一行 ZoneId=3,代表文件来自「Internet 区域」而非本机创建;有些还带 HostUrl 和 ReferrerUrl,直接指向当初的下载地址。

习惯用 PowerShell 的话,Get-Item -Path "C:\Users\用户名\Downloads\setup.exe" -Stream * 能列出同一份信息。

三、确认可信后再解除锁定

这套标记就是所谓的「网络来源标记」(Mark of the Web),它会让系统和部分软件对文件加以限制。确认来源可靠后再解除:

  1. 右键文件 →「属性」→「常规」选项卡,拉到窗口底部的「安全」一行。
  2. 勾选旁边的「解除锁定」复选框,点击「应用」再点「确定」——只勾不点应用不生效。
  3. 需要批量处理时,在目标目录打开 PowerShell 执行 dir -Recurse | Unblock-File,或对单个文件用 Unblock-File -Path "完整路径"
  4. 压缩包建议先对 zip 本身解除锁定再解压,否则解出来的文件可能继承同样的标记。

四、几点值得留意的地方

从挂载的 ISO 或 IMG 镜像里取出的文件,并不总能可靠地带上 Zone.Identifier。没有标记就不触发警告——自微软默认拦截来自互联网的宏之后,攻击者转而更多使用 ISO 附件,正是钻了这个空子。收到陌生人发来的 ISO 附件,警惕程度应高于普通文档。

另外,附加流的存活取决于文件系统和传输方式。把带流的文件复制到 FAT32 格式的 U 盘,再执行 dir /r,可见内容还在,附加的那一层已经消失。资源管理器虽不显示这些流,安全软件却能识别,微软免费提供的 Sysmon 就专门有一类事件用于记录流的创建。

来源:MakeUseOf