首页
社区
课程
招聘
[原创]科普之三招隐藏进程
发表于: 2008-9-20 11:58 43506

[原创]科普之三招隐藏进程

2008-9-20 11:58
43506

先从活动进程链表中摘除 擦除PspCidTable中对应的Object 再擦除Csrss进程中那份表
擦除HandleTable表用了一些技巧,不用亲自操作三层表,不是网上流传的方法,具体请看代码......

使用的时候直接HideProcessById(HIDE_PID)就行了
偶这只菜鸟的学习总结,牛们不要BS,我会超过你们的.很快

ProcessHide.h

#ifndef __PROCESSHIDE_H__
#define __PROCESSHIDE_H__

#ifdef __cplusplus
extern "C" {
#endif

#include <ntddk.h>

/*
 使用之前请先调用InitializeCommonVariables初始化全局变量
*/

typedef struct _HANDLE_TABLE_ENTRY {
	
    //
    //  The pointer to the object overloaded with three ob attributes bits in
    //  the lower order and the high bit to denote locked or unlocked entries
    //
	
    union {
		
        PVOID Object;
		
        ULONG ObAttributes;
    };
	
    //
    //  This field either contains the granted access mask for the handle or an
    //  ob variation that also stores the same information.  Or in the case of
    //  a free entry the field stores the index for the next free entry in the
    //  free list.  This is like a FAT chain, and is used instead of pointers
    //  to make table duplication easier, because the entries can just be
    //  copied without needing to modify pointers.
    //
	
    union {
		
        union {
			
            ACCESS_MASK GrantedAccess;
			
            struct {
				
                USHORT GrantedAccessIndex;
                USHORT CreatorBackTraceIndex;
            };
        };
		
        LONG NextFreeTableEntry;
    };
	
} HANDLE_TABLE_ENTRY, *PHANDLE_TABLE_ENTRY;

typedef struct _HANDLE_TABLE {
	
    //
    //  A set of flags used to denote the state or attributes of this
    //  particular handle table
    //
	
    ULONG Flags;
	
    //
    //  The number of handle table entries in use.
    //
	
    LONG HandleCount;
	
    //
    //  A pointer to the top level handle table tree node.
    //
	
    PHANDLE_TABLE_ENTRY **Table;
	
    //
    //  The process who is being charged quota for this handle table and a
    //  unique process id to use in our callbacks
    //
	
    struct _EPROCESS *QuotaProcess;
    HANDLE UniqueProcessId;
	
    //
    //  This is a singly linked list of free table entries.  We don't actually
    //  use pointers, but have each store the index of the next free entry
    //  in the list.  The list is managed as a lifo list.  We also keep track
    //  of the next index that we have to allocate pool to hold.
    //
	
    LONG FirstFreeTableEntry;
    LONG NextIndexNeedingPool;
	
    //
    //  This is the lock used to protect the fields in the record, and the
    //  handle table tree in general.  Individual handle table entries that are
    //  not free have their own lock
    //
	
    ERESOURCE HandleTableLock;
	
    //
    //  The list of global handle tables.  This field is protected by a global
    //  lock.
    //
	
    LIST_ENTRY HandleTableList;
	
    //
    //  The following field is used to loosely synchronize thread contention
    //  on a handle.  If a thread wants to wait for a handle to be unlocked
    //  it will wait on this event with a short timeout.  Any handle unlock
    //  operation will pulse this event if there are threads waiting on it
    //
	
    KEVENT HandleContentionEvent;
} HANDLE_TABLE, *PHANDLE_TABLE;	

typedef BOOLEAN (*EX_ENUMERATE_HANDLE_ROUTINE)(
	IN PHANDLE_TABLE_ENTRY HandleTableEntry,
	IN HANDLE Handle,
	IN PVOID EnumParameter
	);

typedef BOOLEAN (*__ExEnumHandleTable)(
	IN PHANDLE_TABLE HandleTable,
	IN EX_ENUMERATE_HANDLE_ROUTINE EnumHandleProcedure,
	IN PVOID EnumParameter,
	OUT PHANDLE Handle OPTIONAL
	);

NTSTATUS
GetPspCidTable(
	OUT PHANDLE_TABLE* ppPspCidTable
	);

BOOLEAN
EnumHandleCallback(
	IN PHANDLE_TABLE_ENTRY HandleTableEntry,
	IN HANDLE Handle,
	IN OUT PVOID EnumParameter
	);

NTSTATUS
EraseObjectFromHandleTable(
	PHANDLE_TABLE pHandleTable,
	IN HANDLE ProcessId
	);

NTSTATUS
RemoveNodeFromActiveProcessLinks(
	IN HANDLE ProcessId
	);

NTSTATUS
HideProcessById(
	IN HANDLE ProcessId
	);

NTSTATUS
InitializeCommonVariables(
	);

NTSTATUS
GetProcessNameOffset(
	OUT PULONG	Offset OPTIONAL
	);

NTSTATUS
LookupProcessByName(
	IN PCHAR pcProcessName,
	OUT PEPROCESS *Process
	);
#ifdef __cplusplus
} // extern "C"
#endif

