Lab 10-01
本实验包括一个驱动程序和一个可执行文件。你可以从任意位置运行可执行文件,但为了使程序能够正常运行,必须将驱动程序放到C:\Windows\System32目录下,这个目录在受害者计算机中已经存在。可执行文件是Lab10-01.exe,驱动程序是Lab 10-01.sys.
问题
1.这个程序是否直接修改了注册表?
修改了。
2.用户态的程序调用了ControlService函数,你是否能够使用WinDbg设置一个断点,以此来观察由于ControlService的调用导致内核执行了怎样的操作?
修改注册表,关闭防火墙。
3.这个程序做了些什么?
通过创建服务来加载驱动,驱动代码会创建并修改注册表键值来关闭防火墙。
先说下windbg的下载地址:https://pc.qq.com/detail/0/detail_2060.html 还是腾讯软件良心直接收录了,网上下载好用的太难找了。
使用ida对程序**lab 10-01.exe**进行分析。
先反汇编看下,可以知道是在创建服务并启动!然后再看strings,基本判断是通过驱动方式来加载恶意代码。
可以看到有与服务相关的敏感操作。通过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进行调试,
vmvare设置:
虚拟机配置
1,打开相应的虚拟机,选择“编辑虚拟机设置”,打开虚拟机设置对话框,如下
2,观察“虚拟机设置”这个对话框的“硬件”->“设备栏”,看看是否有“打印机”或“Printer”,如果有,则删除该设备。==》关键!!!否则链接不成功!
3,选择“添加”,然后选择“串行端口”,然后选择“使用命名管道”,并按如下设置
原文链接:https://blog.csdn.net/qq_25867649/article/details/54944675
winxp做一些准备工作,修改boot.ini文件:
我们在桌面上找到“我的电脑”然后右键单击,选择“属性”,进入系统属性页面之后,我们在第一行选择“高级”然后在下方选择“设置”
2、第二步,我们在"启动和故障恢复"页面中点击“编辑”就能对Boot.ini文件进行编辑了
[boot loader] timeout=30 default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS [operating systems] multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional with kernel debug" /noexecute=optin /fastdetect /debug /debugport=COM1 /baudrate=115200
修改好了以后重启!
然后windbg 点击kernel debug:
看到下面消息:
但是没有连接成功!
我的做法是这样的,其他做法也可以,只要你可以调试就行了,我找到Windbg
的文件夹,然后把这个程序创建一个桌面快捷方式,目标修改下:
"C:\Program Files (x86)\Debugging Tools for Windows (x86)\windbg.exe" -b -k com:port=\\.\pipe\com_1,baud=115200,pipe -y C:\Windows\Symbols
其中,C:\Windows\Symbols ,去资源文件:Windbg+Symbols 安装包(提取码:fvva)里下载安装,默认是安装在C:\Windows\Symbols!
成功后,然后我们双击windbg快捷方式,从下图看,就说明已经处于调试状态了!
使用!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的地址。