2011-03-02 84 views
0

我在這裏結束了我的繩索。我已經嘗試了三個星期來獲取這些信息。在繼續之前,我希望你知道我不是在這裏寫惡意軟件。然而,我正在編寫一個監測惡意軟件行爲的二進制分析工具。掛鉤或監控服務創建

我想要完成的是鉤住或監視CreateServiceW和CreateServiceA。原因是我想知道哪些進程調用了CreateService,以及哪些二進制文件正在通過調用註冊爲服務。

我嘗試了一切,從編寫鉤子ZwRequestWaitReplyPort攔截LPC消息,爲advapi32.dll編寫代理DLL,併爲CreateService函數編寫內聯鉤子。這些方法都沒有取得成果。代理DLL在測試中很有前途,但是當system32中的官方DLL被替換爲代理(BSOD)時,代理DLL無法正常工作。如果我可以獲得對DLL所在映射內存區域的寫訪問權限,內聯鉤子就可以工作。但是,無論我的時間用完了,我迫切需要一個替代方案。

我已經看過SetWindowsHookEx,它似乎可以攔截從進程發送到services.exe的消息......但我不確定。

任何人都可以向我指出一個好方向......我求你了。

+0

你不能鉤住/監視註冊表嗎?服務創建總是最終修改HKLM \ SYSTEM \ etc ...? – 2011-03-02 20:32:02

+0

我已經有了掛鉤的註冊表。不幸的是,當通過CreateService或StartService註冊服務時,它是執行註冊表修改的SCManager(services.exe)。我想要的是誰叫CreateService和什麼二進制註冊= D。 – deusprogrammer 2011-03-02 21:01:36

+0

如果我的膽量感覺沒有問題ZwRequestWaitReplyPort是不正確的路(我不知道是什麼)。因爲ZwRequestWaitReplyPort是一個RPC API,這意味着它只提供一個消息傳遞系統。你應該試着找到接收函數(因爲如果有人遠程啓動一個服務,ZwRequestWaitReplyPort上的鉤子將不會捕獲它)。 – DiGMi 2012-07-31 09:41:10

回答

0

「如果我可以獲得對DLL所在內存映射區域的寫入訪問,則內聯鉤子將起作用。」

如果它是一個完全控制的系統,爲什麼你沒有對存儲器的寫入權限?

使用VirtualProtect將權限更改爲RWX並放入鉤子。ADVAPI32 CreateService例程只是通過api-ms-service-management-l1-1-1.dll轉發到sechost.dll的存根(由於MinWin )所以已經有簡單的調用指令來掛鉤了。