介绍

我认为您可能想随机读取某个进程的内存。对于Windows,通过调用Win32API提供的ReadProcessMemory,可以读取另一个正在运行的进程的内存。你可以用这个做很多事情!我也那么认为。

计划概述

简单总结一下流程,

  1. 使用CreateToolhelp32Snapshot 获取正在运行的进程列表的快照
  2. Process32FirstProcess32Next 从快照中一一提取进程,因此找到所需名称的进程。
  3. 将所需进程的 ProcessID 传递给OpenProcess 以获取处理程序
  4. 将获取的处理程序传递给ReadProcessMemory 以读取无限内存

    它应该是。

    问题 1

    当我尝试运行它时,OpenProcess 出现错误。当我打电话给GetLastError 并看到错误代码时,它是0x5ERROR_ACCESS_DENIED。这意味着我没有权限。我查了一下,说调试权限SeDebugPrivilege一定是有效的,但是普通用户本来就没有调试权限,所以调用AdjustTokenPrivileges不会改变权限。当然,正在运行的进程也不能有调试权限。
    既然没有选择,就用admin用户运行,解决用户权限问题。

    问题 2

    现在用户权限问题已经解决,一些程序如chrome.exe可以读取正在运行的进程的内存。但是,某些进程仍然被OpenProcess 拒绝访问。底线是您无法访问设置为不允许外部进程访问的进程。例如,Windows 系统进程总是被拒绝访问。您还可以通过在创建进程时调用BuildExplicitAccessWithNameA 并设置ACE:Access Control Entry 来拒绝来自外部进程的访问。

    在最后

    虽然很遗憾它没有按预期进行,但考虑它是很自然的,因为如果你不能设置访问拒绝,你可以做各种各样的坏事。但是,只是使用Win32API的简单方法并不好,所以我认为想通过各种方式读取内存的人可以通过其他方式来实现。我要小心不要试图做坏事。

    参考页


原创声明:本文系作者授权爱码网发表,未经许可,不得转载;

原文地址:https://www.likecs.com/show-308629829.html

相关文章: