- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我知道 VirtualProtect
函数会毫无疑问地更改内存中页面的权限。当任何正在运行的进程能够使用它时,这肯定不会立即产生效果吗?
例如,有人可以轻松编写一段使用 VirtualProtectEx
函数的恶意软件,以绕过指令并造成破坏。另一方面,用户可能有正当理由允许进程修改内存(即游戏作弊)。
最佳答案
有人可以轻松编写该恶意软件,但他们如何获得目标来执行它?
VirtualProtect 允许我有选择地使内存可执行。这意味着我可以将我存储不受信任的数据的缓冲区标记为不可执行,并且我所拥有的允许不受信任的用户修改我的函数的返回地址的安全漏洞无法跳转到该缓冲区并在那里执行代码,从而停止攻击者自己执行 VirtualProtect。
它还允许我将内存设置为只读。这意味着我可以将不可信缓冲区旁边的区域标记为只读,并且缓冲区溢出无法覆盖更重要的数据。因此,我的应用程序中没有远程代码,攻击者也没有 VirtualProtect。
一旦攻击者以某种方式获得了对系统的访问权限,他就可以使用 VirtualProtect 移除相同安全级别的进程保护,但此时你已经输了。
关于c++ - 当任何进程(包括恶意软件)都可以使用 VirtualProtect 时,它有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30032200/
我正在使用 CreateFileMapping 和 MapViewOfFile 函数将文件映射到内存中。在某一点之后,我调用 VirtualProtect 将其保护从只读更改为读写。此调用失败,Get
VirtualProtect 的第三个参数可以使用如下标志: PAGE_EXECUTE PAGE_NOACCESS PAGE_READWRITE PAGE_READONLY ... 一开始我觉得Vir
我需要使用 VirtualProtect,我的问题是关于传递给函数的区域地址。它说(在 MSDN 上)“描述起始页的地址”,它必须是页面开头的地址还是可以是该页面中的任何地址?也就是说,是不是应该先用
我有一个 DWORD 值,我想监视更改,所以我决定使用保护页。 问题是 STATUS_GUARD_PAGE_VIOLATION 异常是在使用 VirtualProtect 将内存标记为 PAGE_GU
美好的一天,我正在尝试以某种方式防止“dll 注入(inject)”到我的程序中。这是我到目前为止所拥有的,但由于某种原因它使我的 .exe 崩溃了。我正在加载这段代码,我的程序附加了一个 .dll。
我在使用 Windows 的 Virtualprotect() api 时遇到问题。我从学校得到了一个作业,我的老师告诉我们,在过去内存力稀缺且成本高昂的时候。程序员必须创建可以动态修改自身以节省内存
我正在 D2010 中进行简单的本地化工作。我正在处理表单上的所有字符串,因为 ETM 似乎超出了我的需求,其他第 3 方工具也是如此......(尽管我目前不太确定!) 下面用于更改 Const.p
这是一些标准的代码片段,我们在其中安装了钩子(Hook),在我们感兴趣的函数的开头重写了一些字节。我的问题是:为什么我们需要重新保护一 block 重写的内存?我们不能只保留 PAGE_EXECUTE
我正在分析进程加载的各种模块。不幸的是,我无法创建 kernel32.dll 内存快照,尽管该函数可以与其他模块(例如 ntddl.dll)一起正常工作。问题在于以下代码: /* Copy code
这按预期工作。引发了 STATUS_GUARD_PAGE_VIOLATION。 int main() { DWORD oldp; DWORD *pdp = new DWORD;
我正在尝试使用 PAGE_GUARD Hook 函数,但在调用页面/地址时它不会引发任何异常。 void HookMe(){ printf("Not hooked\n"); } void Go
我使用 VirtualAlloc(Ex) 来分配和提交大范围的页面。 稍后在执行过程中,我希望“ fork ”该内存,启动一个可以在当前状态下读取它的新进程,而父进程将其视为写时复制内存。 这可以用
我知道 VirtualProtect 函数会毫无疑问地更改内存中页面的权限。当任何正在运行的进程能够使用它时,这肯定不会立即产生效果吗? 例如,有人可以轻松编写一段使用 VirtualProtectE
我有 Delphi 6 DLL,它在内部使用第三方库来进行自动资源字符串翻译。 在库源代码中,2 个 RTL 函数(ShortCutToText 和 LoadResString)被替换为对应的多语言函
我正在尝试转换来自 CHook 的代码论坛发布了这段代码,它执行 EAT Hook : #include #include #include #if PSAPI_VERSION == 1 #pr
我是一名优秀的程序员,十分优秀!