-
-
Windows内核-保护模式(一)
-
发表于:
2022-8-10 01:39
9452
-
1.添加debug调试模式
2.虚拟机设置
\\.\pipe\com1
3.windbg
-y SRV*D:\mysymbol*http://msdl.microsoft.com/download/symbols -b -k com:port=\\.\pipe\com1,baud=115200,pipe
4.加载符号表
ds:0023
段描述符:00cff300`0000ffff
二进制:00000000 1100 1111 1 11 1 0011 00000000
P
S
Type
D/B
G
AVL和21位
权限
当段描述符的S标志位0,该描述符为系统描述符
调用门
Offset in Segment
函数的逻辑地址
Segment Selector
目标代码段的段选择子(提权)
Param Count
参数个数
调用门实验
1.vs2008属性修改
2.代码
打开DebugView,证明已经提权成功
3.windbg构建调用门描述符
4.堆栈变化
中断门描述符
中断门在idt表里面,构建一个类似int 3 功能的中断门描述符
代码
查看堆栈变化dds esp
中断门影响的Eflags位
1.把idt表中int 3位置处的段选择子0008改为0048(找我们自己构建的段描述符)
2.构建gdt48位置的段描述符
3.DbgPrint的地址
4.代码
陷进门描述符
构建陷进门
代码
中断门影响的Eflags位
1.TSS
2.TSS描述符
3.操作系统默认的tr为28
4.查看TSS结构
Previous Task Link
存放的是上一个任务的段选择子
5.在gdt表48位置构建任务段
6.代码
7.手动修复cr3,使程序能正常返回。执行到打印TSS地址那里,然后进windbg手动修复cr3
任务门
16-31位是任务段的选择子
代码
构建任务门和调用门
修复cr3
1.打开EasyBCD工具
添加新条目--名称--添加新条目
高级设置-->高级-->PAE改为禁用
,不执行改为常关
高级设置-->开发-->勾上在内核调试模式下运行windows
2.kernel区分
1.用ce搜索记事本内本,得到线性地址0032E310
2.拆分线性地址
3.windbg查看物理地址
实验
物理页结构
实验目的:把A进程的物理页挂到B进程的0地址上,通过远程线程跑起来
1.0地址执行代码.cpp
2.test.cpp
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
最后于 2022-8-11 16:36
被zhang_derek编辑
,原因: