关于desktop.ini文件的杂谈

0x00 前言

在一次应急响应的过程中发现某恶意脚本使用desktop.ini更改文件夹属性进行隐藏。但是一直在忙于出差没啥时间进行研究,刚好现在稍微有一点时间,于是对desktop.ini进行研究。发现网上没有类似文章,遂特此对此研究过程进行记录。

0x01 啥是desktop.ini

首先,对于常年玩电脑的人来说,desktop.ini文件肯定是不陌生的,因为有时候在Windows下需要查看、移动、修改系统文件时,我们需要在 文件夹-文件-更改文件夹和搜索选项-查看-高级设置 中设置以下选项:

desktop.ini同时具有“系统操作文件”和“隐藏文件属性”双重属性,因此需要反勾选“隐藏受保护的操作系统文件”,并选择“显示隐藏的文件、文件夹和驱动器”才会显示desktop.ini

设置完成后,你会发现:神奇!有些文件夹下竟然出现了desktop.ini文件。那么他到底有什么用呢?我们查阅MicroSoft官方的资料库,可以略知一二:

文件系统文件夹通常显示一个标准图标和一组属性,例如指定文件夹是否共享。 可以通过在该文件夹中创建Desktop.ini文件来指定不同的选项来自定义单个文件夹的外观和行为。

如何使用Desktop.ini自定义文件夹 - Win32 apps | Microsoft Learn使用Desktop.ini文件自定义单个文件夹的外观和行为。icon-default.png?t=N7T8https://learn.microsoft.com/zh-cn/windows/win32/shell/how-to-customize-folders-with-desktop-ini注意其中有很重要一段话,后面我们将会利用该命令使其生效:

可以使用 attrib +s FolderName 从命令行将文件夹设为系统文件夹。

 有了官方文档做参考,我们可以照着官方文档所给的文件示范来实际操作一下,体验一下该文件的神秘之处。

0x02 如何编写desktop.ini

创建desktop.ini有两种方式:

第一种方式:

新建文件夹后,右键点击 文件夹-属性-自定义-确定,没错,无需修改任何设置项目,即可在该文件夹下生成desktop.ini,原因就是因为,刚刚自定义中默认选择了图片格式,因此你看到生成的desktop.ini应该如下所示:

[ViewState]
Mode=
Vid=
FolderType=Pictures

其实我们不难发现,该文件其实就是记录了文件夹相关信息,便于计算机去读取识别。

第二种方式:

正如上文中官方文件所述,我们可以手动创建编辑desktop.ini:

[.ShellClassInfo]
ConfirmFileOp=0
NoSharing=1
IconFile=Folder.ico
IconIndex=0
InfoTip=Some sensible information.

并保存,保存后按照文档所示,对该文件夹进行命令执行以刷新文件夹属性(这离我随便找了个ico文件复制进来):

attrib +s C:\xxx\xxx\xxx

执行完后可以立即看到,文件夹缩略图发生了改变,同时,如果你把鼠标放上去也会发现提示词发生了变化

0x03 各项参数及其含义 

 [.ShellClassInfo] 节

不同的属性部分,微软通过不同的节来划分,不同的节名称采用中括号“[”、“]”扩起来,这里先解释[.ShellClassInfo]节

ConfirmFileOp

将此项设置为 0 以避免在删除或移动文件夹时出现“您正在删除系统文件夹”警告。

NoSharing

在 Windows Vista 或更高版本下不受支持。 将此项设置为 1 以防止共享文件夹。

IconFile

如果要为文件夹指定自定义图标,请将此项设置为图标的文件名。 首选 .ico 文件扩展名,但也可以指定.bmp文件,或.exe和.dll包含图标的文件。 如果使用相对路径,则图标可供通过网络查看文件夹的用户使用。 还必须设置 IconIndex 条目。

IconIndex

设置此项以指定自定义图标的索引。 如果分配给 IconFile 的文件仅包含单个图标,请将 IconIndex 设置为 0。

InfoTip

将此项设置为信息性文本字符串。 当光标悬停在文件夹上时,它将显示为信息提示。 如果用户单击文件夹,则信息文本将显示在文件夹的信息块中,低于标准信息。

LocalizedResourceName

官方没有给解释,但是从名称可以直译为“本地化资源名称”,这也解释了为什么在用户目录下进入Desktop文件夹,会在资源管理器里面直接显示桌面的原因了。

下图中两个路径是等价的:

CLSID

这个就非常神奇了,他会影响整个文件夹的工作方式,首先我们来看下他有什么用,根据微软官方的解释,他可以将文件夹链接到其嵌入的对象

CLSID 密钥 - Win32 apps | Microsoft LearnCLSID 是标识 COM 类对象的全局唯一标识符。 如果服务器或容器允许链接到其嵌入的对象,则需要为每个受支持的对象类注册 CLSID。icon-default.png?t=N7T8https://learn.microsoft.com/zh-cn/windows/win32/com/clsid-key-hklm打个比方:如果我将desktop.ini文件设置为如下属性并重新调整权限:

