在 Windows 操作系统中隐藏文件

逆向工程 视窗 修补 函数挂钩 dll注入 勾搭
2021-07-09 23:10:04

我试图了解如何在 Windows 中隐藏文件,以此作为了解 win api 和恶意软件分析的一种方式。

我想要做的是通过某种操作使文件“消失”。但我不知道该怎么做。

例如,如果我想让一个 cmd 或一个特定的浏览应用程序不显示该文件,在我看来,我会使用 hooking/dll 注入,这样如果应用程序等于我试图隐藏的应用程序的名称,它会跳过偏移量,就像到下一个文件一样。但是,我无法挂钩世界上的所有流程,并且想知道是否有更聪明的方法来做到这一点。windows中是否有任何机制,或者一些winapi负责保存文件系统的“记录”,当程序/进程想要遍历/查找某个目录的内容时,该文件系统将始终被调用?

你会如何处理这个简单的任务?我很确定恶意软件作者做了非常棘手和复杂的事情,我正在努力学习识别这种行为的方法,以便更容易阻止。

非常感谢你。

1个回答

有很多方法可以在不求助于挂钩或驱动程序的情况下做到这一点。

例如,备用数据流 (ADS),或创建具有“非法”名称的文件,即保留名称(NUL, CON... 尾随.,现有文件的备用大小写)。是的,在 Win32 中,文件名中的尾随点是非法的,但最常用的文件系统 (NTFS) 可以轻松创建或处理它们。对于 ADS,也可以将其粘贴到文件夹中,某些工具无法正确处理该文件夹。也就是说,C:\Windows\regedit.exe:yourfile您可以将其粘贴到C:\Windows:yourfile. 不确定是否可能,但作为恶意软件编写者,我还会查看特殊文件,例如\$Mft是否有可能将 ADS 附加到...

回避 Win32 名称解析是一种无需求助于 NT 本机 API 就可以隐藏起来的好方法。然而,访问文件的某些特定情况可能仍需要单独使用 NT 本地 API(即使创建和删除此类文件不是必需的)。

另一种方法是编写文件系统过滤器驱动程序,但在这种情况下您的麻烦是 Windows 要求对驱动程序进行签名。因此,如果您编写了一个狡猾的驱动程序,很可能您不会得到 Microsoft 的会签。取决于他们在认证签署之前对驱动程序进行了多少测试

对于文件系统过滤器驱动程序,您可以选择微型过滤器,它们相对容易编写(Windows 驱动程序工具包中有全面的示例代码),但必须遵循某些规则。同样,由于签名要求,这可能无法通过签名。但是,如果只是为了学习,您可以在 Windows 上启用测试签名并使用它。在最近的 Windows 10 中,这是唯一的官方方法。

另一种方法是编写遗留文件系统过滤器驱动程序(例如过滤器管理器、fltmgr.sys、 是),因为它为您提供了更多的自由。唉,这也是一项更复杂的工作,学习曲线更陡峭。并且最终存在相同的签名要求。

除了标准的过滤器驱动程序之外,您还可以做一些狡猾的事情,例如窃取另一个驱动程序的入口点(通常用于 IRP 主要功能),从而捎带这样一个驱动程序的功能。再次签署要求是一个障碍。

我想提到的最后一种方法是分析现有的驱动程序,看看是否可以在其中找到任何可利用的漏洞。如果你找到了一些,它就像一个头奖,你可以回避所有这些签名要求。但它也是所有可能路线中最复杂的。

必读:“Rootkits 和 Bootkits”,它解释了某些恶意软件类型如何隐藏在文件系统之外,以及 Greg Hoglund 于 2005 年命名的较旧的“Rootkits”。


还有一点要注意:不确定你希望从中得到什么,但挂钩似乎是最不可靠的,但却是你拥有的最多的升旗方式。不知道你为什么坚持(根据你的评论)。