如何调试服务
来源:互联网 发布:360浏览器淘宝比价 编辑:程序博客网 时间:2024/04/30 03:30
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文件正在调用它。
- 如何调试服务
- 如何调试 Windows 服务
- 如何调试windows服务
- 如何调试服务
- 如何:调试 Windows 服务应用程序
- 如何:调试 Windows 服务应用程序
- 如何:调试 Windows 服务应用程序
- VS Windows服务如何调试?
- 如何创建/安装/调试Windows服务
- 如何创建、安装和调试Windows服务
- 如何创建、安装和调试Windows服务
- web服务如何调试https请求
- 如何使用工具调试linux服务程序
- 调试服务
- c# 安装,卸载及如何调试自编写的服务
- 如何调试
- 进程、服务调试
- OD调试服务
- 范围搜索 (Range Query)
- Unity 移动端触摸屏操作
- 使用maven创建web项目
- HTTP相关,Android使用Fidder抓包
- jsp和html的区别以及jsp是如何实现动态的
- 如何调试服务
- iOS开发(OC)——QQ点赞效果
- Java运行时动态加载类之ClassLoader加载class及其依赖jar包
- nginx 同一个IP上配置多个HTTPS主机
- Java 关于HashMap根据value反向获取key值
- Linux数据流重定向
- github学习之路2
- Oracle查找
- 开博第一帖!