WinDBG从Ring3到Ring0跟踪CreateFileW的执行流程

来源:互联网 发布:合肥市行知学校怎么样 编辑:程序博客网 时间:2024/05/16 13:42

本次跟踪的系统版本:

调试机(宿主机):WIN7 64位旗舰版

目标机(虚拟机):WIN7 32位旗舰版


1、在虚拟机里打开一个记事本,然后Ctrl+Break中断操作系统


2、在WinDBG中输入!process 0 0 notepad.exe查看记事本进程信息


3、在WinDBG中输入.process /i /p 进程内核对象地址,在本例中则应该输入.process /i /p 867b2030强制切换到目标进程。WinDBG显示继续执行需要输入g,输入g,回车


4、在WinDBG中输入.reload /f /user重载用户层模块符号,此步依据个人WinDBG的符号表下载不同而可能可以省略,有时不重载会出错,本次实验略过此步


5、输入bp kernel32!CreateFileW,回车,再输入g,再次回车


6、输入t,回车


7、输入u kernel32!CreateFileW l100,回车


8、找到call esi的地址,在此地址下断点,输入bp 75afaa1f


9、输入g,执行到call esi处


10、输入t,回车


11、输入u ntdll!NtCreateFile l30,记下mov eax,42h中的42,这是快速系统调用的调用号


12、单步t执行进入call dword ptr [edx]


13、输入u ntdll!KiFastSystemCall l6


14、单步t一下来到快速系统调用sysenter指令地址处


15、因为syscenter是一条汇编指令,执行后会直接往下执行别的指令,所以我们如果想切换到Ring0层的话,就要直接读取特殊模块寄存器SYSENTER_EIP_MSR,输入rdmsr 176,回车

16、下条件断点,输入bp 84036750 ".if (@eax & 0x0`ffffffff)=0x0`42 {} .else {gc}"(42是前面让记下的调用号)


17、输入g,回车


18、输入u nt!KiFastCallEntry l70


19、找到call ebx,在此地址处下断点


20、输入g,断在此处


21、输入t,进入call ebx


22、输入u nt!NtCreateFile l40,这就是CreateFileW经过层层调用最终会到达Ring0层调用内核函数NtCreateFile的过程




0 0