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的过程
- WinDBG从Ring3到Ring0跟踪CreateFileW的执行流程
- 跟踪 Ring3 - Ring0 的执行流程
- 从进程到内核---ring3到ring0
- Ring3转入Ring0跟踪
- 关于ring3到ring0的代码实现
- 特权级--ring0到ring3
- 特权级--ring3到ring0
- 特权级--ring0到ring3
- 特权级--ring3到ring0
- 特权级--ring0到ring3
- ring3到ring0的过渡----rootkit最基本驱动
- ring0调用Ring3的代码
- ring3与ring0的通信
- ring0和ring3的区别
- ring3与ring0的通信
- 用Delphi在2000和XP/2003下从Ring3进入Ring0的无驱动解决方法
- 在ring0调用Ring3的代码
- RING0 与 RING3之间的简单交互
- Codeforces Round #310
- zzuli OJ 1089: 阶乘的最高位
- 黑马程序员——Html
- 在游历中长见识
- vi & vim 移动 光标 滚动 屏幕
- WinDBG从Ring3到Ring0跟踪CreateFileW的执行流程
- 安装CentOS的教训_安装Linux到移动硬盘
- Android开发:使用DDMS Heap进行内存泄露调试
- iOS分发工具-- testFlight,Pre.im与蒲公英
- Linux 常用命令
- 使用NFSv3将HDFS挂载到本地
- Android的内存机制和常见泄漏情形
- Unable to execute dex: Multiple dex files define
- Kafka设计解析(三)- Kafka High Availability (下)