2012-01-01 86 views
2

我希望能夠讀取和寫入其他進程的內存。我從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

回答

1

爲了讀寫內存到另一個進程,您需要使用kernel32提供的ReadProcessMemory和WriteProcessMemory函數。如果您使用的是C#,則需要使用PInvoke將這些函數導入到當前進程中。

更一般地,你需要做的是這樣的:

  • 制定出它是什麼處理,你想讀/注入
  • 調用OpenProcess()來得到一個處理的過程。您需要發送GENERIC_READ | GENERIC_WRITE作爲標記,你將得到一個HPROCESS,你需要檢查它是否爲NULL。
  • 決定你想從外部進程讀取的位置(這是一個外部進程指針)。您還需要確定要讀取的字節數。
  • 在當前進程中分配多個字節以保存讀取結果。
  • 調用在您打開的HPROCESS中傳遞的ReadProcessMemory,在另一個進程中讀取的外部進程指針,指向本地緩衝區的指針和從外部進程讀取到本地的字節數緩衝。

一旦完成了這一步,你可以看看你的本地緩衝區,你會看到過去在外部進程中的數據,生活會很好。