LyShark

信息安全知识分享平台

在上一篇文章`《驱动开发内核中实现Dump进程转储》`中我们实现了ARK工具的转存功能,本篇文章继续以内存为出发点介绍`VAD`结构,该结构的全程是`VirtualAddressDescriptor`即`虚拟地址描述符`,VAD是一个`AVL`自`平衡二叉树`,树的每一个节点代表一段虚拟地址空间。程序中的代码段,数据段,堆段都会各种占用一个或多个`VAD`节点,由一个`MMVAD`结构完整描述。

阅读全文 »

在进程的`_EPROCESS`中有一个`_RTL_AVL_TREE`类型的`VadRoot`成员,它是一个存放进程内存块的二叉树结构,如果我们找到了这个二叉树中我们想要隐藏的内存,直接将这个内存在二叉树中`抹去`,其实是让上一个节点的`EndingVpn`指向下个节点的`EndingVpn`,类似于摘链隐藏进程,就可以达到隐藏的效果。VadRoot成员是一个指向二叉树结构的指针,用于存储一个进程的虚拟地址描述符(VAD)对象。每个VAD对象描述了进程的一段虚拟地址空间。VAD对象的起始地址和结束地址都是按照一定顺序组成的二叉树结构来管理的,以便于快速地查找和操作。

阅读全文 »

多数ARK反内核工具中都存在驱动级别的内存转存功能,该功能可以将应用层中运行进程的内存镜像转存到特定目录下,内存转存功能在应对加壳程序的分析尤为重要,当进程在内存中解码后,我们可以很容易的将内存镜像导出,从而更好的对样本进行分析,当然某些加密壳可能无效但绝大多数情况下是可以被转存的。

阅读全文 »

DKOM(Direct Kernel Object Manipulation,直接内核对象操作)是一种攻击技术,它可以通过直接访问操作系统内核对象,实现对系统的控制和操纵。在这种攻击中,攻击者可以使用一些技巧来隐藏自己的驱动程序,从而使其难以被检测和清除。其中,一种常见的技巧就是在操作系统内核对象中隐藏进程信息,使进程在系统中不可见。在Windows操作系统中,每个进程都有一个EPROCESS结构和一个或多个ETHREAD结构,它们记录了有关进程和线程的重要信息。在实现进程隐藏时,攻击者可以直接访问系统的EPROCESS链表,并将某个进程的EPROCESS结构从链表中摘除。这样,该进程在系统中就不再可见,而操作系统的其他组件则不会注意到这个进程的存在。

阅读全文 »

当你需要在Windows操作系统中监控进程的启动和退出时,可以使用`PsSetCreateProcessNotifyRoutineEx`函数来创建一个`MyCreateProcessNotifyEx`回调函数,该回调函数将在每个进程的创建和退出时被调用。监控进程的启动与退出可以使用`PsSetCreateProcessNotifyRoutineEx`来创建回调,当新进程产生时,回调函数会被率先执行,然后执行我们自己的`MyCreateProcessNotifyEx`函数,并在内部进行打印输出。

阅读全文 »

在内核中,可以使用`ObRegisterCallbacks`这个内核回调函数来实现监控进程和线程对象操作。通过注册一个`OB_CALLBACK_REGISTRATION`回调结构体,可以指定所需的回调函数和回调的监控类型。这个回调结构体包含了回调函数和监控的对象类型,还有一个`Altitude`字段,用于指定回调函数的优先级。优先级越高的回调函数会先被调用,如果某个回调函数返回了一个非NULL值,后续的回调函数就不会被调用。

阅读全文 »

内核进程线程和模块是操作系统内核中非常重要的概念。它们是操作系统的核心部分,用于管理系统资源和处理系统请求。在驱动安全开发中,理解内核进程线程和模块的概念对于编写安全的内核驱动程序至关重要。内核进程是在操作系统内核中运行的程序。每个进程都有一个唯一的进程标识符(PID),它用于在系统中唯一地标识该进程。在内核中,进程被表示为一个进程控制块(PCB),它包含有关进程的信息,如进程状态、优先级、内存使用情况等。枚举进程可以让我们获取当前系统中所有正在运行的进程的PID和其他有用的信息,以便我们可以监视和管理系统中的进程。

阅读全文 »

在内核开发中,经常需要进行进程和句柄之间的互相转换。进程通常由一个唯一的进程标识符(PID)来标识,而句柄是指对内核对象的引用。在Windows内核中,`EProcess`结构表示一个进程,而HANDLE是一个句柄。为了实现进程与句柄之间的转换,我们需要使用一些内核函数。对于进程PID和句柄的互相转换,可以使用函数如`OpenProcess`和`GetProcessId`。OpenProcess函数接受一个PID作为参数,并返回一个句柄。GetProcessId函数接受一个句柄作为参数,并返回该进程的PID。

阅读全文 »

在笔者上一篇文章`《驱动开发:内核枚举SSDT表基址》`实现了针对`SSDT`表的枚举功能,本章继续实现对`SSSDT`表的枚举,`ShadowSSDT`中文名`影子系统服务描述表`,SSSDT其主要的作用是管理系统中的图形化界面,其`Win32`子系统的内核实现是`Win32k.sys`驱动,属于GUI线程的一部分,其自身没有导出表,枚举`SSSDT`表其与`SSDT`原理基本一致。

阅读全文 »

在SSDT枚举篇的第一部分,我们将介绍如何枚举SSDT表。我们将详细介绍如何在内核中定位SSDT表、如何遍历SSDT表中的每个系统API函数、以及如何获取这些函数的地址和相关信息。我们还将提供实例演示,帮助读者更好地理解这些技术的实现方法和步骤。通过本文,读者将了解如何在内核驱动程序中实现对SSDT表和SSSDT表的枚举,以及如何利用这些表来实现驱动保护和系统监控。我们将提供详细的示例代码和实例演示,帮助读者更好地理解这些技术的实现方法和步骤。

阅读全文 »