首页
社区
课程
招聘
[原创]记录自己调试windows服务的操作
发表于: 2022-1-9 23:25 14568

[原创]记录自己调试windows服务的操作

2022-1-9 23:25
14568

        如题,近日分析了一个样本,发现需要调试服务,然后自己也没调试过服务,就在国内查了一些资料,基本能用的也就看雪一个大哥发的教程。[原创]使用Windbg&OllyDbg从头调试windows服务-软件逆向-看雪论坛-安全社区|安全招聘|bbs.pediy.com

        但是跟着操作弄了一遍,虽然是弄好了,但是会出现一个情况就是调试器会非常的卡,而且过了一会就消失了,整个虚拟机就直接是卡死状态,研究了许久还是解决不了就放弃了。然后就自己办法弄,考虑过写驱动给拦截了,但是VS2022没有WDK,于是想到全局API Hook,然后发现svchost.exe不过消息队列。在觉得无望的时候,我在火绒剑发现了这么一个玩意。


        因为自己是没去研究过服务启动的一个流程,在分析样本的时候用的是sc命令启动,就以为服务是从sc.exe去加载的,然后去分析了半天,发现不行。于是乎发现了这么一个流程,服务的一个启动过程如下:

        然后就有了一个想法,直接附加service.exe然后给CreateProcessW下断点,再启动服务,拦截到svchost.exe的创建后,把参数修改为PROCESS_SUSPEND_RESUME,最后再用调试器附加svchost.exe下断LoadLibrary,手动恢复线程后等待目标服务DLL加载。理论存在开始实践。

        

        启动服务后直接断下,然后直接查看参数,发现是包含了线程暂停。

                  

        猜到后面会存在恢复线程操作,就稍微跟了一下。

                   

        F8走几步发现了恢复线程的函数,这里直接Nop掉不让他执行。走完之后直接恢复这个地方的Call

                     

        这个时候已经可以把调试器F9跑起来了,然后会突然断在异常上。

       

        这里的这个异常让我想到了另一种调试方法,在法二里。

        这个时候另一个调试器附加创建出来的进程。

         

        恢复线程,然后F9让调试器跑起来。这个时候这里是不会断下的,需要到第一个调试器F9,一直F9到第二个调试器断下。(这里猜测是因为services.exe的操作没跑完,然后svchost.exe单独跑就出现问题。)

        第二个调试器断下后,就可以直接单次F9等到目标DLL加载了。

        加载完毕,直接跳到目标DLL的函数下断即可。


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2022-1-9 23:26 被PlaneJun编辑 ,原因:
收藏
免费 3
支持
分享
最新回复 (6)
雪    币: 400
活跃值: (4096)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
在loadlibrary下断点不方便分析,可以在exe或者dll的入口点下一个0xCC方便点。如何区别不同的服务进程的真实路径也是值得参考的一个小问题,例如Pchunter就没能识别不同的服务进程
2022-1-11 14:06
0
雪    币: 2266
活跃值: (6613)
能力值: ( LV7,RANK:102 )
在线值:
发帖
回帖
粉丝
3
多静态分析,少动态分析
2022-1-11 14:24
0
雪    币: 122
活跃值: (7471)
能力值: ( LV9,RANK:335 )
在线值:
发帖
回帖
粉丝
4
0x太上 在loadlibrary下断点不方便分析,可以在exe或者dll的入口点下一个0xCC方便点。如何区别不同的服务进程的真实路径也是值得参考的一个小问题,例如Pchunter就没能识别不同的服务进程

你个小垃圾,剑来

2022-1-11 14:57
0
雪    币: 19
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
5

最新回复 (3)

       

0x太上 活跃值 2022-1-11 14:06
    引用 举报
    2 楼 0

在loadlibrary下断点不方便分析,可以在exe或者dll的入口点下一个0xCC方便点。如何区别不同的服务进程的真实路径也是值得参考的一个小问题,例如Pchunter就没能识别不同的服务进程
       

fjqisba 活跃值 2022-1-11 14:24
    引用 举报
    3 楼 0

多静态分析,少动态分析        
       

PlaneJun 活跃值 6 2022-1-11 14:57
    引用 举报
    4 楼 0

    0x太上 在loadlibrary下断点不方便分析,可以在exe或者dll的入口点下一个0xCC方便点。如何区别不同的服务进程的真实路径也是值得参考的一个小问题,例如Pchunter就没能识别不同的服务进程 

你个小垃圾,剑来

2022-5-29 19:14
0
雪    币: 234
活跃值: (217)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
恩 谢谢分享!还没有调过service  只调过driver
2022-6-1 05:30
0
雪    币: 263
活跃值: (350)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
还有个方法,修改注册表某个表项,程序在启动时加载完user32.dll就会加载你指定的dll
2023-2-25 20:32
0
游客
登录 | 注册 方可回帖
返回
//