首页
社区
课程
招聘
[求助]内核态调用ZwProtectVirtualMemory不成功
发表于: 2013-2-27 17:42 11073

[求助]内核态调用ZwProtectVirtualMemory不成功

2013-2-27 17:42
11073
之前发过一个帖来问这方面的问题,在ITSailor大牛的帮助下,搞定了ZwAllocateVirtualMemory的调用,但ZwProtectVirtualMemory调用仍然是不成功。
代码如下:
ULONG  OldProtect = 0;
PVOID pBeginAddr = (PVOID)(*BaseAddress); //这是进程加载入内存的首地址
ULONG uSize = 0x1000;
NTSTATUS nsTmp = ZwProtectVirtualMemory(ProcessHandle,&pBeginAddr,&uSize,PAGE_EXECUTE_READWRITE,&OldProtect);
调用一直不成功,错误码为C000004E,"区域的视图指定了和初始视图的保护不兼容的保护。"

这个问题困扰我很久了,希望会的同学不吝赐教!

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

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 18
活跃值: (12)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
补充下,调用Nt版的也不成功,错误代码为C0000005
2013-2-27 17:43
0
雪    币: 2105
活跃值: (424)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
ULONG size = 0x200;
PVOID codes = 0;
ntStatus = ZwAllocateVirtualMemory(hProcessHandle, &codes, 0, &size,
MEM_COMMIT, PAGE_EXECUTE_READWRITE);
ULONG * args = (ULONG *)((ULONG)codes+0xD0);
args[0] = ulBase; //base
args[1] = 5; //size

ULONG ret1 = NtProtectVirtualMemory((HANDLE)-1, (PVOID *)&args[0], &args[1], PAGE_EXECUTE_READWRITE, &args[2]);
2013-2-27 17:46
0
雪    币: 18
活跃值: (12)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
请问下你的NtProtectVirtualMemory函数地址是如何获取的?
我在代码中是这样获取的:
PNtProtectVirtualMemory  NtProtectVirtualMemory= NULL;
ULONG addr = 0x89*4 + (ULONG)KeServiceDescriptorTable.ServiceTableBase;
NtProtectVirtualMemory = (PNtProtectVirtualMemory)*(PULONG)addr;
2013-2-27 18:37
0
雪    币: 18
活跃值: (12)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
5
已按照你的方法改了,将存储base、size和protect的变量都放在了申请的用户态内存中,但调用结果仍然是失败的,C000004E。。。这个问题到底该怎么解决啊!
2013-2-27 19:22
0
雪    币: 2105
活跃值: (424)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
windbg调试一下吧 我这好好的
2013-2-27 20:04
0
雪    币: 18
活跃值: (12)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
7
是在用windbg调试。
怪怪的,,我再排除一下其他原因
2013-2-27 20:09
0
雪    币: 18
活跃值: (12)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
8
继续追问,你用的NtProtectVirtualMemory地址是如何获得的?
2013-2-27 20:18
0
雪    币: 18
活跃值: (12)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
9
求解答啊!望各位大牛不吝赐教!
2013-2-28 13:15
0
游客
登录 | 注册 方可回帖
返回
//