2011-12-20 92 views
1

我看到一些反病毒软件注意到其他一些进程正试图修改我的注册表项并询问是否允许它。这个反病毒软件如何挂起这个过程,并在修改我的注册表之前停止,直到我做出决定?我找不到任何可以做这种事情的API,这对我的项目至关重要。在Windows上,如何防止注册表项被修改?

感谢,

回答

1

防病毒程序很可能挂钩了注册表函数,因此在将请求传递给实际函数之前,它会先调用自己的代码。

请注意,在几乎非常特定的情况下做这些事情可能会产生可疑的行为。

+0

因此,通过挂钩注册表功能,您的意思是AV软件已将其代码注入到创建的每个流程中? – Utoah 2011-12-20 15:44:13

+0

或者修补内核服务表。 “为Windows应用程序使用而导出的每个内核服务都有一个指针,该表使用Windows分配给API的内部服务编号进行索引。如果驱动程序使用指向其自身函数的指针替换表中的条目,则内核会在应用程序执行API时调用驱动程序函数,并且驱动程序可以控制API的行为。[来源](https:// blogs.technet.com/b/markrussinovich/archive/2005/10/31/sony-rootkits-and-digital-rights-management-gone-too-far.aspx?Redirected=true) – 2011-12-20 18:57:14

+0

修补“内核服务表”不是冷(tm),不支持,并且不能在Windows的x64变体上完成(PatchGuard会使机器恐慌)。我的答案下面包含注册表事件过滤唯一支持的方法。 – Bukes 2011-12-21 20:37:12

1

我想你可以在RegNotifyChangeKeyValue看看,但我认为一个杀毒不会使用这种方法。这不是而是对注册表所做的更改,但可用于获得通知键被修改时。

+1

确实'RegNotifyChangeKeyValue'不会阻止更改。 AV软件必须使用驱动程序来拦截API(因为ProcessMonitor能够提供关于诸如调用进程的调用堆栈等操作的更多细节)。 – Richard 2011-12-20 15:23:14

2

这也是用游戏来完成的。他们劫持了在3D场景中渲染对象的函数调用,然后他们告诉游戏引擎将所有角色渲染到每个其他对象的顶部,这导致了一次冲击。

您可以使用的API(现在不再是了,因为反作弊软件现在阻止它)是一种绕行API。您仍然可以将其用于您自己的课程目的。

网络上有很多关于此API的信息。

http://research.microsoft.com/en-us/projects/detours/

2

请考虑适当地使用固定RegSetKeySecurity(MSDN)应用程序的注册表项。

或者,您也可以构建一个注册表过滤器内核模式驱动程序。这样的驱动程序可以利用CmRegisterCallback/Ex()服务来过滤注册表事件。这是一个重要工作(tm),但它是唯一记录/支持的方法来完成这一点,我知道。