- 博客(8)
- 资源 (3)
- 收藏
- 关注
原创 APC机制
APC(Asynchronous Procedure Call)异步过程调用。NtQueueApcThread()这个系统调用把一个”用户APC请求”挂入目标线程的APC队列。KTHREAD数据结构中APCState指向线程的APC队列(用户APC和内核APC。 一般来说,只有把APC请求挂入队列,就不再需要触发,而只是等待执行的时机。对于用户APC请求,该时机同样也是目标线程从
2010-01-28 17:09:00 3034
原创 枚举进程
前面看到用PspCidTable可以枚举所有进程,今天又看到系统中有个全局变量PsActiveProcessHead保存所有进程。通过这个全局变量也可以枚举所有进程。当然这种方法的原理同EPROCESS遍历是一样的。PsActiveProcessHead队列其实是保存 EPROCESS->ActiveProcessLinks LIST_ENTRY数据结构的。 void DisplayL
2010-01-27 10:48:00 2484
原创 关闭其它进程的已打开对象
NtClose()只能关闭本进程的已打开对象,而关闭其他进程的已打开对象的方法: 打开目标进程; 调用NtDuplicateObject(),把参数Options中的标志位DUPLICATE_CLOSE_SOURCE设成1,并把参数TargetProcessHandle设成0. 用这种方法可不可以关闭杀软的进程呢?以后有时间了研究研究
2010-01-20 16:24:00 2275
原创 fs:[124]
反汇编内核函数的时候经常会看到mov eax, fs:[124].一直没弄清楚fs寄存器在ring0存放的是什么。今天查了下资料。 fs寄存器在Ring0中指向一个称为KPCR的数据结构,即FS段的起点与KPCR结构对齐。而在Ring0中fs寄存器一般为0x30。 这样看KPCR的数据结构: nt!_KPCR +0x000 NtTib :
2010-01-20 15:42:00 3680
原创 《Windows内核情景分析》常用内核函数
1.ObReferenceObjectByHandle() Handle->Object的过程。具体的查找过程是由ExpLookupHandleTableEntry函数实现的。具体过程(bla bla一堆)还是看别人的吧。http://www.debugman.com/read.php?tid=830&page=1&toread=1 2. ObReferenceObjectByName
2010-01-15 16:22:00 2465
原创 《Windows内核情景分析》对象管理
对象的数据结构都是由对象头和具体对象类型的数据结构两部分组成。对象头OBJECT_HEADER在下,它的上方是具体对象类型的数据结构本身。 nt!_OBJECT_HEADER +0x000 PointerCount : Int4B +0x004 HandleCount : Int4B +0x004 NextToFree : Pt
2010-01-13 20:08:00 2275
原创 《Windows内核情景分析》系统空间缓冲区管理
用户空间是从“堆(heap)”分配缓冲区的,内核中是从“池(pool)”中分配的。 用户空间的堆是属于进程的,而内核中的池则是全局的,属于整个系统。内核中池有两种:PagedPool,所占页面可以倒换的,NonPagedPool,所占页面是不可倒换的,每个页面都占着物理内存。 ntdll!_POOL_TYPE NonPagedPool = 0 PagedPo
2010-01-11 20:11:00 2684
原创 《Windows内核情景分析》内存区间的动态分配
物理页面是以PHYSICAL_PAGE代表的。MmPageArray指向PHYSICAL_PAGE的数组(MS是在ReactOS中是这样,真正Windows内核找不到PHYSICAL_PAGE结构,不知道是未公开还是策略不一样) 物理内存有三种 1.已分配的内存队列:存放正在被使用的内存 2.待清理的内存队列:存放已被释放的内存,但是这些内存未被清零 3.空闲队列
2010-01-08 10:57:00 2710
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人