首页
社区
课程
招聘
[求助]win7 64位 断链隐藏进程蓝屏
发表于: 2016-12-15 11:38 10895

[求助]win7 64位 断链隐藏进程蓝屏

2016-12-15 11:38
10895
win7 64位驱动教程 断链隐藏进程几分钟后蓝屏。请问是什么问题?

//获得EPROCESS
PEPROCESS GetProcessObjectByName(char *name)
{
        SIZE_T i;
        for(i=100;i<20000;i+=4)
        {
                NTSTATUS st;
                PEPROCESS ep;
                st=PsLookupProcessByProcessId((HANDLE)i,&ep);
                if(NT_SUCCESS(st))
                {
                        char *pn=PsGetProcessImageFileName(ep);
                        if(_stricmp(pn,name)==0)
                                return ep;
                }
        }
        return NULL;
}

//摘除双向链表的指定项
VOID RemoveListEntry(PLIST_ENTRY ListEntry)
{
        KIRQL OldIrql;
        OldIrql = KeRaiseIrqlToDpcLevel();
        if (ListEntry->Flink != ListEntry &&
                ListEntry->Blink != ListEntry &&
                ListEntry->Blink->Flink == ListEntry &&
                ListEntry->Flink->Blink == ListEntry)
        {
                        ListEntry->Flink->Blink = ListEntry->Blink;
                        ListEntry->Blink->Flink = ListEntry->Flink;
                        ListEntry->Flink = ListEntry;
                        ListEntry->Blink = ListEntry;
        }
        KeLowerIrql(OldIrql);
}
//隐藏进程
VOID HideProcess(PEPROCESS Process)
{
        RemoveListEntry((PLIST_ENTRY)((ULONG64)Process+PROCESS_ACTIVE_PROCESS_LINKS_OFFSET));
}

//保护进程
ULONG ProtectProcess(PEPROCESS Process, BOOLEAN bIsProtect, ULONG v)
{
        ULONG op;
        if(bIsProtect)
        {
                op=*(PULONG)((ULONG64)Process+PROCESS_FLAG_OFFSET);
                *(PULONG)((ULONG64)Process+PROCESS_FLAG_OFFSET)=0;
                return op;
        }
        else
        {
                *(PULONG)((ULONG64)Process+PROCESS_FLAG_OFFSET)=v;
                return 0;
        }
}

VOID test()
{
        audiodg=GetProcessObjectByName("audiodg.exe");DbgPrint("audiodg: %p\n",audiodg);
        if(audiodg)
        {
                op_dat=ProtectProcess(audiodg,1,0);
                ObDereferenceObject(audiodg);
        }
        dwm=GetProcessObjectByName("dwm.exe");DbgPrint("dwm: %p\n",dwm);
        if(dwm)
        {
                HideProcess(dwm);
                ObDereferenceObject(dwm);
        }
}

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

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 145
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
X64不让你这么玩.

关键字 : X64 PG
2016-12-15 11:42
0
雪    币: 12848
活跃值: (9147)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
3
PG:先过我这关再说
2016-12-15 11:59
0
雪    币: 158
活跃值: (349)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
怎么过PG 啊?
2016-12-15 12:51
0
雪    币: 355
活跃值: (276)
能力值: ( LV11,RANK:190 )
在线值:
发帖
回帖
粉丝
5
PG:不要像32走着过去,请爬着过去,不然我就蓝屏
2016-12-15 12:55
0
雪    币: 248
活跃值: (3789)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
PatchGuard不止保护内核代码,还保护内核数据
断链表会破坏数据,照样会给你蓝掉
2016-12-15 14:08
0
雪    币: 145
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
过PG, 你自己玩玩的的话,是可以的, 想大范围稳定使用, 还是要折腾的

总之就是, 不要把写32位驱动的习惯, 带到64位OS上来.....
2016-12-15 14:24
0
雪    币: 36
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
表示上面的代码没有隐藏效果,也就不会蓝屏,上完整源码:
NTKERNELAPI NTSTATUS PsLookupProcessByProcessId(HANDLE ProcessId, PEPROCESS *Process);
NTKERNELAPI CHAR* PsGetProcessImageFileName(PEPROCESS Process);

//目标进程  
PEPROCESS audiodg = NULL, dwm = NULL;
ULONG op_dat;

//偏移定义  
#define PROCESS_ACTIVE_PROCESS_LINKS_OFFSET 0x188  
#define PROCESS_FLAG_OFFSET 0x440  

//获得EPROCESS  
PEPROCESS GetProcessObjectByName(char *name)
{
	SIZE_T i;
	for (i = 100; i<20000; i += 4)
	{
		NTSTATUS st;
		PEPROCESS ep;
		st = PsLookupProcessByProcessId((HANDLE)i, &ep);
		if (NT_SUCCESS(st))
		{
			char *pn = PsGetProcessImageFileName(ep);
			if (_stricmp(pn, name) == 0)
				return ep;
		}
	}
	return NULL;
}

//摘除双向链表的指定项  
VOID RemoveListEntry(PLIST_ENTRY ListEntry)
{
	KIRQL OldIrql;
	OldIrql = KeRaiseIrqlToDpcLevel();
	if (ListEntry->Flink != ListEntry &&
		ListEntry->Blink != ListEntry &&
		ListEntry->Blink->Flink == ListEntry &&
		ListEntry->Flink->Blink == ListEntry)
	{
		ListEntry->Flink->Blink = ListEntry->Blink;
		ListEntry->Blink->Flink = ListEntry->Flink;
		ListEntry->Flink = ListEntry;
		ListEntry->Blink = ListEntry;
	}
	KeLowerIrql(OldIrql);
}
//隐藏进程  
VOID HideProcess(PEPROCESS Process)
{
	RemoveListEntry((PLIST_ENTRY)((ULONG64)Process + PROCESS_ACTIVE_PROCESS_LINKS_OFFSET));
}

//保护进程  
ULONG ProtectProcess(PEPROCESS Process, BOOLEAN bIsProtect, ULONG v)
{
	ULONG op;
	if (bIsProtect)
	{
		op = *(PULONG)((ULONG64)Process + PROCESS_FLAG_OFFSET);
		*(PULONG)((ULONG64)Process + PROCESS_FLAG_OFFSET) = 0;
		return op;
	}
	else
	{
		*(PULONG)((ULONG64)Process + PROCESS_FLAG_OFFSET) = v;
		return 0;
	}
}

VOID test()
{
	audiodg = GetProcessObjectByName("calc.exe"); DbgPrint("calc: %p\n", audiodg);
	if (audiodg)
	{
		op_dat = ProtectProcess(audiodg, 1, 0);
		ObDereferenceObject(audiodg);
	}
	dwm = GetProcessObjectByName("cmd.exe"); DbgPrint("cmd: %p\n", dwm);
	if (dwm)
	{
		HideProcess(dwm);
		ObDereferenceObject(dwm);
	}
}


2017-11-16 17:32
1
雪    币: 13
活跃值: (87)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
不知道搞定了没有?我也想知道。
2018-7-10 11:20
0
游客
登录 | 注册 方可回帖
返回
//