首页
社区
课程
招聘
[原创]x64环境下利用IDA+Windbg+VmWare实现对Nt!KiSystemStartup 的调试
2024-4-29 15:22 3204

[原创]x64环境下利用IDA+Windbg+VmWare实现对Nt!KiSystemStartup 的调试

2024-4-29 15:22
3204

KiSystemStartup是内核模块nt 的入口函数,如果想调试此函数单单用windbg+Vmware是实现不了的(或者我不知道实现方法)。下面我将介绍一下用ida的GDB调试功能结合windbg的调试器共同实现对KiSystemStartup的调试方法。(只针对X64的环境) 粗体文本 粗体文本 粗体文本

1.Vmware虚拟的设置
打开Vmware虚拟机的安装路径下的.vmx配置文件,我的电脑是:Windows 10 x64.vmx这个文件,然后添加如下两行配置:
debugStub.listen.guest64 = "TRUE"
debugStub.hideBreakpoints = "TRUE"
类似这样:
图片描述

配置windbg的调试环境:
图片描述
windbg的快捷方式中,目标:"C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\windbg.exe" -b -k com:pipe,port=\.\pipe\com_1,resets=0
图片描述
2.在Vmware中启动windows操作系统,待系统启动后管理员权限打开cmd,输入:
"bcdedit /bootdebug on" 开启winload.exe的启动项调试.
拷贝一份虚拟机中的ntoskrnl.exe文件至真是物理机,以备后用。
3.重新启虚拟机中的widnows,后开启windbg等待被中断。
4.此时windbg 断在 winload.exe进程中
5.windbg中加载内核模块符号表后,查找根据符号
OslArchTransferToKernel 函数地址 addr=0x0000000000aa5ce0。
如:键入命令:u OslArchTransferToKernel
图片描述
6.开启ida的gdb调试器,选择go后进入主界面。依次选择:Debugger->Attatch->Remote GDB debugger
图片描述
如果是64bit的一定选择port:8864
7.选择Debug option->Set specific options,配置Processor为:Intel X64如下:
图片描述
8.设置完毕后,会出现 下面的图示:图片描述
点击OK后,IDA成功attach到windows内核上。
9.设置IDA的内存映射。ida中主界面的Debugger->manual memory regions
进入下图所示界面:
图片描述
空白处,右键鼠标,选择insert,配置内存映射区域0-0xfffffffffffffffe
图片描述
点击确定。
10.此时gdb调试器的RIP也是在winload.exe的进程空间中
图片描述
11.ida中按G,输入windbg中获取到的
OslArchTransferToKernel 函数地址,在此函数末尾下断点。
图片描述
12.F9后,ida的gdb调试器就会执行到断点处。F7单步执行当执行完retfq指令后,就会进入KiSystemStartup函数的地址空间。
下面介绍如何让IDA加载系统符号,方便调试。IDA调试器必须要知道模块的基地址才能加载符号信息,所以我们需要找到目前内核nt模块的基地址。方法如下:
1.在本地重新打开一个IDA并加载从虚拟机中拷贝出来的内核nt模块,计算出nt!KiSystemStartup和模块基地址之间的偏移地址如:OFFSET = 0x98D010
2.这样ida gdb调试器中的nt!KiSystemStartup地址-OFFSET就是当前调试器中内核nt模块的基地址Base如:(FFFFF80768800000)
3.加载符号:IDA主界面选择File->LoadFile->PDB file
图片描述
图片描述
这时,我们可以看到符号信息已经加载正确,可以欢快的调试os的核心函数了。


[培训]内核驱动高级班,冲击BAT一流互联网大厂工 作,每周日13:00-18:00直播授课

收藏
点赞3
打赏
分享
最新回复 (1)
雪    币: 19773
活跃值: (29385)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
秋狝 2024-4-30 22:49
2
1
感谢分享
游客
登录 | 注册 方可回帖
返回