Ring0级的探索

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ring0级的探索相关的知识,希望对你有一定的参考价值。

内核基础知识介绍:

  内核概述:Interx86系列处理器使用“环”的概念实施访问控制,共4个权限级别。一般情况下,操作系统的内核程序、驱动程序等都在Ring0级别上运行。研究内核漏洞,需要首先掌握一些内核基础知识、例如内核驱动程序的开发、编译和运行,以及内核中重要的数据结构等。

驱动编写之Hello World

代码,保存为Helloworld.c 路径 D:\\0day\\HelloWorld\\helloworld.c

#include <ntddk.h>
 
#define DEVICE_NAME L"\\\\Device\\\\HelloWorld"
#define DEVICE_LINK L"\\\\DosDevices\\\\HelloWorld"
// 创建的设备对象指针
PDEVICE_OBJECT g_DeviceObject;
 
// 驱动卸载函数
VOID DriverUnload(IN PDRIVER_OBJECT driverObject){
    // 什么都不用做,打印一句话,helloword就这套路
    KdPrint(("DriverUnload: 88!\\n"));
}
// 驱动派遣例程函数
NTSTATUS DrvDispatch(IN PDEVICE_OBJECT driverObject, IN PIRP pIrp){
    KdPrint(("Enter DrvDispatch\\n"));
    // 设置IRP的完成状态
    pIrp->iostatus.Status = STATUS_SUCCESS;
    // 设置IRP的操作字节数
    pIrp->IoStatus.Information = 0;
    // 完成IRP处理
    IoCompleteRequest(pIrp, IO_NO_INCREMENT);
    return STATUS_SUCCESS;
}
// 驱动入口函数(相当于main函数)
NTSTATUS DriverEntry(IN PDRIVER_OBJECT driverObject, IN PUNICODE_STRING registryPath){
    NTSTATUS ntStatus;
    UNICODE_STRING devname;
    UNICODE_STRING symLinkName;
    int i;
    // 打印一句调试信息
    KdPrint(("DriverEntry: Hello world driver demo!"));
    // 设置该驱动对象的卸载函数
    //driverObject->DriverUnload = DriverUnload;
    // 创建设备
    RtlInitUnicodeString(&devname, DEVICE_NAME);
    ntStatus = IoCreateDevice(driverObject, 
        0, 
        &devname, 
        FILE_DEVICE_UNKNOWN, 
        0, TRUE, 
        &g_DeviceObject);
    if (!NT_SUCCESS(ntStatus)) {
        return ntStatus;
    }
    // 创建符号链接
    RtlInitUnicodeString(&symLinkName, DEVICE_LINK);
    ntStatus = IoCreateSymbolicLink(&symLinkName, &devname);
    if (!NT_SUCCESS(ntStatus)){
        IoDeleteDevice(g_DeviceObject);
        return ntStatus;
    }
    // 设置该驱动对象的派遣例程函数
    for (i = 0; i < IRP_MJ_MAXIMUM_FUNCTION; i++){
        driverObject->MajorFunction[i] = DrvDispatch;
    }
    // 返回成功结果
    return STATUS_SUCCESS;
}

安装WDK

技术分享

 

以上是关于Ring0级的探索的主要内容,如果未能解决你的问题,请参考以下文章

RecyclerView 内容未使用片段父级的全宽

python 用于数据探索的Python代码片段(例如,在数据科学项目中)

7 个杀手级的 JS 一行代码

Clickhouse Projection 特性探索

安卓深度探索(卷一)第八章

Android深度探索第八章总结