随笔分类 -  《Windows 内核安全编程技术实践》

摘要:监控进程的启动与退出可以使用 `PsSetCreateProcessNotifyRoutineEx` 来创建回调,当新进程产生时,回调函数会被率先执行,然后执行我们自己的`MyCreateProcessNotifyEx`函数,并在内部进行打印输出。 阅读全文
posted @ 2021-05-06 15:42 lyshark 阅读(804) 评论(0) 推荐(0) 编辑
摘要:监控进程对象和线程对象操作,可以使用`ObRegisterCallbacks`这个内核回调函数,通过回调我们可以实现保护calc.exe进程不被关闭,具体操作从`OperationInformation->Object`获得进程或线程的对象,然后再回调中判断是否是计算器,如果是就直接去掉`TERMINATE_PROCESS`或`TERMINATE_THREAD`权限即可。 阅读全文
posted @ 2020-06-14 19:59 lyshark 阅读(628) 评论(0) 推荐(0) 编辑
摘要:Windbg是Microsoft公司免费调试器调试集合中的GUI的调试器,支持Source和Assembly两种模式的调试。Windbg不仅可以调试应用程序,还可以进行Kernel Debug。结合Microsoft的Symbol Server,可以获取系统符号文件,便于应用程序和内核的调试。Windbg支持的平台包括X86、IA64、AMD64。 阅读全文
posted @ 2020-06-10 15:55 lyshark 阅读(1569) 评论(0) 推荐(0) 编辑
摘要:内核层与应用层之间的数据交互是必不可少的部分,只有内核中的参数可以传递给用户数据才有意义,一般驱动多数情况下会使用`SystemBuf`缓冲区进行通信,也可以直接使用网络套接字实现通信,如下将简单介绍通过SystemBuf实现的内核层与应用层通信机制。 阅读全文
posted @ 2020-04-13 10:06 lyshark 阅读(5990) 评论(1) 推荐(9) 编辑
摘要:无论在用户层还是内核层,操作文件的流程基本一致,除了在API函数上的区别(用户层调用用户层API,内核层调用内核API)以外其他基本一致,先讲解一下文件系统执行的流程。实现文件的监控呢,比如当文件被访问时自动触发回调,看如下代码实现方式。 阅读全文
posted @ 2019-11-01 14:53 lyshark 阅读(1395) 评论(0) 推荐(0) 编辑
摘要:内核枚举进程使用`PspCidTable` 这个未公开的函数,它能最大的好处是能得到进程的EPROCESS地址,由于是未公开的函数,所以我们需要变相的调用这个函数,通过`PsLookupProcessByProcessId`函数查到进程的EPROCESS,如果`PsLookupProcessByProcessId`返回失败,则证明此进程不存在,如果返回成功则把EPROCESS、PID、PPID、进程名等通过DbgPrint打印到屏幕上。 阅读全文
posted @ 2019-10-21 07:50 lyshark 阅读(4068) 评论(0) 推荐(0) 编辑
摘要:DKOM 就是直接内核对象操作技术,我们所有的操作都会被系统记录在内存中,而驱动进程隐藏的做旧就是操作进程的EPROCESS结构与线程的ETHREAD结构、链表,要实现进程的隐藏我们只需要将某个进程中的信息,在系统EPROCESS链表中摘除即可实现进程隐藏。 DKOM 隐藏进程的本质是操作EPROCESS结构体,EPROCESS结构体中包含了系统中的所有进程相关信息,还有很多指向其他结构的指针,首先我们可以通过WinDBG在内核调试模式下输入`dt_eprocess` 即可查看到当前的EPROCESS结构体的偏移信息,结构较多,但常用的就下面这几个。 阅读全文
posted @ 2019-10-11 14:38 lyshark 阅读(3681) 评论(0) 推荐(1) 编辑
摘要:在前面的章节`《X86驱动:挂接SSDT内核钩子》`我们通过代码的方式直接读取 `KeServiceDescriptorTable` 这个被导出的表结构从而可以直接读取到SSDT表的基址,而在Win64系统中 `KeServiceDescriptorTable` 这个表并没有被导出,所以我们必须手动搜索到它的地址。 阅读全文
posted @ 2019-10-09 09:23 lyshark 阅读(2387) 评论(0) 推荐(0) 编辑
摘要:驱动程序与应用程序的通信离不开派遣函数,派遣函数是Windows驱动编程中的重要概念,一般情况下驱动程序负责处理I/O特权请求,而大部分IO的处理请求是在派遣函数中处理的,当用户请求数据时,操作系统会提前处理好请求,并将其派遣到指定的内核函数中执行,接下来将详细说明派遣函数的使用并通过派遣函数读取Shadow SSDT中的内容。 阅读全文
posted @ 2019-09-23 09:05 lyshark 阅读(4122) 评论(0) 推荐(0) 编辑
摘要:SSDT 中文名称为系统服务描述符表,该表的作用是将Ring3应用层与Ring0内核层,两者的API函数连接起来,起到承上启下的作用,SSDT并不仅仅只包含一个庞大的地址索引表,它还包含着一些其它有用的信息,诸如地址索引的基址、服务函数个数等,SSDT 通过修改此表的函数地址可以对常用 Windows 函数进行内核级的Hook,从而实现对一些核心的系统动作进行过滤、监控的目的。 阅读全文
posted @ 2019-09-21 17:21 lyshark 阅读(1905) 评论(0) 推荐(0) 编辑
摘要:SSDT 中文名称为系统服务描述符表,该表的作用是将Ring3应用层与Ring0内核层,两者的API函数连接起来,起到承上启下的作用,SSDT并不仅仅只包含一个庞大的地址索引表,它还包含着一些其它有用的信息,诸如地址索引的基址、服务函数个数等,SSDT 通过修改此表的函数地址可以对常用 Windows 函数进行内核级的Hook,从而实现对一些核心的系统动作进行过滤、监控的目的,接下来将演示如何通过编写简单的驱动程序,来实现搜索 SSDT 函数的地址,并能够实现简单的内核 Hook 挂钩。 阅读全文
posted @ 2019-09-20 17:57 lyshark 阅读(2094) 评论(0) 推荐(0) 编辑
摘要:WinDBG 是在`windows`平台下,强大的用户态和内核态调试工具,相比较于`Visual Studio`它是一个轻量级的调试工具,所谓轻量级指的是它的安装文件大小较小,但是其调试功能却比VS更为强大,WinDBG由于是微软的产品所以能够调试`Windows`系统的内核,另外一个用途是可以用来分析`dump`数据,本笔记用于记录如何开启`Windows`系统内核调试功能,并使用`WinDBG`调试驱动。 阅读全文
posted @ 2019-09-19 10:09 lyshark 阅读(2969) 评论(0) 推荐(0) 编辑
摘要:Windows Driver Kit 是一种完全集成的驱动程序开发工具包,它包含 WinDDK 用于测试 Windows 驱动器的可靠性和稳定性,本次实验使用的是 WDK8.1 驱动开发工具包,该工具包支持 Windows 7到 Windows 10 系统的驱动开发。VS2013+WDK8.1 驱动开发环境的搭建我研究了很长时间今天总算搭建出来了,而且中途没有错误,这里就把搭建过程分享出来。 阅读全文
posted @ 2019-09-18 10:01 lyshark 阅读(6549) 评论(3) 推荐(1) 编辑


8951825 | 6896846
博客园 - 开发者的网上家园

点击右上角即可分享
微信分享提示