首页
社区
课程
招聘
[求助]VirtualProtectEx函数修改内存值时GetLastError()返回87
发表于: 2023-2-6 11:39 6982

[求助]VirtualProtectEx函数修改内存值时GetLastError()返回87

2023-2-6 11:39
6982

代码参考如下:
c28K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6T1L8r3!0Y4i4K6u0W2j5%4y4V1L8W2)9J5k6h3&6W2N6q4)9J5c8X3u0B7j5Y4A6Q4y4h3k6U0P5s2W2Q4x3V1k6S2M7Y4c8A6j5$3I4W2i4K6u0r3k6r3g2@1j5h3W2D9M7#2)9J5c8U0M7&6z5o6j5K6y4e0l9I4
第一次能正常的执行,但是后面都无法在执行了。在代码:
pid_bol = VirtualProtectEx(hPro, (LPVOID)pid_p, 4, PAGE_READWRITE, &dwOldProtect);
这里的pid_bol返回了0.

 

printf("GetLast error =%d\r\n", GetLastError());//返回87
(Incorrect Parameter.)

 

请大神们指导一下这个是什么原因呢?我确定参数是没改没问题的,因为第一次执行的时候返回正确的值了。


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

收藏
免费 1
支持
分享
最新回复 (5)
雪    币: 4165
活跃值: (1555)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2

可能是pid_p的值不对。用户空间的地址不能超过 MM_HIGHEST_USER_ADDRESS。

2023-2-6 15:11
0
雪    币: 2981
活跃值: (2693)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
Boring勇哥 可能是pid_p的值不对。用户空间的地址不能超过 MM_HIGHEST_USER_ADDRESS。

感谢回复!我的pid_p是直接赋值的,应该没有超过用户空间。

2023-2-7 09:20
0
雪    币: 4165
活跃值: (1555)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
pid_p的值在循环中有没有改变?调用出错的时候它的值是多少?直接调用NtProtectVirtualMemory,返回的status更准确
2023-2-7 11:55
0
雪    币: 2981
活跃值: (2693)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
Boring勇哥 pid_p的值在循环中有没有改变?调用出错的时候它的值是多少?直接调用NtProtectVirtualMemory,返回的status更准确
pid_p的值在循环中有没有改变,出错的时候仍然是16777216;
进入循环后的第一次就报错了,pid_bol直接返回了0.
2023-2-7 13:45
0
雪    币: 4165
活跃值: (1555)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
6

进程的基址是随机的,每次创建进程都不一样,不能用默认的0x01000000。导致VirtualProtectEx返回87的原因有很多,使用NtProtectVirtualMemory可以看到确切的原因,比如STATUS_SECTION_PROTECTION/STATUS_INVALID_PAGE_PROTECTION,其Win32Error都是87。当地址类型是Mapped时,修改内存保护很可能失败,原因有很多,可以参考:1f2K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2#2L8X3E0F1L8%4N6F1j5$3S2W2j5i4c8K6i4K6u0W2L8h3g2Q4x3V1k6X3L8%4u0#2L8g2)9J5c8U0x3I4x3U0p5%4y4K6c8Q4x3X3c8H3L8%4y4@1z5q4)9J5k6h3S2@1L8h3H3`.

2023-2-7 15:06
0
游客
登录 | 注册 方可回帖
返回