操作系统 实验2 windbg双机调试+系统调用过程

1.配置windbg双机调试环境,给出关键步骤及最终成功断下的截图。
1).在安装好的win7虚拟机设置中,添加一个串行端口,并选择输出到命名管道,具体设置如图。

操作系统 实验2 windbg双机调试+系统调用过程

这样设置之后,在后面的步骤中,主机便能通过这个管道与虚拟机相连进行双机调试。
2)在win7虚拟机中以管理员权限打开命令行并做以下设置

操作系统 实验2 windbg双机调试+系统调用过程

操作系统 实验2 windbg双机调试+系统调用过程

3)在本机里创建一个windbg的快捷方式,在目标一栏里加上以下代码
-b -k com:port=\.\pipe\com_1,baud=115200,pipe

4)打开xin7虚拟机,并选择调试模式,这时再打开本机的windbg,发现成功断下

操作系统 实验2 windbg双机调试+系统调用过程

这时被调试机就像死机,没有反应

在WinDbg中,kd> 多次输入g回车,直到变成Debuggee is running…时,被调试机就可以正常操作了。

2.观察windows系统调用过程,给出关键步骤截图。(可不限于课上所讲,只需选择任意一个系统调用过程,给出从应用层函数调用开始,到sysenter调用的分析过程。如有后继深入分析,考虑加分
1)虚拟机中运行记事本程序,在外部的windbg中使之断下:ctrl+break
2)搜索该进程信息,并转入该进程空间

操作系统 实验2 windbg双机调试+系统调用过程

用!process 0 0 notepad.exe命令查看记事本程序,查看到地址8792b030
使用非侵入式的切换进程空间 .process /i /p 0x8792b030 这个命令,切换后再g一次继续
这时再用!Process命令看看当前进程,的确切换到了notepad.exe
3)重载符号表

操作系统 实验2 windbg双机调试+系统调用过程

连的是CMCC的网,200k/s下载的好慢,中间等了一段时间

4)用bp命令在kernel32!CreateFileW这个函数处下断点,g执行到断点停下来

操作系统 实验2 windbg双机调试+系统调用过程

5)用u命令反汇编当前函数,加上l100的参数,显示100行

操作系统 实验2 windbg双机调试+系统调用过程

6)在75aea937地址处发现可疑的call

操作系统 实验2 windbg双机调试+系统调用过程

7)用bp命令在此处下断点,g执行到这个call处

操作系统 实验2 windbg双机调试+系统调用过程

8)单步t步入到call中,看到了ntdll!NtCreateFile,记住mov eax,42h中的42,是快速系统调用的调用号

操作系统 实验2 windbg双机调试+系统调用过程

9)u反汇编,目标是进入到打阴影的call

操作系统 实验2 windbg双机调试+系统调用过程

10)单步t执行3次,进入call,看到了ntdll!KiFastSystemCall

操作系统 实验2 windbg双机调试+系统调用过程

11)u反汇编一下,找到了int 2E

操作系统 实验2 windbg双机调试+系统调用过程

Ntdll.dll通过软件中断int 2Eh进入ntoskrnl.exe,就是通过中断门切换CPU特权级

12)单步t执行到 sysenter指令处

操作系统 实验2 windbg双机调试+系统调用过程

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

操作系统 实验2 windbg双机调试+系统调用过程

记录下 83c5b0c0

14)在这里下一个条件断点,并执行到断点处 42是第8步里记录下的调用号

操作系统 实验2 windbg双机调试+系统调用过程

15)u命令查看当前函数100行

操作系统 实验2 windbg双机调试+系统调用过程

操作系统 实验2 windbg双机调试+系统调用过程

找到call ebx,记录下地址83c5b1e8

16)bp在83c5b1e8处下断点,g执行到该断点

操作系统 实验2 windbg双机调试+系统调用过程

17)t命令进入call,再u反汇编当前函数100行

操作系统 实验2 windbg双机调试+系统调用过程

CreateFileW经过层层调用最终到达了Ring0层调用内核函数NtCreateFile