![限制程序对 Windows 注册表的访问](https://linux22.com/image/1497819/%E9%99%90%E5%88%B6%E7%A8%8B%E5%BA%8F%E5%AF%B9%20Windows%20%E6%B3%A8%E5%86%8C%E8%A1%A8%E7%9A%84%E8%AE%BF%E9%97%AE.png)
是否可以阻止某个程序访问 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
转到程序在注册表中写入的文件夹(HCU/HLM..\Run),例如:“C:\Users\aaa\AppData\Roaming\BloatInstall\Annoying.exe”
将该程序重命名为新名称,例如:“Annoying.exe”->“noMoreAnnoying.exe”
然后在同一目录中创建一个同名的文件夹“Annoying.exe”(一个空文件夹)
更改您的快捷方式,使其以新的可执行文件名为目标:“C:\Users\aaa\AppData\Roaming\BloatInstall\noMoreAnnoying.exe”
您不再需要编辑 Windows 注册表。当该程序尝试自动启动时,它将无法自动启动。