2011-02-15 24 views
0

可能重複:
How to access structure in other program's memory?C#指向其他應用程序的內存

你好。 我想訪問另一個應用程序內存。 我正在寫遊戲破解(不要擔心,它只適用於單人遊戲模式)。 我找到了遊戲內存中玩家結構的指針。

我不想使用pInvoked ReadProcessMemory,因爲我想能夠讀取單個結構的字段。我知道遊戲內存中的地址,玩家結構數組在哪裏。

在這種情況下使用pInvoked ReadProcessMemory不太實際。

如何使用C#的不安全指針將其他進程的內存映射爲struct? 或者,如果它不能使用直接指針,那麼使用readPrcessMemory的方式是什麼?

我想最終能夠這樣。

播放器是某種表示內存結構的類。 玩家是某種玩家的集合。

foreach(player guy in Players) 
{ 
    DrawESP(guy.X, guy.Y, guy.Z); 
} 
+5

你問這個問題已經(http://stackoverflow.com/questions/4986047/how-to-access-structure-in-other-programs-memory)。我們已經回答了它(在一些長度)。你爲什麼再問一次?僅僅因爲你不喜歡你已經得到的答案並不意味着它是不正確的。你必須使用ReadProcessMemory。請接受之前問題的答案之一,並停止重新發布。 – 2011-02-15 17:45:02

回答

4

你不能像這樣簡單地重新編譯內存。

在您自己的應用程序(class/struct/etc)中創建對象的結構並使用ReadProcessMemory讀取適當的字節,然後以填充結構的方式來解釋這些字節。

如果您不熟悉以這種方式使用指針,我會禮貌地建議編寫培訓者不適合您,您需要先閱讀一些內容。

我建議學習用C++編寫培訓者,用這種方式思考'不安全'的代碼要容易得多。

1

兩個選項:

  • ReadProcessMemory
  • 加載DLL到遠程過程,即DLL可以隨後直接使用不安全的指針訪問存儲器。
+0

好的。這並不壞。我的意思是第二選擇。我可以將C#DLL注入到不受管理的進程中嗎?如果可能的話,我該如何與該dll溝通? – Hooch 2011-02-15 17:52:42

+0

@Hooch:是的,你可以注入託管的DLL。它曾經被推薦使用,但是每個進程只能使用一個版本的.NET,但對於.NET 4,多個版本可以並排運行,因此它不應該成爲問題。爲了與您的DLL溝通,您擁有所有常見的IPC嫌疑人:套接字,共享內存,管道,內核事件,郵件槽,文件等。 – 2011-02-15 18:46:13

相關問題