从其他进程读取和写入

问题描述:

我希望能够读取和写入其他进程的内存。我从Kernel32.dll调用函数Readprocessmemory()WriteProcessmemory(),并使用GetProcessByName()函数查找过程。这成功了。从其他进程读取和写入

我看到了readprocessmemory()函数并在我从kernel32.dll调用它后声明的例子,但我不明白它是如何工作的 - 我如何使用函数从另一个进程读取?我会很感激一个例子。

+1

我不知道C#的一些事情,但其他用户可能会喜欢指向您提到的示例的链接 - “在从kernel32.dll调用它之后声明它”并不清楚您的意思。 – Dan 2012-01-01 18:03:34

+1

[阅读本项目的源码](http://www.codeproject.com/KB/cs/sojaner_memory_scanner.aspx)。 – 2012-01-01 18:06:08

+0

这是MSDN上的一篇文章,详细描述了ReadProcessMemory函数:[link](http://msdn.microsoft.com/en-us/library/windows/desktop/ms680553(v = vs.85).aspx) – GregoryComer 2012-02-05 00:54:53

为了读写内存到另一个进程,您需要使用kernel32提供的ReadProcessMemory和WriteProcessMemory函数。如果您使用的是C#,则需要使用PInvoke将这些函数导入到当前进程中。

更一般地,你需要做的是这样的:

  • 制定出它是什么处理,你想读/注入
  • 调用OpenProcess()来得到一个处理的过程。您需要发送GENERIC_READ | GENERIC_WRITE作为标记,你将得到一个HPROCESS,你需要检查它是否为NULL。
  • 决定你想从外部进程读取的位置(这是一个外部进程指针)。您还需要确定要读取的字节数。
  • 在当前进程中分配多个字节以保存读取结果。
  • 调用在您打开的HPROCESS中传递的ReadProcessMemory,在另一个进程中读取的外部进程指针,指向本地缓冲区的指针和从外部进程读取到本地的字节数缓冲。

一旦完成了这一步,你可以看看你的本地缓冲区,你会看到过去在外部进程中的数据,生活会很好。