五.Windows内核保护机制--调用门

一.如何识别门描述符:

门描述符是什么? 从一个房间进入到另一个房间时,我们就需要经过一扇门,从用户的2G空间,进入到内核的2G空间,我们也需要经过一扇门.

当S位=1  Type位为1100的时候  

这个描述符,是一个门描述符:

 二.门描述符有什么特点是区别于其他描述符的:

  1.普通代码中,CPU要执行的代码地址为EIP所存储的地址,而在门中,将要被执行的代码地址是由Base(新地址的段选择子)+offset31:16+offset:15:0组成的.

CALL CS:EIP(此时的EIP并没什么卵用,凑个数...)

_asm

{

  CALL fword prt[0x48:12345678]

}

当代码执行后,CPU会按照CS的段选择子0x0048,取查找GDT表,之所以选择这个位置,是因为在GDT表中,此位置一直为空,方便我们改写.

0000(offset1)  ec00`0008  0000(offset2)

       

两个offset组成的地址,就是中断门要跳去的真实EIP

P位要为1,DPL要为3(因为代码运行时你还处于R3层),因此1110组成了e

TYPE 1100 是调用门的标志,所以组成了c

后面跟的是0000

最后的ParamCount是要传的参数,没有的时候就些了0

到此ec00 组合完毕

Segment Selector是新的段选择子,根据需要填写,如果想提权的话RPL就需要置0

随便写了一个 0008

(由于Windows系统本身并没有使用调用门,而其本身我也不是很喜欢用,所以测试代码也懒得写了...因此只是写了一个模型,offset和Index写的都是0)

0000ec00`00080000   就是这么来的.

猜你喜欢

转载自www.cnblogs.com/jszyx/p/12416161.html
今日推荐