2011-12-20 59 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),但它是唯一記錄/支持的方法來完成這一點,我知道。