Windows下如何调试由dll文件运行的服务

环境:Win 7 x86 

工具:OD调试器

1、添加映像劫持

在HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Image File Execution Options下
新建以调试进程为名的项,例如新建svchost.exe,然后在新建字符串并命名Debugger,填写为调试器.exe路径。

2、修改调试器与服务的交互检测并开启服务的桌面交互检测服务

一旦调用CreateService,服务控制台中就有显示该服务了,可以通过运行services.msc命令打开服务控制台。

Windows下如何调试由dll文件运行的服务

两种方法修改
一种是在服务控制台中打开服务属性窗口,选择登录项,将本地系统账户和允许服务与桌面交互打钩

Windows下如何调试由dll文件运行的服务
另一种是修改对应服务注册表中type值,打开HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\servicename,将原值与0x100异或后写入,操作完以后便打开了调试器与服务的交互检测。启动Interactive Service Detection服务,打开桌面交互检测服务。

3、修改服务与服务控制管理器的通信服务时间
打开HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control,新建DWORD值ServicesPipeTimeout,然后修改数值数据为86400000(24小时),如果不修改就会超时,服务控制管理器就结束承载服务的进程。这一步需要重启才会生效。(重启之前记得先把映像劫持删掉,重启之后再重新写回去,不然重启凡是调用svchost.exe启动服务时都会附加到调试器)

4、在服务控制台中找到服务后点击启动,就能挂载到调试器了

5、此时注意会弹出一个窗口,也有可能不弹出,选择查看消息,就到了调试界面

Windows下如何调试由dll文件运行的服务

6、进到调试界面以后,肯定是在svchost.exe领空,可以在OD选项中选择中断于新模块

Windows下如何调试由dll文件运行的服务

当病毒模块加载时就会断下来了,然后可以在相关病毒模块基址空间可疑代码处下断点进行调试。