首页
社区
课程
招聘
ZwAllocateVirtualMemory 申请用户内存成功 但是MmIsAddressValid显示不可用
2019-4-28 19:22 6695

ZwAllocateVirtualMemory 申请用户内存成功 但是MmIsAddressValid显示不可用

2019-4-28 19:22
6695
NTSTATUS status = ObOpenObjectByPointer((PVOID)epGame,
				OBJ_KERNEL_HANDLE | OBJ_CASE_INSENSITIVE,
				NULL,
				GENERIC_ALL,
				*PsProcessType,
				KernelMode,
				&handle
			);

			if (status != STATUS_SUCCESS)
			{
				KdPrint(("ObOpenObjectByPoINTer error\n"));
			}

			status = ZwAllocateVirtualMemory(handle, &pMallocMemoryAddr, 0, &length, MEM_COMMIT, PAGE_EXECUTE_READWRITE);

			if (status != STATUS_SUCCESS)
			{
				
				KdPrint(("ZwAllocateVirtualMemory %p,%p , %d\n", pMallocMemoryAddr , &pMallocMemoryAddr, status));
			}

			if (NULL != epGame) {
				
				
				KeStackAttachProcess(epGame,&apcState);		

				
				

				if (MmIsAddressValid(pMallocMemoryAddr)) {

					char test[] = { 0x12,0x12,0x12 ,0x12 ,0x12,0x12 ,0x12 ,0x12  };

					RtlCopyMemory(pMallocMemoryAddr, test, 8);

				}

				

				KeUnstackDetachProcess(&apcState);
				ObDereferenceObject(epGame);//清除对象

				MallocMemoryAddrress = (ULONG64)pMallocMemoryAddr;

				RtlCopyMemory(pIoBuffer, &MallocMemoryAddrress, 8);//返回8字节长度值

				nStatus = STATUS_SUCCESS;

大家好,我有个困惑的问题,x64位驱动申请指定进程空间的内存,申请成功了,但是KeStackAttachProcess后使用MmIsAddressValid显示不可用的,导致不能使用RtlCopyMemory等。
用CE查看该地址也是申请成功的,是不是哪里错了,希望大神们解答下。


[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
点赞0
打赏
分享
最新回复 (10)
雪    币: 12
活跃值: (388)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
MaMy 2019-4-28 20:32
2
0
。。。。。。。
TheMmIsAddressValid    routine checks whether a page fault will occur for a read or write operation at a given virtual address.
然后你那个。。。。无力吐槽
最后于 2019-4-28 20:35 被MaMy编辑 ,原因:
雪    币: 182
活跃值: (576)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
柒雪天尚 2019-4-28 22:52
3
0


.......
Status = ZwAVM()
....!NT_SUCCESS(Status )
雪    币: 460
活跃值: (483)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lwbkanxue 2019-4-28 23:56
4
0
谢谢答复,不过还是有些不明白,
1.这个申请出来的内存是属于非分页内存吧,
2.而且这个函数分配出来的空间比较大,我看了下资料是根据系统决定的吧,有没有更好的内核向其他进程申请内存方法呢
雪    币: 9614
活跃值: (1826)
能力值: ( LV5,RANK:73 )
在线值:
发帖
回帖
粉丝
Sprite雪碧 1 2019-4-29 01:35
5
0
分配给r3的话 probeforread吧
雪    币: 12837
活跃值: (8998)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
hzqst 3 2019-4-29 07:06
6
0
ZwAllocate只管分配VAD,具体的PTE PFN什么的 都是pagefault分配的,MmIsAddressValid只看PTE
顺便:牢饭香不?
雪    币: 914
活跃值: (2188)
能力值: ( LV5,RANK:68 )
在线值:
发帖
回帖
粉丝
万剑归宗 1 2019-4-29 08:30
7
0
牢里见
雪    币: 460
活跃值: (483)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lwbkanxue 2019-4-30 12:00
8
0
在牢里还能发贴,真好,,,哈哈~好的,谢谢各位大神,明白了,
雪    币: 1038
活跃值: (1216)
能力值: ( LV3,RANK:35 )
在线值:
发帖
回帖
粉丝
StriveXjun 2019-4-30 14:02
9
0
MMCopyVirtualMemory 拷一个字节就有了
雪    币: 1660
活跃值: (3052)
能力值: ( LV3,RANK:25 )
在线值:
发帖
回帖
粉丝
逍遥m 2023-4-8 01:23
10
0
hzqst ZwAllocate只管分配VAD,具体的PTE PFN什么的 都是pagefault分配的,MmIsAddressValid只看PTE 顺便:牢饭香不?
真心头疼 在ntdll load的时候 驱动回调 中 让另外线程 执行 ZwAllocateVirtualMemory 时 会延迟申请内存 他成功了 也返回了内存地址 但是函数内是用不了他的内存的 !PTE 时他是没有映射内存的 值为0  
看到你的回复我顿悟了
雪    币: 1
活跃值: (217)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
goudanerer 2023-9-30 17:29
11
0
逍遥m 真心头疼 在ntdll load的时候 驱动回调 中 让另外线程 执行 ZwAllocateVirtualMemory 时 会延迟申请内存 他成功了 也返回了内存地址 但是函数内是用不了他的内存的 ! ...
道理懂了  咋能解决这个问题呢
游客
登录 | 注册 方可回帖
返回