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:88647.选择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 = 0x98D0102.这样ida gdb调试器中的nt!KiSystemStartup地址-OFFSET就是当前调试器中内核nt模块的基地址Base如:(FFFFF80768800000)3.加载符号:IDA主界面选择File->LoadFile->PDB file 这时,我们可以看到符号信息已经加载正确,可以欢快的调试os的核心函数了。
阿里云助力开发者!2核2G 3M带宽不限流量!6.18限时价,开 发者可享99元/年,续费同价!