Laden...

WinAPI ReadProcessMemory

Erstellt von Term!nX vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.818 Views
Term!nX Themenstarter:in
104 Beiträge seit 2007
vor 15 Jahren
WinAPI ReadProcessMemory

Hi,

ich schreibe hier übungshalber einen Trainer für 1602 mit GUI.

In eine ListView werden alle laufenden Anno1602 Prozesse aufgezählt. In jedem ListViewItem ist im item.Tag das jeweilige Processobjekt gespeichert.

Da die Adresse des Golds statisch ist, müsste es gar nicht so schwer sein.

Mein Problem ist, dass ich nicht den blassesten Schimmer habe, wie ich die WinApi in C# benutzen kann. Habe zumindest das hier gefunden:


[DllImport("kernel32.dll")]
        static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress,
           byte[] lpBuffer, UIntPtr nSize, out IntPtr lpNumberOfBytesWritten);

Muss ich irgendwie das Processobjekt aus dem item.Tag in ein IntPtr-Objekt konvertieren? Wie gesagt, ich weiss überhaupt nicht was ich tun kann 🙂

Grüße

2.760 Beiträge seit 2006
vor 15 Jahren

Hat wohl gerade jemand für Windows Pinball gemacht:
schnelles buttonklicken bricht threading.timer ab

Ansonsten kann ich dir das "Memory scanner in C#" oder so ähnlich Projekt auf Codeproject ans Herz legen.

Term!nX Themenstarter:in
104 Beiträge seit 2007
vor 15 Jahren

Danke, kann ich mir wenigstens mal was zu anschauen.

Habe mittlerweile:

IntPtr phdl = OpenProcess(0x10, false, (uint)po.Id);

Gibt auch ein Handle != null zurück, allerdings weiss ich noch nicht genau, was ich da überhaupt getan habe 😉

915 Beiträge seit 2006
vor 15 Jahren

Hrm, kann dir nur nahe legen mal die neue Windows SDK for Windows Server 2008 and .NET Framework 3.5 herunterzuladen. In den Dokus für Win 32 findest eigentlich immer eine sehr exakte Beschreibung der jeweiligen Windows API Funktionen 🙂

Dauert nur nen weilchen mit dem ziehen sind 1,3 GB mit allen drum und dran, die Windows SDK Doku sollte etwas kleiner sein, falls nur diese möchtest - kannst das über den Webinstaller vorher dann auswählen.

Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(

643 Beiträge seit 2006
vor 15 Jahren

FindWindow()
(Diese Funktion liefert dir den Process Handle des zu schreibenden Processes. Diesen Handle brauchst du für GetWindowThreadProcessId um die ProcessID zu bekommen die du wiederum für OpenProcess benötigst)

string lpClassName
(Der Klassenname des Processes. Ich würde über den Window Title suchen deshalb kanst du bei diesen Parameter 0 übergeben)

string lpWindowName
(In diesen Parameter übergibst du den Window Title der Anwendung in die du schreiben möchtest).

(Liefert dir über den Parameter lpdwProcessId die ProcessId die du für OpenProcess benötigst.)

IntPtr hWnd
(Der Handel des zu schreibenden Processes)

out uInt lpdwProcessId
(Die ProcessId bekommst du über diesen Parameter)

**:::

int dwDesiredAccess
(Hier kanst du angeben welche Rechte du brauchst. Ich würde PROCESS_VM_WRITE (0x0020) verwenden)

bool bInheritHandle
(Wenn der True ist, werden Processe die in diesen Process gestart wurden den Handle erben. Kann dir egal sein deshalb auf 0)

uint dwProcessId
(Die Prozess ID des Processes das du öffnen zum schreiben öffnen möchstest)

(WriteProcessMemory verwendest du um in den Process zu schreiben)

IntPtr hProcess
(Der Handle für den Process im den du schreiben möchtest)

IntPtr lpBaseAddress
(Die Adresse im Process an die du schreiben möchtest)

byte[] lpBuffer
(Die zu schreibenden Bytes)

int nSize
(Die anzahl der Bytes die zu schreiben sind)

out IntPtr lpNumberOfBytesWritten
(Die anzahl der Bytes die geschrieben wurden)

Die Bytes die verändert werden müssen findest du mit verschieden Programmen. Leider fällt mir jetzt keiner der Namen ein. Ich trage Sie natürlich nach falls sich das ändern sollte.

L
18 Beiträge seit 2008
vor 15 Jahren

Meinst du mit den Programmen TSearch oder Artmoney?

643 Beiträge seit 2006
vor 15 Jahren

TSearch 🙂