首页
社区
课程
招聘
[求助]NtProtectVirtualMemory调用失败
发表于: 2017-1-19 18:20 7363

[求助]NtProtectVirtualMemory调用失败

2017-1-19 18:20
7363
pMappedAddress = MmMapLockedPagesSpecifyCache(pMdl, UserMode, MmCached, NULL, FALSE, NormalPagePriority);

pMappedAddress是MDL映射到应用层的地址,当前已经切换到handle指向的进程,返回的错误码是C0000005,网上搜了下是非法访问。是什么原因导致的   ProtectSize=368
pNtProtectVirtualMemory(handle, &pMappedAddress, &ProtectSize, PAGE_EXECUTE_READWRITE, &OldProtect);

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

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 12876
活跃值: (9357)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
2
NtProtectVirtualMemory无法修改用mdl映射的内存
2017-1-19 20:04
0
雪    币: 350
活跃值: (87)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
3
可以是可以的,只是它的句柄错误而已!切换进程的时候,他应该是把句柄直接传递进来的吧!直接传递的句柄是错误的,所以会发生非法访问!
2017-1-19 23:58
0
雪    币: 350
活跃值: (87)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
4
我不明白,既然进程已经切换,为什么不直接写内存呢?这个时候写入的内存是你切换到的进程的内存呢!为什么还要调用别的函数呢?
2017-1-20 00:01
0
雪    币: 70
活跃值: (1562)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
我的句柄是下面这样获取的。
NTSTATUS GetHandleByPid(PHANDLE pHandle, ULONG pid)
{
        OBJECT_ATTRIBUTES ObjectAttributes;
        CLIENT_ID clientid;
        NTSTATUS status = STATUS_UNSUCCESSFUL;
        InitializeObjectAttributes(&ObjectAttributes, 0, OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE, 0, 0);
        clientid.UniqueProcess = (HANDLE)pid;
        clientid.UniqueThread=0;

        status = ZwOpenProcess(pHandle, PROCESS_ALL_ACCESS, &ObjectAttributes, &clientid);

        return status;
}。
映射的这片内存是一个函数,要在应用层取执行,其实就是内核层的APC注入。但是应用层执行的时候发现内存没得执行的属性
2017-1-20 09:41
0
雪    币: 12876
活跃值: (9357)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
6
分配可执行内存请用ZwAllocateVirtualMemory
2017-1-20 10:02
0
雪    币: 70
活跃值: (1562)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
好吧 我试看看  ,谢了
2017-1-20 10:25
0
游客
登录 | 注册 方可回帖
返回