首页
社区
课程
招聘
[分享]驱动下的查找进程以及LoadImage下ZwProtectVirtualMemory死锁处理办法.
发表于: 2018-11-11 19:15 4517

[分享]驱动下的查找进程以及LoadImage下ZwProtectVirtualMemory死锁处理办法.

2018-11-11 19:15
4517
先贴个查找进程:
ULONG dv_FindEProcess(PUCHAR ProcessName, PEPROCESS *pEprocess)
{
	PLIST_ENTRY	ActiveProcessLinks;
	ANSI_STRING tarName, curName;
	RtlInitAnsiString(&tarName, ProcessName);
	PUCHAR pName = NULL;
	ULONG uPid = 0,uRetPid=0;

	PCHAR FirstEProcess,NextEprocess;
	FirstEProcess = NextEprocess = PsGetCurrentProcess();
	__try 
	{
		do
		{
			pName = PsGetProcessImageFileName(NextEprocess);
			uPid = *(PLONG32)(NextEprocess + dynData.EPROCESS_UniqueProcessId);
			if (pName && uPid)
			{
				RtlInitAnsiString(&curName, pName);
				DbgPrint("di-%Z(%d)", curName, uPid);
				if (RtlEqualString(&tarName, &curName, TRUE))
				{
					if (pEprocess)
					{
						*pEprocess = NextEprocess;
					}

					uRetPid = uPid;
					break;
				}
			}
			
			ActiveProcessLinks = NextEprocess + dynData.EPROCESS_ActiveProcessLinks;
			if (ActiveProcessLinks->Flink == NULL)
			{
				break;
			}

			NextEprocess = (PCHAR)ActiveProcessLinks->Flink - dynData.EPROCESS_ActiveProcessLinks;
		} while (NextEprocess!= FirstEProcess);
		
	}
	__except (EXCEPTION_EXECUTE_HANDLER)
	{
	}
	

	return uRetPid;
}

PsSetLoadImageNotifyRoutine下调用ZwProtectVirtualMemory卡死,原因就是AddressCreationLock.
我处理的办法不是是解锁,而是直接把AddressCreationLock清零,这样调用 ZwProtectVirtualMemory的时候就会跳过检测,不卡死了.
如下处理:


WIN10下LoadImage好像没有 AddressCreationLock 锁死的问题,至少我没发现过,WIN7下,一大堆Zw死锁.
刚遇到的时候纠结了很久才解决,希望对你们有所帮助.
.


[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 12876
活跃值: (9342)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
2
这绕过方法也太硬核了吧,老前辈们都是插apc解决的

还有
uPid = *(PLONG32)(NextEprocess + dynData.EPROCESS_UniqueProcessId);

这个还要用offset,过分了吧、
最后于 2018-11-12 08:20 被hzqst编辑 ,原因:
2018-11-12 08:16
0
雪    币: 914
活跃值: (2768)
能力值: ( LV5,RANK:68 )
在线值:
发帖
回帖
粉丝
3
思路不错
2018-11-12 08:40
0
雪    币: 8412
活跃值: (6338)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
hzqst 这绕过方法也太硬核了吧,老前辈们都是插apc解决的还有uPid = *(PLONG32)(NextEprocess + dynD ...
直接修改方便啊,用着也没什么毛病.看EPROCESS_ActiveProcessLinks的时候,发现ID也就在附近,顺便就记录下来了,用着方便.
2018-11-12 11:19
0
雪    币: 8412
活跃值: (6338)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
hzqst 这绕过方法也太硬核了吧,老前辈们都是插apc解决的还有uPid = *(PLONG32)(NextEprocess + dynD ...
最关键的还是菜,APC不会.
2018-11-12 11:32
0
雪    币: 1044
活跃值: (1390)
能力值: ( LV3,RANK:35 )
在线值:
发帖
回帖
粉丝
6
创建个线程 然后等待啊
2018-11-12 11:54
0
游客
登录 | 注册 方可回帖
返回