CLSID={21ec2020-3aea-1069-a2dd-08002b30309d}

你会发现,图标变了,并且文件夹名被置空了,双击打开将会是如下的界面

神奇,我竟然在文件夹内打开了控制面板,那么熟悉该功能点的RedTeam应该想起了一个知识点,利用该方法调用一些正常情况下被禁用的组建,这里不详细探讨,可以参考以下链接:

https://github.com/3gstudent/3gstudent.github.io/blob/b04d1073fc75c9d1bfab04e60be28bf0ac6e2a1a/_posts/2018-1-23-%E6%B8%97%E9%80%8F%E6%8A%80%E5%B7%A7%E2%80%94%E2%80%94%E5%88%A9%E7%94%A8%E5%9B%BE%E6%A0%87%E6%96%87%E4%BB%B6%E8%8E%B7%E5%8F%96%E8%BF%9E%E6%8E%A5%E6%96%87%E4%BB%B6%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%9A%84NTLMv2%20Hash.mdicon-default.png?t=N7T8https://github.com/3gstudent/3gstudent.github.io/blob/b04d1073fc75c9d1bfab04e60be28bf0ac6e2a1a/_posts/2018-1-23-%E6%B8%97%E9%80%8F%E6%8A%80%E5%B7%A7%E2%80%94%E2%80%94%E5%88%A9%E7%94%A8%E5%9B%BE%E6%A0%87%E6%96%87%E4%BB%B6%E8%8E%B7%E5%8F%96%E8%BF%9E%E6%8E%A5%E6%96%87%E4%BB%B6%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%9A%84NTLMv2%20Hash.md除此之外还有其他参数等等等等,后续还会补充

0x04 神奇的CLSID

在Windows下有这么一个系统文件夹:C:\Windows\Offline Web Pages

那么他有什么神奇的地方呢?我们先点开看看,发现其打开竟然没有desktop.ini,但是我们明明开了隐藏和系统文件属性显示的啊,为什么呢,我们通过命令行又可以看到(此处需要给dir加参数,显示H属性文件)

这个文件夹本身是用于存储离线网页的,那么问题来了,同样的desktop.ini给其他文件夹能否使用呢,答案当然是可以的:

在某一文件夹下创建如下所示内容的desktop.ini,同时创建一个文本文件hide_file.txt,然后使用命令 attrib +s xxxxx 使其生效:

[.ShellClassInfo]
CLSID={F5175861-2688-11d0-9C5E-00AA00A45957}

那么你会发现此时文件夹会自动修改图标:

当我们进入文件夹时,已经发现所有文件已经被隐藏,即使是打开显示隐藏文件也不会显示。其实它的本质并不是隐藏,而是类似上文中的控制面板,直接新建了一个页面覆盖在原有的文件夹上,让你看不到,即使是没有隐藏属性或系统属性的文件或文件夹,也会被覆盖,让你误以为确实没有文件了,但我们通过命令行或属性依然可以看到:

那他有什么用呢,其实主要还是隐藏文件比较好用,,,其他也没什么用途了。 

如果想要将其恢复为正常文件夹,attrib -s C:\xxx\xxx\xxx 即可

0x05 参考

https://books.google.com.hk/books?id=-STO5wXKPgkC&pg=PA91&lpg=PA91&dq=CLSID%3D%7BF5175861-2688-11d0-9C5E-00AA00A45957%7D&source=bl&ots=QUJBCSYw8U&sig=ACfU3U2ijgIopYlEV1sDrWm1eiKLEcPWNQ&hl=zh-CN&sa=X&ved=2ahUKEwj2p4S1ibOBAxUNbt4KHa3tAkw4ChDoAXoECAQQAw#v=onepage&q=CLSID%3D%7BF5175861-2688-11d0-9C5E-00AA00A45957%7D&f=false

DESKTOP.INI - Windows XP examples - PeatSoft

DESKTOP.INI - Windows ME examples - PeatSoft

https://www.cnblogs.com/Chinasf/archive/2010/01/07/1640922.html

XP 和 Vista 用户文件夹 Desktop.ini - 聊设计|MyStudio Blog

Windows让英文文件夹显示中文名称 | 麦子花开

关于文件夹外观设置文件desktop.ini目前为止最完整的解析 _desktop.ini 标准-CSDN博客

修改desktop.ini 自定义文件夹[高级篇]-CSDN博客

Desktop.ini Documentation - PeatSoft

W32.Flamer: Spreading Mechanism Tricks and Exploits

怎么把自己喜欢的图片弄成界面图标和文件夹图标-ZOL问答

猜你喜欢

转载自blog.csdn.net/SL003/article/details/132846892