2009-2-5 0:30:56 阅读301 评论0 52009/02 Feb5
上面这个连接中的DEMO是比较完整软件,这里我把其中发IRP强制删除文件的部分抽出来了,
学习了下,顺便加点注释。这个程序比较简单,主要练习了两个点:
(1)模拟发送IRP
(2)使用内核事件对象同步IRP的执行
强制删除文件的思路很简单,把SECTION_OBJECT_POINTERS结构的DataSectionObject和ImageSectionObject两个域清空即可删除正在运行的文件。如果不清空就不能删除运行中的文件。正在运行的文件的这两个域值不为0而文件系统正在根据这两个域决定该文件是否可以删除。如果文件系统检测这两个值为0,就理解为文件没有被使用,可以删除。接下去,就是直接发IRP。
测试时,在C盘目录下放一个test.exe并执行,然后加载驱动即可。
强制删除文件功能在ForceDeleteFile中实现,DriverEntry中只需要简单调用即可。具体实现如下
2009-2-5 0:24:02 阅读141 评论0 52009/02 Feb5
标 题: 【原创】透过MmIsAddressValid看Windows分页机制
作 者: combojiang
时 间: 2008-03-16,00:53
链 接: http://bbs.pediy.com/showthread.php?t=61327
这两天在逆向分析MmIsAddressValid这个函数,学习了下PAE分页机制,并且也发现了一个问题。就是本机ntoskrnl中导出的MmIsA
2008-12-23 23:56:24 阅读362 评论0 232008/12 Dec23
windows xp sp3
lkd> dt _kpcr
nt!_KPCR
+0x000 NtTib : _NT_TIB
+0x01c SelfPcr : Ptr32 _KPCR
+0x020 Prcb : Ptr32 _KPRCB
+0x024 Irql : UChar
+0x028 IRR : Uint4B
+0x02c IrrActive : Uint4B
+0x030
2008-12-5 19:01:04 阅读262 评论0 52008/12 Dec5
在应用层想要动态嵌入其他进程内存空间,我们可以调用 CreateRemoteThread()
等相关函数来实现。那么在内核态想要动态嵌入其他进程内存空间又如何做呢?这时
我们需要调用一个未公开的内核函数 KeAttachProcess(),利用这个函数我们可以在
内核态实现将代码插入到其他进程地址空间中。下面是一段演示代码。
NTSTATUS PsLookupProcessByProcessId( IN ULONG ulProcId, OUT PEPROCESS * pEProcess);
VOID KeAttachProcess ( IN PEPROCESS pEProcess );
VOID KeDetachProcess ( VOID );
NTSTATUS KeSwitchProcess(ULONG uPID)
2008-12-5 18:58:57 阅读215 评论0 52008/12 Dec5
Windows对象 (Object) 结构
07月 4th, 2007 · 3 Comments
Windows系统的各种资源以对象(Object)的形式来组织,例如File Object, Driver Object, Device Object等等,但实际上这些所谓的“对象”在系统的对象管理器(Object Manager)看来只是完整对象的一个部分——对象实体(Object Body)。Windows XP中有31种不同类型的对象,Object Body反映了某一类型对象的特征信息,例如,文件对象使用FILE_OBJECT结构描述、驱动对象使用DRIVER_OBJECT结构描述、DEVICE_OBJECT用于描述设备对象等等。而各种Object的共有的信息(例如,对象类型、对象的引用计数、句柄数等信息)保存在OBJECT_HEADER与其他的几个结构中。换而言之,在