【问题标题】:How do I elevate permissions to access memory in a memory editor?如何在内存编辑器中提升访问内存的权限?
【发布时间】:2019-10-03 01:04:25
【问题描述】:

我正在尝试制作一个需要我提升程序权限的内存编辑器。我已经浏览了整个网络,但没有找到一个关于我需要的结果。我需要:可以提升我的程序的代码,以便它可以编辑/访问受 Windows 保护的进程的内存(例如 lsass.exe 或 svchost.exe)。我知道我确实需要升级我的权限,因为在尝试 WriteProcessMemory() 并使用 GetLastError() 后,我收到错误代码 998 (ERROR_NO_ACCESS)。

如果您需要更多信息,请告诉我。

谢谢。

【问题讨论】:

  • 程序开始运行后,您将无法对其进行升级。用户必须在启动时选择提升它。您可以添加清单以强制提示。否则,您的程序将不得不产生第二个进程或运行提升的 COM 对象。
  • 您想对受 Windows 保护的进程内存进行什么样的访问,为什么? Protected Processes, Protecting Anti-Malware Services.
  • 我以管理员身份运行我的程序,但还是不行。我正在尝试编辑受 Windows 保护的进程的内存,我知道这是可能的;我只是不知道如何实现它。
  • @EpicDreamzPlays 但你为什么要这样做?你到底想完成什么?受保护的进程受到保护是有原因的。

标签: c++ winapi


【解决方案1】:

这个问题分为三个部分:

  • 以管理员身份运行

  • 写入受保护的内存

  • 写入 lsass.exe 所需的权限

要强制程序以管理员身份运行,您只需添加一个清单文件,您可以这样做:

如果你想写入一个没有写权限的内存页面,你需要使用VirtualProtectEx,我在这样的包装器中使用它:

PatchEx(HANDLE hProcess, char* dst, char* src, int size)
{
    DWORD oldprotect;
    VirtualProtectEx(hProcess, dst, size, PAGE_EXECUTE_READWRITE, &oldprotect);
    WriteProcessMemory(hProcess, dst, src, size, NULL);
    VirtualProtectEx(hProcess, dst, size, oldprotect, &oldprotect);
}

作为 Windows 安全性的一部分,您不能像 lsass.exe 那样编辑以 SYSTEM 身份运行的进程的内存。

为了编辑 lsass.exe,您至少需要通过获取 SYSTEM 令牌以 SYSTEM 身份运行。但由于 Windows 8.1 lsass.exe 是受保护的进程轻型 (PPL) 进程,因此不再那么容易。

您可以在Alex Ionescu's Blog上阅读更多相关信息

您很可能需要处于内核模式才能使用 LSASS。

【讨论】:

    【解决方案2】:

    ERROR_NO_ACCESS 与 ERROR_ACCESS_DENIED 不同。如果此内存设置为只读,则需要更改它的权限。 (VirtualProtectEx)

    参考“How is it that WriteProcessMemory succeeds in writing to read-only memory?”。

    一种可能性是从require signed 使用有效证书的受保护进程访问它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多