当任何进程(包括恶意软件)可以使用VirtualProtect时,它有什么意义?

Tim*_*nes 3 c c++ memory hook detours

据我所知,该VirtualProtect函数毫无疑问地更改了内存中页面的权限.当任何正在运行的进程能够使用它时,最终没有直接目的吗?

例如,有人可以轻松编写一个使用该VirtualProtectEx功能的恶意软件,以绕开指令并造成破坏.另一方面,用户可能有合法的理由允许进程修改存储器(即游戏作弊).

Seb*_*edl 11

有人可以很容易地写出那块恶意软件,但他们如何让目标执行呢?

VirtualProtect允许我有选择地使内存可执行.这意味着我可以将存储不受信任数据的缓冲区标记为不可执行,并且我所拥有的允许不受信任的用户修改我的函数的返回地址的安全漏洞无法跳转到该缓冲区并在那里执行代码,从而停止攻击者自己执行VirtualProtect.

它还允许我将内存设为只读.这意味着我可以将不受信任的缓冲区旁边的区域标记为只读,并且缓冲区溢出不能覆盖更重要的数据.因此,我的应用程序中没有远程代码,攻击者没有VirtualProtect.

一旦攻击者以某种方式获得对系统的访问权限,他就可以使用VirtualProtect删除相同安全级别的进程保护,但此时您已经丢失了.


abe*_*nky 8

我曾经VirtualProtect帮助追踪不正确的内存访问.

我分配了一页内存,初始化它,然后标记为Unreadable/Unwriteable,然后我们的超级单片程序中的另一个组件不正确地访问了我的指针.一旦该组件试图写入不可写的页面,我们就会看到访问冲突,我们知道违规方是谁.

(在此之前,我们只知道内存已被覆盖......但我们不知道哪个组件正在执行此操作).