-
-
[原创]使用Windbg&OllyDbg从头调试windows服务
-
发表于:
2018-7-7 14:58
17067
-
[原创]使用Windbg&OllyDbg从头调试windows服务
在分析恶意软件时,恶意软件通常会创建服务,然后拉起服务删除自身文件,结束进程。很多关键的操作都在恶意软件新创建的服务之中,当然可以使用IDA进行静态的调试,但同时需要OD对服务进行动态的调试。
对于绝大多数的服务可以直接attach到OD或者windbg上进行调试,但是如果想从启动就开始就调试该服务,这种attach的方法就不是很适用。网上有一些多年前的文档教程,但是在亲身尝试的时候总是用各种各样的问题,我就结合网上教程和亲身测试对如何使用OD/Winddbg调试windows服务进行一个较为详细的说明。
本人分析的是一个挖门罗币恶意软件的loader,直接步入对服务进行操作与的正题,首先是创建一个服务:
然后会对服务注册表中的一些值进行设定,这里就省略了。
在注册表的数值被设置之后,会直接调用StartService()开启服务:
此时要在次设置好断点,不要执行该布步骤。
静态分析该文件时,在文件中可以看到很多的函数操作,包括对文件的读写,对进程的遍历等等。但是在单纯执行该文件的时候,这些函数操作都不会表现出来。IDA反汇编代码如下:
从以上代码可知,如果该程序是以服务的形式被拉起的,则会运行sub_401F30()函数的程序,否则会向下运行到绿色框中的程序。绿色框中程序的功能就是,删除现有服务,再新创文件,自删除文件,创建新服务,设置注册表参数,拉起服务,结束程序。所以如果不进入到服务进行debug,则一直不能看到核心的恶意代码。而且这些恶意操作执行的速度会很快,不等你attach到OD上就会结束,所以此时需要设置当服务一被拉起就进行调试功能。
恶意软件所注册的服务通常是自启动的,为了方便调试,可以将其更改为手动开启模式。
使用注册表编辑器,打开注册表路径:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Image File Execution Options ,添加一个主键,名称设置为将要调试服务的exe文件:
我要调试的服务的exe文件是scvhost.exe所以在
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Image File Execution Options 键值下新建一个键值的名称为scvhost.exe,然后再里面添加一个新建一个字符串选项,命名为debugger,最后对debugger这个参数进行设置,设置为调试器的路径。在设置好之后,运行scvhost.exe文件,就自动进入OD的调试界面。所以最好在调试前在被调试服务文件入口设置好断点。
当调试服务.exe文件时,其实是在从服务启动时进行调试的,系统对启动服务设置了默认的超时时间,超过时间就会退出启动并报错:
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)