文档详情

Windows 内核级进程隐藏、侦测技术 .pdf

发布:2024-11-21约2.83千字共7页下载文档
文本预览下载声明

Windows内核级进程隐藏、侦测技术

Windowsxx内核级进程隐藏、侦测技术

信息对抗是目前发展的一个重要的方向,为了更好的防御,必须去

深入的了解敌人进攻的招式。信息对抗促使信息技术飞速的发展。

下面我选取了信息对抗技术的中一个很小一角关于windows内核级

病毒隐藏技术和反病毒侦测技术作为议题详细讨论。

驱动程序是运行在系统信任的Ring0下在代码,她拥有对系统任

何软件和硬件的访问权限。这意味着内核驱动可以访问所有的系统

资源,可以读取所有的内存空间,而且也被允许执行CPU的特权指

令,如,读取CPU控制寄存器的当前值等。而处于用户模式下的程

序如果试图从内核空间中读取一个字节或者试图执行像MOV

EAX,CR3这样的汇编指令都会被立即终止掉。不过,这种强大的底

线是驱动程序的一个很小的错误就会让整个系统崩溃。所以对隐藏

和反隐藏技术来说都提供了一个极好的环境。但是又对攻击者和反

查杀者提出了更高的技术要求。

DriverEntry是内核模式驱动程序主入口点常用的名字,她的作

用和main,WinMain,是一样的。

DriverEntry的第一个参数是一个指针,指向一个刚被初始化的

驱动程序对象,该对象就代表你的驱动程序,DriverEntry的第二

个参数是设备服务键的键名。DriverEntry函数返回一个NTSTATUS

值。NTSTATUS实际就是一个长整型,但你应该使用NTSTATUS定义

该函数的返回值而不是LONG,这样代码的可读性会更好。大部分内

核模式支持例程都返回NTSTATUS状态代码,你可以在DDK头文件

NTSTATUS.H中找到NTSTATUS的代码列表。

DriverEntry的作用主要就是创建设备对象,建立设备对象的符

号链接,设置好各个类型的回调函数等。

例如:

externC

NTSTATUS

DriverEntry(INPDRIVER_OBJECTDriverObject,IN

PUNICODE_STRINGRegistryPath)

DriverObject-DriverUnload=DriverUnload;--1

DriverObject-DriverExtension-AddDevice=AddDevice;

DriverObject-DriverStartIo=StartIo;

DriverObject-MajorFunction[IRP_MJ_PNP]=DispatchPnp;--2

DriverObject-MajorFunction[IRP_MJ_POWER]=DispatchPower;

DriverObject-MajorFunction[IRP_MJ_SYSTEM_CONTROL]=

DispatchWmi;

...

在WDM中通过设置AddDevice回调函数来创建设备对象。在NT驱

动中在DriverEntry例程中创建设备对象和符号链接。

例如:

RtlInitUnicodeString(deviceNameUnicodeString,

deviceNameBuffer);//初始化设备名字//创建设备

ntStatus=IoCreateDevice(DriverObject,

0,

deviceNameUnicodeString,

##DeviceId,

0,

FALSE,

deviceObject

);if(NT_SUCCESS(ntStatus)){

RtlInitUnicodeString(deviceLinkUnicodeString,

deviceLinkBuffer);//初始化符号链接名字

//创建符号链接ntStatus=IoCreateSymbolicLink

(deviceLinkUnicodeString,deviceNameUnicodeString);if

(!NT_SUCCESS(ntStatus)){

IoDeleteDevice(deviceObject);//如果创建符号链接失败,删除

设备returnntStatus;

建立符号链接的作用就是暴露一个给应用程序的接口,应用程序

可以通过CreateFileAPI打开链接符号,得到一个语柄,和我们的

驱动程序进行交互操作。

虽然各个驱动程序的Unload例程不尽相同,但是它

显示全部
相似文档