【问题标题】:Trace VirtualProtect calls from other applications跟踪来自其他应用程序的 VirtualProtect 调用
【发布时间】:2014-09-17 15:09:55
【问题描述】:

在 Windows Server 2008 上,我有一个实例,有人正在写入应用程序的指令内存。有人写的大多是零,每 16 到 32 个字节穿插一个不同的哨兵字节,没有模式。我很确定,为了写入指令内存,必须有人调用VirtualProtect。我也很确定它是另一个应用程序(可能是病毒扫描程序)。

有没有办法跟踪内核对VirtualProtect 的调用? 是否有其他方法可以找出谁可能正在解锁和/或写入指令空间?

我看过WinDbg 和Performance Monitor

【问题讨论】:

  • 使用调试器。在 {,,ntdll.dll}_NtProtectVirtualMemory@20 上设置断点
  • 但我需要中断/跟踪系统。我需要找出哪个 exe 正在调用 VirtualProtect。
  • 另一个调用 VirtualProtect() 的 EXE 将毫无意义,它只能更改自己的页面。如果它不是 DLL 注入,那么你会遇到更大的问题。重新安装。
  • 严格来说是VirtualProtectEx。调试器使用它来设置调试异常指令。所以它当然可以并且已经完成。但就我而言,它也在做一些坏事。

标签: windows debugging kernel32


【解决方案1】:

如果您想知道哪些进程正在调用VirtualProtectEx(),您需要将DLL 注入每个正在运行的进程中并挂钩VirtualProtectEx(),然后您可以记录所有结果。

您可以使用AppInit DLL 机制来执行此操作,这使得每个进程都加载您指定的DLL。为了方便挂钩,您可以使用MS Detours。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-27
    • 1970-01-01
    • 1970-01-01
    • 2018-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多