滴水中级
老白_
这个作者很懒,什么都没留下…
展开
-
页帧的寻找
一、内核对物理内存的管理(MmPfnDatabase)Windows通过几个全局变量来对物理内存进行管理:MmPfnDatabase,页帧数据库(也叫FPN数据库),是MMPFN结构体类型的数组,它的索引是物理地址页帧号。1: kd> dq mmpfndatabasefffff800`04119228 fffffa80`00000000 000001f4`00000040fffff800`04119238 00000000`00000390 00000000`00000000f..原创 2022-03-30 21:07:52 · 940 阅读 · 1 评论 -
30.枚举进程线程对象回调
技术分享 - 枚举并删除系统上ObRegisterCallbacks回调 (write-bug.com)原创 2021-09-15 21:01:25 · 210 阅读 · 0 评论 -
29.消息队列
1.系统共有两种进程,一种是SSDT进程,另一个是SSDT_Shadow2.SSDT函数在ntoskrnl.exe里,SSDT_Shadow函数在win32k.sys里3.凡是调用过win32k.sys里的函数,内核就会分配一个消息机制,在kthread.win32thread,这个指针指向消息队列的结构体...原创 2021-08-09 11:27:30 · 139 阅读 · 0 评论 -
28.探秘_OBJECT_TYPE结构
首先,每个进程/线程对象上面都有个_OBJECT_HEADER结构,而句柄结构在这个结构的后面,64位下这个结构大小为0X30以进程结构体举例:nt!_OBJECT_HEADER +0x000 PointerCount : Int8B +0x008 HandleCount : Int8B +0x008 NextToFree : Ptr64 Void +0x010 Lock : _EX_PUSH_LOCK +0x018 T原创 2021-08-03 16:20:41 · 1528 阅读 · 0 评论 -
26.全局句柄表PspCidTable
https://www.cnblogs.com/kuangke/p/5761615.html原创 2021-07-22 00:04:21 · 924 阅读 · 0 评论 -
25.句柄表
32位参考:https://blog.csdn.net/Kwansy/article/details/10980172264位一级句柄表原创 2021-07-21 16:32:52 · 634 阅读 · 0 评论 -
24.自旋锁
自旋锁防止重入,简单说就是排队,必须等上一个请求执行完,下一个请求才能执行。//初始化自旋锁KSPIN_LOCK SpinLock;KeInitializeSpinLock(&SpinLock)//上锁KIRQL OldIrql;KeAcquireSpinLock(&SpinLock,&OldIrql)//解锁...原创 2021-04-16 16:50:15 · 151 阅读 · 0 评论 -
23.IRQL中断
一丶IRQL1.了解什么是中断中断就是产生的一个电信号.比如键盘.当按下就会产生电信号发送给CPU而CPU就会停止当前处理.去执行电信号.他是根据IRQL中断级别来进行处理的.如下图:中断说白了就是个电信号.打断CPU执行的代码. 去调用中断处理函数.此时CPU就处于硬件上下文.2.IROL中断级别.因为会产生很多CPU电信号.所有硬件同是发送中断处理级别怎么办.所以需要为这些级别分一个优先级. CPU会先执行优先级高的.会把优先级低的给屏蔽掉.当CPU处于中断上下文的时候.原创 2021-04-14 10:53:39 · 368 阅读 · 0 评论 -
22.驱动编程
https://blog.csdn.net/kwansy/category_10411796_2.html有基础不用看了原创 2021-04-14 10:12:26 · 129 阅读 · 0 评论 -
21.控制寄存器(CR0-CR4)
https://blog.csdn.net/Kwansy/article/details/109018064原创 2021-04-10 21:40:06 · 736 阅读 · 0 评论 -
20.TLB
https://blog.csdn.net/Kwansy/article/details/108997249原创 2021-04-07 22:30:28 · 165 阅读 · 0 评论 -
19.x64下算出PTE
X64下用的是9-9-9-9-12的分页模式,PML4E-PDPTE-PDE-PTE-偏移,线性地址的前16位是作符号扩展,后48位是分页模式.1.PTE是直接指向物理内存的,X86下有个固定的页目录表0xc0000000可得到所有地址信息,X64下为了安全起见,页目录表随机了,文章末有分析如何得到。一、PTE的算法:1.已一个线性地址为例0xfffffa801a628b30,下面先拆分 PML4E:1111 1010 1 1F5PDPTE:000 000...原创 2021-04-05 23:38:36 · 1383 阅读 · 2 评论 -
18.9-9-9-9-12分页
https://www.cnblogs.com/lanrenxinxin/p/4735027.htmllPML4E接着再看PML4E的结构,如图:PML4E并没有PS标志位,因此第7位是保留的,而PML4E提供的PDPT的物理基地址也受之前的MAXPHYADDR规则的约束。lPDPTE然后就是PDPTE结构:由于新增了1G 页面,因此在PDPTE结构里将控制1G的页面转化,由PDPTE.PS标志位进行转换,如图:当PDPTE.PS=1,也就是...原创 2021-04-01 23:15:56 · 305 阅读 · 0 评论 -
17.2-9-9-12分页
https://blog.csdn.net/Kwansy/article/details/108956971原创 2021-03-29 16:06:42 · 211 阅读 · 0 评论 -
16.页目录表基址
111原创 2021-03-28 22:47:38 · 244 阅读 · 0 评论 -
15.PDE和PTE属性
一、PDE PTE 结构低12位是权限位。低1位是P位,P=1代表有效,P=0代表无效低2位是RW位,RW=0表示只读,RW=1表示可读可写。二、修改常量区数据C语言中,修改常量区的字符串是不允许的,原因是物理页不具有写权限。按10-10-12模式拆好了线性地址,现在只要在windbg中找到PDE和PTE,将低2位改成1即可。0x4158181 (1*4)0000010101 (0x15*4)100000011000 (0x818)...原创 2021-03-12 13:15:10 · 1584 阅读 · 0 评论 -
11.任务段及任务门
了解三个概念:1.TSS任务段,共104字节,位于内存中2.TR段寄存器,共96位,位于CPU内3.TSS段描述符,位于GDT表TSS(Task-state segment)是一块104字节的内存,用于存储大部分寄存器的值;TSS设计出来的目的是任务切换,或者说是一次性替换一大堆寄存器。TR寄存器存储了TSS的地址,大小,和TSS门描述符选择子;TSS描述符是GDT表中的一项,操作系统启动时,从门描述符取值初始化TR寄存器。...原创 2021-03-22 15:34:43 · 251 阅读 · 0 评论 -
14.修改 PTE 实现挂物理页读写空指针
一、10-10-12二级映射下图是101012二级映射结构:CR3寄存器存放物理地址,指向的是页目录表(PDT)页目录表(PDT)大小是4KB=4096字节,每个成员(PDE)占4字节,所以共有1024个PDE指向页表(PTE),PTE指向物理页PDE和PTE后六位都是属性PTE特征:1.可以不指向物理页2.多个PTE可以指向同一个物理页3.一个PTE只能指向一个物理页二、读写NULL指针正常编程中,不能读写NULL,原因是NULL指针没有对应的物理页.转载 2021-03-09 20:32:21 · 446 阅读 · 0 评论 -
13.10-10-12分页
一、概念铺垫mov eax,dword ptr ds:[0x12345678]上面这条mov指令中,0x12345678 是有效地址,ds.base+0x12345678是线性地址。每个进程都拥有“4GB”地址空间,这4GB实际上并不存在,数据真正存储在“物理地址”中。在10-10-12分页模式下,一个线性地址分为3部分:二、设置系统分页模式为10-10-12模式将boot.ini文件中的启动参数,noexecute改成execute。如图:...原创 2021-03-09 14:03:32 · 430 阅读 · 0 评论 -
10.陷阱门
一、陷阱门8-12:1111(F)32位下,中断门是0xE,陷阱门是0xF。使用上也没什么区别,除了一点:中断门会将IF位置0,而陷阱门不会。IF置0表示不响应可屏蔽中断,IF置1表示响应可屏蔽中断。IF对不可屏蔽中断无影响。键盘输入就是可屏蔽中断,按电源键就是不可屏蔽中断。...原创 2021-03-08 21:43:06 · 132 阅读 · 0 评论 -
9.中断门
1.IDT2.IDT构成3.中断门描述符Offset低四字节 0-15 和高四字节 16-31 =32位代码段偏移地址地址Seletor:代码段选择子 (16-31)0-7:为08-12:1110代表为中断门P:1 代表描述符有效DPL:3...原创 2021-03-08 20:28:27 · 106 阅读 · 0 评论 -
8.调用门
调用门提权,在R3实现R0的权限。一、调用门的执行流程满足以下条件的描述符才是调用门1. S=0 必须是系统段2.TYPE 是1100的样式调用门的选择子是低四字节的16-31位调用门的(高16-31位)+(低0-15位)+(调用门的选择子的BASE)=真正执行的地址...原创 2021-03-04 20:55:50 · 262 阅读 · 1 评论 -
7.跨段跳转,短调用和长调用堆栈图
一、回顾上一节,我们学习了 JMP FAR 实现段间跳转,该指令修改了 CS 和 EIP。本节我们学习长调用 CALL FAR,该指令除了修改 CS和EIP,还会修改堆栈。二、CALL 堆栈图学习长调用之前,不妨先回顾一下短调用CALL的堆栈图:三、长调用CALL FAR 和 RETF 一般是成对的,RETF 的执行流程(权限控制)和 CALL FAR 是一样的CALL FAR 不提权3环跳转到另一个3环代码段,不会切换堆栈。CALL FAR 提权从3环跳转到0环,此原创 2021-03-03 15:35:44 · 274 阅读 · 0 评论 -
6.JMP FAR段间跳转(长跳)
一、知识点回顾在前面的课程中我们学习了MOV和LES等修改段寄存器的指令,当时老师说过,CS寄存器比较特殊,不能用MOV和"LCS"进行修改,原因是CS和EIP共同决定下一条指令的地址,要修改CS,就必须同时修改EIP,这也是X86没有提供"LCS"指令的原因。...原创 2021-03-02 16:48:30 · 1352 阅读 · 0 评论 -
5.段权限检查
一.CPL:当前特权级用途:可根据CPL的值得知当前程序处于哪一环cs/ss段寄存器段选择子的低两位是CPL (cs和ss的后两位永远一致)1.如何查看程序处于几环cs/ss后两位=0代表当前运行在0环cs/ss后两位=3代表当前运行在3环二.数据段权限检查DPL是段描述符的权限属性,要想访问一个段描述符数据段,段选择子和CPU当前权限必须高于或等于DPL。要注意,权限数值越低,权限越高,比如我们常说的0环,就是权限最高的。RPL:段选择子的权限DPL:段描述符的权限..原创 2021-03-02 14:13:05 · 208 阅读 · 0 评论 -
4.段描述符 D/B位
这节的内容不太重要,记录下来,证明自己学过,以后遇见了不慌。D/B位对不同的段寄存器影响也不同,所以分别讨论。对DS,ES等数据段:D=1,段上限为4GBD=0,段上限为64KB对SS段:D=1,使用32位堆栈指针寄存器;D=0,使用16位堆栈指针寄存器.对CS段:D=1,采用32位寻址方式;D=0,采用16位寻址方式。...原创 2021-03-01 22:16:49 · 287 阅读 · 0 评论 -
3.段寄存器S位和TYPE位
系统进入段描述符首先判断P位,P位值为1 段描述符有效,值为0段描述符无效,若有效再判断S位;1.S位S=1代表该段描述符数据为代码段/数据段S=0则为系统段2.TYPE域大小:1字节/4位TYPE根据S位的值不同分3种情况最高位(图11位):最高位为0则为数据段,最高位为1则为代码段(技巧,type>=8则为代码段)当S=1,且TYPE<8时,处于数据段{A位(图8位):A=0 该描述符未被访问,A=1代表访问过W位(图9位):W=0该描...原创 2021-03-01 21:27:37 · 792 阅读 · 0 评论 -
2.GDT全局描述符表,段描述符P,G位,段寄存器结构体的理解
WINDOWS只有了GDT表gdtr是寄存器,共48位, 里面包含了GDT表的地址(32位)和大小(16位)WINDBG :r是查看寄存器指令{r gdtr:查看GDT表地址r gdtl:查看GDT表大小}2.段描述符P位:值为1-段描述符有效,值为0段描述符无效G位:值为0 Limit高12位是0,值为1 Limit低12位为FFF3.段选择子(段寄存器里的Selector成员)总结:段寄存器是96位由以下结构组成{...原创 2021-02-25 21:03:57 · 1221 阅读 · 0 评论 -
1.段寄存器
1.段寄存器有96位,可见部分为16位,图中的Selector成员原创 2021-02-25 11:15:53 · 525 阅读 · 0 评论