我知道 VirtualProtect
函数毫无疑问地更改了内存中页面的权限。当任何正在运行的进程能够使用它时,这肯定没有直接目的吗?
例如,有人可以轻松编写一段使用 VirtualProtectEx
函数的恶意软件,以绕过指令并造成严重破坏。另一方面,用户可能有正当理由允许进程修改内存(即游戏作弊)。
最佳答案
有人可以轻松编写那段恶意软件,但他们如何让目标执行它呢?
VirtualProtect 允许我有选择地使内存可执行。这意味着我可以将存储不受信任数据的缓冲区标记为不可执行,并且允许不受信任的用户修改我的函数的返回地址的安全漏洞无法跳转到该缓冲区并在那里执行代码,从而停止攻击者自己执行 VirtualProtect。
它还允许我将内存设为只读。这意味着我可以将不受信任的缓冲区旁边的区域标记为只读,并且缓冲区溢出无法覆盖更重要的数据。因此,我的应用程序中没有远程代码,攻击者也没有 VirtualProtect。
一旦攻击者以某种方式获得了对系统的访问权限,他就可以使用 VirtualProtect 来取消对相同安全级别的进程的保护,但此时您无论如何都已经失败了。