【笔记】RING0 与 RING3之间的简单交互

这篇博客介绍了如何在Windows系统中进行RING0和RING3之间的简单交互,通过一个实例展示了如何从ring3应用程序将PID传递给ring0驱动,并利用驱动Hook NtOpenProcess函数,使得应用程序无法被任务管理器结束。加载驱动采用了SCM和封装后的CDRIVER类,尽管存在一些小bug,如返回信息不准确,但可以通过数组传递多个PID来扩展该方法。
摘要由CSDN通过智能技术生成

RING0 与 RING3之间的简单交互

         叫简单交互的原因是,只从ring3传给ring0一个变量的值,不涉及到锁事件的问题(有点像多线程的那个东东...)。这里我使用了最简单的例子,就是SSDT HOOK NtOpenProcess. ring3的应用程序将自己的PID传给ring0的驱动,驱动hook NtOpenProcess之后就无法从任务管理器终止应用程序了。

         加载驱动的方式用的是SCM....而且是《windows程序设计里》封装之后的CDRIVER类...(我承认我有点懒了....以后在用ZWLoadDriver 或者别的什么 rootkit.com里面有篇文章讲了好多种...)


/
// SSDT NtOpenProcess,
//FIRSTDRIVER.C 
//2008年5月10日
#include <ntddk.h>
#include <stdlib.h>
#include "IoCTL.h"
// 自定义函数的声明
NTSTATUS DispatchCreateClose(PDEVICE_OBJECT pDevObj, PIRP pIrp);
void DriverUnload(PDRIVER_OBJECT pDriverObj);
NTSTATUS DispatchIoctl(PDEVICE_OBJECT pDevObj, PIRP pIrp);

VOID Hook();
VOID UnHook();
// 驱动内部名称和符号连接名称
#define DEVICE_NAME L"\\Device\\devDriverDemo"
#define LINK_NAME L"\\??\\slDriverDemo"
ULONG    g_uRealServiceAddress;    //真实函数地址
ULONG    g_uPID;                        //把PID传进来

typedef struct _SystemServiceDescriptorTable
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值