2011-03-02 82 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 )所以已经有简单的调用指令来挂钩了。