首页
社区
课程
招聘
[求助]win7调用ssdt NtProtectVirtualMemory问题
发表于: 2020-12-2 13:37 4133

[求助]win7调用ssdt NtProtectVirtualMemory问题

2020-12-2 13:37
4133
1
2
3
4
5
6
7
8
9
10
11
12
13
14
if (!NtProtectVirtualMemory64)
{
    *(PVOID*)&NtProtectVirtualMemory64 = GetSSDTEntry(GetDllFunctionAddress(L"NtProtectVirtualMemory", L"\\SystemRoot\\system32\\ntdll.dll"));
}
ULONG ret = NULL;
PEPROCESS process;
if (PsLookupProcessByProcessId((HANDLE)pid, &process) != 0) { return 0; }
uintptr_t baseAddress = address;
SIZE_T regionSize = size;
KeAttachProcess(process);
NTSTATUS a = NtProtectVirtualMemory64(NtCurrentProcess(), &baseAddress, &regionSize, NewProtect, &ret);
KeDetachProcess();
ObDereferenceObject(process);
return ret;

函数地址是对的,驱动加载的时候随意附加一个进程测试都能修改成功.但是io调用的时候就返回c0000005,实在搞不懂了


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

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 14
活跃值: (948)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
    PUCHAR pPrevMode = (PUCHAR)PsGetCurrentThread() + 0x1F6;
    UCHAR prevMode = *pPrevMode;
    *pPrevMode = KernelMode; 
    ULONG ret = NULL;
    uintptr_t baseAddress = address;
    SIZE_T regionSize = size;
    NtProtectVirtualMemory64(NtCurrentProcess(), &baseAddress, &regionSize, NewProtect, &ret);
    DPRINT("mode: %llx \n", ExGetPreviousMode());
    *pPrevMode = prevMode;
修改了mode也不行,实在不明白
2020-12-2 14:13
0
雪    币: 12848
活跃值: (9147)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
3
自己windbg单步跟踪一下啊?
2020-12-2 18:47
0
雪    币: 1469
活跃值: (440)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
hzqst 自己windbg单步跟踪一下啊?
热心的大表锅,怒赞

还是建议申请R3的内存进行操作,改mode我也试过,不好使
2020-12-2 20:59
0
雪    币: 796
活跃值: (2054)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
看好参数,我记得NewProtect是指针类型的,检查一下吧,需要传指针
2020-12-3 00:01
0
雪    币: 2055
活跃值: (486)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
6
用Zw函数
2020-12-3 02:25
0
雪    币: 2496
活跃值: (221)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
win10怎么样才能替换系统文件.
2020-12-3 08:13
0
雪    币: 14
活跃值: (948)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
谢谢各位大佬.之前不知道为什么上看雪总是404,没法来
现在弄好了,是我改mode改错了,改对之后就能用了
2020-12-4 04:17
0
游客
登录 | 注册 方可回帖
返回
//