#endif // __PROCESSHIDE_H__

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 7
支持
分享
最新回复 (38)
雪    币: 225
活跃值: (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
2
细细的看一下,谢谢
2008-9-20 13:47
0
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
3
抄N久前的fu的代码,有啥意思...
我看不出有哪里是在创新.
2008-9-20 18:15
0
雪    币: 342
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
偶这只菜鸟的学习总结,牛们不要BS,我会超过你们的.很快

特喜欢LZ的精神,支持
2008-9-20 19:38
0
雪    币: 232
活跃值: (15)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
5
三楼的睁大眼看清了fu是怎么擦除表的,一群忘了自己是吃奶长大的孩子,无语
2008-9-20 20:24
0
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
6
当我没说过.
老技术,炒剩饭, 膜拜的膜拜去, 我路过顺便废话几句. 无价值.
2008-9-20 20:27
0
雪    币: 952
活跃值: (1821)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
好好看了下 别的地方有 但绝不是抄futo的
擦Csrss测试无效
2008-9-20 20:41
0
雪    币: 1852
活跃值: (504)
能力值: (RANK:1010 )
在线值:
发帖
回帖
粉丝
8
论坛作为技术交流平台,成员能够把自己的学习心得,以及自己认为有价值的东西,拿出来与大家分享,这是交流平台的核心价值所在。

有机会的话让sudami多爆点料:)
2008-9-21 02:17
0
雪    币: 66
活跃值: (16)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
9
为什么不用ExDestroyHandle来清理那些表呢~  更方面了~
2008-9-21 11:36
0
雪    币: 609
活跃值: (237)
能力值: ( LV12,RANK:441 )
在线值:
发帖
回帖
粉丝
10
方便,方面,打个标记细细看
2008-9-21 18:16
0
雪    币: 10729
活跃值: (3257)
能力值: (RANK:520 )
在线值:
发帖
回帖
粉丝
11
cooldiyer 闭关修炼 出山了?
加油!
2008-9-21 20:41
0
雪    币: 347
活跃值: (25)
能力值: ( LV9,RANK:420 )
在线值:
发帖
回帖
粉丝
12
不知道什么方法对sudami有用,激将法应该还不错吧,或者激怒他
2008-9-21 21:06
0
雪    币: 232
活跃值: (15)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
13
ExDestroyHandle需要定位,不同操作系统差别很大,ExDestroyHandle也是通过ExpLookupHandleTableEntry枚举表的,所以还是ExEnumHandleTable通用,简单.
2008-9-21 22:02
0
雪    币: 203
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
猛地一看,确实象几年前的代码,但仔细看还是不一样的。

sudami估计没有仔细看。
2008-9-23 22:02
0
雪    币: 581
活跃值: (149)
能力值: ( LV12,RANK:600 )
在线值:
发帖
回帖
粉丝
15
谢谢LZ的热心分享....
2008-9-24 08:09
0
雪    币: 474
活跃值: (96)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
16
学习!学习!
2008-9-26 09:21
0
雪    币: 130
活跃值: (33)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
17
支持楼主的精神

和谐社会,谦虚点会更好,技术没先没后,暂时领先,同在一个屋檐下,说不定哪天别人就超过你
2008-9-28 16:50
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
谢谢分享,有机会学习一下,目前还是看不懂这个C++的代码,小菜菜一个,先学习去了
2008-10-1 10:20
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
。。。。。。。。。。。。。。。。路过

其实隐藏进程差不多就那几种方法,看怎么实现而已
2008-10-1 16:05
0
雪    币: 197
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
自己编译出现很多错误,懒得一一修改了..
2008-10-3 00:01
0
雪    币: 179
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
留名,正在准备仔细看
2008-10-26 22:13
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
谢谢楼主!!
2008-12-14 16:39
0
雪    币: 66
活跃值: (950)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
还请楼主放出个完整的例子

编译中有错误
2009-3-1 00:01
0
雪    币: 308
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
24
支持楼主,许多人就会BS别人,目前这些资源在国内很少,所以一定要支持!!!!

强留支持楼主!!!!
2009-3-1 00:19
0
雪    币: 124
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
编译出错一大堆呀。楼主快看看吧
2009-4-6 23:07
0
游客
登录 | 注册 方可回帖
返回
//