奉劝各位洁身自好,技术再好,钱再多,身体不行了都是白搭,不要跟我一样,等到现在才来后悔
技术?我好的一逼,可以说国内C++比我厉害的屈指可数
金钱?我大把的,可以说国内程序员比我有钱的基本没有,奈何染上了HIV,既然没有生的希望,那就把技术传给你们把,身虽死,技术尚存!
一、保护模式
1.1.双机调试
1.添加debug调试模式
虚拟机下载补丁安装vmwaretool
2.虚拟机设置
3.windbg
4.加载符号表
1.2.段选择子和段描述符
1.2.1.windbg
1.2.2.段选择子
ds:0023
1.2.3.段描述符
段描述符:00cff300`0000ffff
二进制:00000000 1100 1111 1 11 1 0011 00000000
P
S
Type
D/B
G
AVL和21位
1.2.4.RPL, DPL和CPL
权限
1.3.调用门
当段描述符的S标志位0,该描述符为系统描述符
调用门
Offset in Segment
Segment Selector
Param Count
调用门实验
1.vs2008属性修改
2.代码
打开DebugView,证明已经提权成功
3.windbg构建调用门描述符
4.堆栈变化
1.4.中断门
中断门描述符
中断门在idt表里面,构建一个类似int 3 功能的中断门描述符
代码
system("pause");
查看堆栈变化dds esp
中断门影响的Eflags位
1.5.劫持int 3
1.把idt表中int 3位置处的段选择子0008改为0048(找我们自己构建的段描述符)
2.构建gdt48位置的段描述符
4.代码
1.6.陷进门
陷进门描述符
构建陷进门
代码
}
2.TSS描述符
4.查看TSS结
构
1.8.任务门
1.任务门
16-31位是任务段的选择子
2.代码
4.修复cr3
1.9.101012分页
1.9.1.开启101012分页
1.打开EasyBCD工具 添加新条目--名称--添加新条目
高级设置-->开发-->勾上在内核调试模式下运行windows
2.kernel区分
1.9.2.拆分线性地址
1.用ce搜索记事本内本,得到线性地址0032E310
2.拆分线性地址
3.windbg查看物理地址
实验
1.9.3.PDT,PDE,PTT,PTE
物理页结构
1.10.零地址
实验目的:把A进程的物理页挂到B进程的0地址上,通过远程线程跑起来
实验目的:把A进程的物理页挂到B进程的0地址上,通过远程线程跑起来
system("pause");
3.挂物理页
把A进程的PTE挂到test进程的0地址
1.11.页属性
Figure 3-14. Format of Page-Directory and Page-Table Entries for 4-KByte Pages
and 32-Bit Physical Addresses
A
D
PS
G
全局页。当一个页被表明为全局,并且CR4中的启用全局页(PGE)标志被置位时,一旦CR3寄存器被 载入或者发生任务切换, TLB中的页表或者指向页的目录项并不失效。这个标志可以防止使TLB中频繁 使用的页失效
1.12页基址
1.分析MilsAddressValid函数
1.分析MilsAddressValid函数
2通过上面分析得出结论
MilsAddressValid函数只有一个参数,就是线性地址。 判断一个线性地址是否有效,分大页和不是大页两种情况
PDE的页基址位C0300000
#PDE计算
线性地址右移20位,然后and FFC PDE: C0300000+上面的结果
PTE的页基址位C0000000
#PTE计算
线性地址右移10位,然后and 3FFFFC
PDE: C0000000+上面的结果
3实验证明页基址,拿gdtr当线性地址80b93000
线性地址: 80b93000
用页基址的方式查找
دد ه اه د دا هادده حه ده اه دات دادهه د هه وهدود ده وددسد
1.13.29912分页
1.13.1拆分线性地址
1·用ce搜索记事本内本,得到线性地址002244E8
2拆分线性地址
1.13.2.页基址
分析MilsAddressValid函数
.text:00483F2A;stdcall MiIsAddressValid(x, x)
.text:004B3FB1 MiIsAddressValid@8 endp
هه -
1.13.3页属性
Figure 4-7. Formats of CR3 and Paging-Structure Entries with PAE Paging
1.14缓存
1.WC,WB,WT
2.PAT, PCD,PWT
PAT(Page Attribute Table)
PAT(Page Attribute Table)
1.15.TLB
验证TLB的存在
实验
pushfd; push 0x30; pop fs;
CR2
保存出现异常的线性地址
CR0
CR4