如何调试服务

本文介绍了如何调试服务,包括使用IDA或OD分析启动服务的代码,附加Services.exe调试,以及修改dwCreateFlags实现挂起调试。同时,通过分析startService参数和服务回调函数ServiceMain,可直接动态调试服务代码。此外,还补充了关于系统基本进程的知识,如Csrss.exe、System Idle Process、Smss.exe等,以及服务管理工具Services.exe的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. IDA或者OD分析程序,找到启动服务(CreateService,StartService)调用代码看是要启动哪个文件

附加Services.exe,在CreateProcessInternalW下断,就能捕获到服务进程的创建

之后可以修改参数 dwCreateFlags 挂起状态 CREATE_SUSPENDED(0x00000004)

之后可以附加调试服务进程,附加之后打断点,再唤醒所有线程进行调试

2. 分析(startService函数的参数,找到服务控制的回调函数ServiceMain

启动服务的时候,可以直接将call startSevice 改成 call ServicesMain,调整一下栈针,可以直接动态调试代码服务回调

因为startSevice函数的原型和ServiceMain原型类似

BOOL WINAPI StartService(

  _In_     SC_HANDLE hService,

  _In_     DWORD     dwNumServiceArgs,

  _In_opt_ LPCTSTR   *lpServiceArgVectors

);

 

Push lpServiceArgVectors

Push dwNumServiceArgs

Push hService               // 代码nop掉

Call StartService           // 修改ServiceMain

 

void WINAPI ServiceMain(DWORD dwArgc,LPTSTR *lpArgv)

 

push lpArgv

push dwArgc

 

 

3. 如果不是驱动服务,普通服务是exe,服务注册完了,可以直接动态加载调试

 

 

 

另外补充一下系统知识:

基本系统进程

Csrss.exe:这是子系统服务器进程,负责控制Windows创建或删除线程以及16位的虚拟DOS环境。

System Idle Process:这个进程是作为单线程运行在每个处理器上,并在系统不处理其它线程的时候分派处理器的时间。

Smss.exe:这是一个会话管理子系统,负责启动用户会话。

Services.exe系统服务管理工具

Lsass.exe:本地的安全授权服务。

Explorer.exe资源管理器

Spoolsv.exe:管理缓冲区中的打印和传真作业。

Svchost.exe:这个进程要着重说明一下,有不少朋友都有这种错觉:若是在任务管理器中看到多个Svchost.exe在运行,就觉得是有病毒了。其实并不一定,系统启动的时候,Svchost.exe将检查注册表中的位置来创建需要加载的服务列表,如果多个Svchost.exe同时运行,则表明当前有多组服务处于活动状态;多个DLL文件正在调用它。

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值