恶意代码分析实战 Lab10-01

Lab 10-01

本实验包括一个驱动程序和一个可执行文件。你可以从任意位置运行可执行文件,但为了使程序能够正常运行,必须将驱动程序放到C:\Windows\System32目录下,这个目录在受害者计算机中已经存在。可执行文件是Lab10-01.exe,驱动程序是Lab 10-01.sys.
问题
1.这个程序是否直接修改了注册表?
	修改了。
2.用户态的程序调用了ControlService函数,你是否能够使用WinDbg设置一个断点,以此来观察由于ControlService的调用导致内核执行了怎样的操作?
修改注册表,关闭防火墙。
3.这个程序做了些什么?
通过创建服务来加载驱动,驱动代码会创建并修改注册表键值来关闭防火墙。
使用ida对程序**lab 10-01.exe**进行分析。

在这里插入图片描述
可以看到有与服务相关的敏感操作。通过ida的strings进行分析。
在这里插入图片描述
在这里插入图片描述
可以看到出现了敏感文件路径。
在这里插入图片描述
OpenSCManger:在指定及其上创建与服务控制管理程序的联系,并打开指定的数据库,返回的是一个服务管理器的句柄。
CreateService:创建一个服务对象,并将它添加到指定的服务控制管理程序的数据库中。Service为创建的服务名称,此处为lab10-01。dwServiceType为服务类型,1表示此服务为驱动服务(此文件会加载到内核中去).dwStartType为服务启动类型,3表示此服务会自动启动 。dwErrorControl表示严重性错误,以及采取的行动,如果这项服务无法启动,1表示启动程序在事件日志中记录,但继续启动操作。BinaryPathName表示服务二进制文件的完全限定路径,dwDesiredAccess为访问权限,0xF01FF表示除此表中的所有访问权限外,还包括STANDARD_RIGHTS_REQUIRED 。
在这里插入图片描述
如果服务存在导致服务创建失败,则使用OpenService打开同名服务。如果打开成功,使用StartService开启服务。
ControlService: hservice,OpenService或CreateService 返回的服务句柄。
dwControl,要发送的控制码,此处为1,表示CONTROL _SERVICE_STOP,将会卸载驱动并调用驱动卸载的函数。IpServiceStatus,返回值,指向存储服务最新状态的结构体Service,返回信息来自SCM中最近的服务状态报告。

使用ida对Lab 10-01.sys进行分析,首先查看导入函数。
在这里插入图片描述
能够看到有与注册表相关的敏感操作。其中KeTickCount几乎所有驱动程序都会包括这个函数,可以忽略。
通过strings工具对其进行分析。
在这里插入图片描述
有与防火墙有关注册表相关。
使用process monitor进行分析。
在这里插入图片描述
可以看到有关注册表的更改子键,设置了seed(随机的更改)。
在这里插入图片描述
此处的DriverEntry为sub_10906,进入查看。
在这里插入图片描述
查看sub_10486
在这里插入图片描述
能够看到大量对注册表的操作。
RtlCreaterRegistrykey:通过一个给定的注册表相对路径和值创建指定的键。
RtlWriteRegistryValue:将提供的数据以指定的值名称写入指定的相对路径。参数实际的意义,还需要学习了解。
在这里插入图片描述
可以得知通修改注册表键值关闭了防火墙。
使用windbg调试内核。
我使用的是win7+win xp sp3,符号表使用了win xp3的下载器,因为之前使用的是win xp sp2加上微软的符号表链接,symbols文件只有十几兆,一直报错,于是使用下载器下载,共六百多兆,能够运行了。
在虚拟机中使用windbg加载lob 10-01.exe
在这里插入图片描述
在之前使用ida得到的controlservice地址进行断点,bp 00401080
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
使用win7的winbg进行调试
使用!drvobj查看Lab 10-01.exe创造的服务lab 10-01
在这里插入图片描述
在这里设备列表为空,这个驱动没有供应用程序访问的设备,也可以使用命令!Object \Driver获得所有的驱动列表

在这里插入图片描述
使用dt _DRIVER_OBJECT 地址 来解析地址的数据结构
在这里插入图片描述
重点观察DriverUnload函数,地址为0x29f7a704,使用bp指令在此加断点,并使用g指令恢复内核的执行。
在这里插入图片描述
在虚拟机中继续运行
在这里插入图片描述
在win7并运行到断点处
在这里插入图片描述
通过按t单步执行下一条指令

在这里插入图片描述
可以使用ida进行分析。从前面得知DriverStart的地址和DriverUpload的地址,从而得到偏移量0x486。
在这里插入图片描述
在ida中driver的默认地址的sys文件是从0x00010000开始的,所以函数卸载代码对应的地址为0x00010468。另外一个方法则是重新设置ida默认的基地址
在这里插入图片描述

在这里插入图片描述
将基地址修改为driverstart的地址。
在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值