限制程序对 Windows 注册表的访问

限制程序对 Windows 注册表的访问

是否可以阻止某个程序访问 Windows 注册表?我知道有 ACL 可以锁定用户,但是每个可执行文件的控制呢?

答案1

抱歉,这不可能,至少达不到你想要的程度。评论中提到由 Ƭᴇcʜιᴇ007 撰写,所有 Windows 访问控制均基于用户。每个进程都附有一个令牌,该令牌决定了进程以哪个用户身份运行。您执行操作和在您的帐户下运行的程序执行该操作之间没有区别,因为您实际上是通过一个进程或另一个进程执行所有操作的。“程序不会攻击用户;用户攻击用户”。

此外,几乎每个进程都会访问注册表。即使程序本身没有明确执行任何注册表访问,使用进程监控揭示了每个 GUI 应用程序都从读取大量注册表开始,以了解如何设置图形控件。在您认为不需要注册表的应用程序上运行进程监视器;您会感到惊讶。

但是,如果你想要阻止所有写入并且只阻止写入,实际上有些东西可能会有所帮助。Windows 有一个“完整性级别”的概念,它是 UAC 的一部分。基本上,在某个完整性级别运行的程序无法写入标有更高完整性级别的对象。普通进程和普通文件(和注册表项)具有中等完整性级别,但你可以手动启动具有低级别的进程。下载执行程序工具。如果您想创建一个无法写入正常位置的命令提示符,请运行以下命令:

psexec -l -i cmd

-l开关设置了低完整性;该-i开关使进程具有交互性。生成的命令提示符只能写入专门标记为低完整性的位置。

C:\Users\Ben>reg add HKCU\Test
ERROR: Access is denied.

该命令在普通命令提示符下有效,但在这种锁定的命令提示符下无效。

答案2

另一个解决方案是使用沙盒。该程序可以执行沙箱内的任何进程,从而可以撤消该进程对系统所做的任何更改。

答案3

  1. 转到程序在注册表中写入的文件夹(HCU/HLM..\Run),例如:“C:\Users\aaa\AppData\Roaming\BloatInstall\Annoying.exe”

  2. 将该程序重命名为新名称,例如:“Annoying.exe”->“noMoreAnnoying.exe”

  3. 然后在同一目录中创建一个同名的文件夹“Annoying.exe”(一个空文件夹)

  4. 更改您的快捷方式,使其以新的可执行文件名为目标:“C:\Users\aaa\AppData\Roaming\BloatInstall\noMoreAnnoying.exe”

您不再需要编辑 Windows 注册表。当该程序尝试自动启动时,它将无法自动启动。

相关内容