关于DEP(数据执行保护)的分析

几乎DEP(数据执行保护)的辨析

原文地址:

1。是什么DEP
DEP,全名是数据 Excution Protection,中高尚的数据执行保护,它是XP SP2,对WI2K03 SP1的内存保护,用于预先阻止恶意顺序袭击零碎,决胜投票等。
如今只要两种方法:
一、它只为SY的坩埚诉讼顺序和维修服务提议DEP保护。,这也默许选择。。
二、它是为所有些人顺序和维修服务提议DEP保护。,裁剪用户人工用手操作指定的的顺序。
它设置在我的计算者->右键卡特尔属性>中。 – 设置”->”数据执行保护”

你能保护什么?
人事栏关于,DEP是特意用来预先阻止决胜投票的。,自然大约窄。,归根到底,这种机制改良了CPU的内存办理机制。。在每个i先于检测内存页属性大约太贵了。。
总之,DEP使指定的的内存页缺勤执行的属性。
这样一来,以防指定的栈放置的内存页不执行的,这样的,当笔者想在堆栈上额外的时期,笔者的Shellcode很难被处以死刑。
因而,DEP保护纪念,无法执行指定的内存上的加密保护,这样才能变卖反决胜投票的宾格的。。
自然,这是微软的一廂情愿。。由于协商刚过去的端过错一件困难的的事实。

三。你能在周围DEP吗?以防你能,你怎地四外漫步?
答案是必定的,可以在周围。甚至计算机硬件上的DEP保护也可以。。
有人家API,更改指定的内存页的属性,VirtualProtect(),自然,对立的事物API,如
VirtualProtectEx(),ZwProtectVirtulMemory(),但VirtualProtect都合上了。
因而,当笔者决胜投票时,设计归来地址作为API的地址,向外看组织堆栈来召唤API堆栈。,就可以
更改流畅堆栈内存页的属性,让它没有执行的到执行的。
刚过去的诉讼顺序的要求是上面的加密切断

_test proc
;push 04
;invoke VirtualProtect,esp,30h,PAGE_EXECUTE_READWRITE,esp
;pop eax
mov dword ptr [esp+18h],4
mov eax,esp
add eax,18h
mov dword ptr [esp+14h],eax;lpOldProtection
mov dword ptr [esp+10h],40h;dwNewProtection
mov dword ptr [esp+0ch],30h;dwRegionSize
mov dword ptr [esp+8],esp;dwStartAddress
mov dword ptr [科特雷耳电集尘器],VirtualProtect;func addr
mov eax,esp
add eax,1ch
mov dword ptr [esp+4],归来 address from VirtualProtect
mov dword ptr [esp+1ch],90909090h;our shellcode
ret
_test endp

4.DEP是怎样在内核中变卖的?
我未检出的很多时期来回复刚过去的问题。,从内存用手操作的API,
基准内存办理API,沉默寡言的人内存办理API,堆办理API,内存映照包装API
从内存办理的组织,有人家VAD,有人家PFN,有人家PTE,PDE,有段
开头,根据我所持的论点Windows可以在究竟哪个次序上表现一篇文字。,也许是VAD,它可能性是PFN。,它可能性是PTE。
根据我所持的论点VAD更有可能性。,由于PTE缺勤中间定位联的位位来提示喊出名字以寻找倘若具有Excel。。PFNNO。
VAD具有中间定位的位来表现喊出名字以寻找的执行的属性。。
表示保留或保存时用大批测得比分和移除,VAD的撞见与此无干。,用沉默寡言的人保护更改喊出名字以寻找的属性时,此页对应于
VAD的记号位缺勤变更。。
因而只要PFN和PTE离去,在撞见API召唤先于和后头的,PFN的restore 刚过去的在实地工作的有人家变更,PTE低双字
稍许的变更,我不重要的当谈话高,我一向以为高双字是用来下令赋予形体的。。
过后我人工用手操作设置PFN的回复 PTE对前述的API值的更改,但比分使成为一体绝望。,我使再次发生成去壳码
喊出名字以寻找依然无法执行。。
怨恨这时,我还缺勤对某人找岔子PTE的双重安排的使适应。,并以此开支估价,这是一天两天的沉默寡言的人保护
中间定位API的Disassembler。
VirtualProtect()召唤了VirtualProtectEx()
VirtualProtectEx()召唤了ZwProtectVirtualMemory()
ZwProtectVirtualMemory()经过sysenter进入内核,记忆在EAX中间的维修服务号是0x89.,符合的的维修服务是NtProtecVirtualMemory
NtProtectVirtualMemory()又召唤了MiProtectVirtualMemory()
在MiProtectVirtualMemory()内政,计算内存页的PTE地址以更改其属性,新的属性,过后打电话给
MiFlushTbAndCapture()使适应PTE的属性,纵然我当初也不管到什么程度主教权限把PTE的属性从067成了英雄了027,和执行的属性或
缺勤相干,过后我再次进入MiFlushTbAndCapture(),撞见它次要召唤KeFlushSingleTb()来更改指定的的
的属性的,深化KiFurSuthListb,它次要是召唤KeInterlockedSwapPte()来使适应指定的PTE的属性。
而且KeTnLoCKDWSWAPTE()的内政对立复杂。,看一眼它的冲下······加密:

nt!KeInterlockedSwapPte:
80541c08 53 push ebx
80541c09 56 push esi
80541c0a 8b5c2410 mov ebx,dword ptr [esp+10h] EBX中新PTE值的变量的地址
80541c0e 8b74240c mov esi,dword ptr [esp+0Ch] ;esi=PTE地址
80541c12 8b4b04 mov ecx,dword ptr [ebx+4] 新的PTE值高双字
80541c15 8b1b mov ebx,dword ptr [EBX] 新的PTE值低双字
80541c17 8b5604 mov edx,dword ptr [esi+4] 旧的PTE值高双字
80541c1a 8b06 mov eax,dword ptr [ESI ] 旧PTE值低双字
80541c1c 0fc70e cmpxchg8b qword ptr [ESI ]

主教权限坩埚点,这是人家CMPXCH8B操作指南的,这是什么提示?
执行的用手操作:edx,EAX与DST的比较地
以防 (EDX),EAX)(DST)
则 ZF=1,(DST)<-(ecx,ebx)
另外 ZF=0,(EDX),EAX)<-dst
很复杂,以防新的PTE属性和旧的,将PTE属性设置为新属性。以防相当,它在世界上接近缺勤用手操作。。
我从喂找到的,他把PTE的高双字设置为0。,前人家值是0x800万。
因而,DEP是经过PTE的高双字的黄金时代bit即bit63来变卖的,此杆已飞落。,提示此页过错执行的的。。缺勤置位,
提示此页可以被执行。。Win 2K下只要32位页和页表项。,从此处不成能提议DEP的保护位。,从此处
DEP可是在64位PTE上变卖。只要当启用了PAE时,CR4的BIT5才被启用。,PTE是64位。
因而,你可以这样的说,智能的快速做某事CPU是一种青年时期的PAE属性,遭受64位的页表项,Windows零碎
只要人家版本的Wi2K,Win XP和Win 2003的稍许地维修服役 内核的包版本遭受64页表项。
不管怎样,PTE的第六十三位把持PAG的执行的属性。,我后头昂首看了看。,在IA的修正中,只提这稍许的,并
召唤此位Exb,但刚过去的杆的功能是。
纵然笔者不克不及限制PTE,因而,在周围DEP静静地有能力的return-to-lib的传统的方法归来到VirtualProtect()
更改流畅堆栈的属性。

发表评论

电子邮件地址不会被公开。 必填项已用*标注