从Windows 8 内置的SmartScreen看文件流
SmartScreen功能原本是为了保护用户不进入危险或仿冒的网站的,在Windows 8当中,这功能已经被系统接受。如果你打开一个从网络上面下载的程序,就会得到以下提示:
系统会在打开文件的时候检查该文件,如果不符合某些规则就弹出提示框。笔者最开始在使用Windows 8 的时候就被这样的提示迷惑了,认为程序坏掉了。其实是系统对于文件的处理不同了。网络上关于关闭它的方法也就很多,这里不是重点,我们来看看到底是文件的什么地方会让系统认为它不安全。
对于其点击右键,可以发现在属性当中的最下面多了一小部分(红色框):
提示我们这个文件是从别的地方获取到的,因此为了安全,系统自动锁上了,点击按钮就可以解锁并正常访问了,之后也不会再次提醒。在学习NTFS的时候发现了其中的秘密:系统使用一个特殊的文件流来保存这个信息,而使用普通方法是看不到这样的内容。而该文件流的流名字是Zone.Identifier,大小只有20来字节,查看的话需要使用命令提示符来进行,在命令提示符当中输入:
more < IFEO_V2.exe:Zone.Identifier
就会看到如下内容:
[ZoneTransfer]
ZoneId=3
这其实就是一个标识符,其中ZoneId代表了所在的区域。这里的区域是对应于IE当中的区域设置,1代表受信任的站点,2代表本地Intranet,3代表Internet,4代表受限制的站点。根据默认设置,1和2都可以正常使用而没有提示,3就会得到如上提示。如果ZoneId为4就会得到下面的错误信息:
系统认为这是一个不信任的程序,因此系统拒绝打开该文件。在此,除非手动解锁或者调整安全设置,这个程序是运行不了的。
微软提供了一个查看文件流的工具: streams.exe 使用该工具可以查看某些文件或文件夹的文件流,它可以列出流的大小和名字等详细信息。查看一个文件流具体内容使用 “more < 文件名:流名称”即可(不含引号)。由于Windows当中要求文件名不能包含冒号,所以使用常用的桌面程序是无法打开该流里边的内容的。