Hallo,
ich bin neu hier, deshalb schonmal entschuldigung, wenn ich was falsch mach. =)
Es geht um folgendes:
Ich möchte einen Trainer für ein Spiel programmieren und das mit der Adresse hab ich schon alles kapiert (benutze CheatEngine).
Aber jetzt möchte ich mit C# die Variable umschreiben.
Leider spuckt Google nur Sachen aus, die eig. auf Englisch sind.
Hab schon von WriteToAddress(); und ReadFromAddress(); gehört.
Wär nett, wenn´s ne Antwort gäb
MFG
Hallo UZI,
was genau ist dein Problem? Was möchtest du wissen? Genau wie du es bisher imer gemacht hast, machst du es auch. Du hast Methoden, mit denen du im Prozess schrieben kannst. Wenn du die brauchst, verwendest du sie. Du findest zu solchen Themen - wie du schon sagtest - überwiegend Informationen auf Englisch. Klar, Englisch ist die die Sprache für Themen rund um Programmierung. Siehe auch [Hinweis] Wie poste ich richtig? Punkt 5.
zero_x
zero_x | <span style="font-size: 10;">my</span><span style="font-size: 10;">CSharp</span><span style="font-size: 10;">.de</span> - gemeinsam mehr erreichen
Für längere Zeit inaktiv.
Ok danke für die schnelle antwort:
Hab jetzt nochmal einen code rausgesucht:
public int WriteByteArray( IntPtr BaseAddress, byte [] NewVal )
{
// Return Value
int ReturnVal;
// Write Memory Byte Array
ReturnVal = WriteProcessMemory( this.hProcess, BaseAddress, NewVal, NewVal.Length, out this.BytesWritten );
return this.BytesWritten;
}
fragen:
Wo genau gebe ich den process an?
Wo den wert, wo die adresse?
Was ist "this.hprocess" und out this.byteswritten?
Was ist intptr?
Wenn ich meine addressen suche kommt z.b. 0CB34727 raus doch meist sehe ich die adressen in folgender form: 0xCB692635
was ist da der unterschied und wie bekomme ich die eine in die andere adresse
Wo genau gebe ich den process an?
hprocess
Das ist ein handle, das mit der openprocess-methode erzeugt wird
Wenn du es in c# benutzen willst: http://www.pinvoke.net/default.aspx/kernel32.openprocess
Doku: OpenProcess Function
Wo den wert, wo die adresse?
BaseAddress is die addresse, NewVal der wert (suche -> bitconverter)
Was ist "this.hprocess" und out this.byteswritten?
Out heißt, dass ein zeiger auf die variable übergeben wird. mithilfe dieses zeigers wird der inhalt der veraiablen verändert. Also eine wertrückgabe.
Was ist intptr?
Meißt eine speicheraddresse, sone art zeiger.
Wenn ich meine addressen suche kommt z.b. 0CB34727 raus doch meist sehe ich die adressen in folgender form: 0xCB692635
0x heißt hexadezimal
was ist da der unterschied und wie bekomme ich die eine in die andere adresse
ohne 0x wird is fälschlicherweise als bezeichner interpretiert
OK danke erstmal :
ich weiß es ist nicht gern gesehen nach beispielen zu fragen aber ich muss es trotzdem, weil ich grad überhaupt nicht weiterkomm.
Angenommen ich will den wert 100 in die adresse 01EFD56C des prozesses "form1.exe" schreiben
ich konvertier den wert so?:
byte[] abc = BitConverter.GetBytes(100);
den prozess hol ich so?:
Process[] abcd = Process.GetProcessesByName("form1.exe");
jetzt muss ich noch die hexadezimale adresse und den handle vom prozess bekommen.
Wie mach ich das am besten?
Danke schonmal im Vorraus
UZI
Hi
such mal (hier im Forum) nach WriteProcessMemory. Das ist der für dich zentrale WinApi Befehl. Auch bei Codeproject müsstest du einschlägige Artikel finden, die sich genau um solche fremd-Programm-Manipulationen drehen.
Beste grüße
Zommi
danke ich hab jetzt was gefunden mein code sieht jetzt so aus:
Process[] abc = Process.GetProcessesByName("form1.exe");
IntPtr hProc = OpenProcess(0x001F0FFF, false, abc[0].Id);
int address = 0xEDD56C;
byte[] wert = BitConverter.GetBytes(100);
int buffer;
WriteProcessMemory(hProc, (IntPtr)address, wert,wert.Length , out buffer);
wenn ich ihn kompilieren will kommt als fehlermeldung:> Fehlermeldung:
Die beste Übereinstimmung für die überladene blablabla.Form1.WriteProcessMemory(System.IntPtr, System.IntPtr, byte[], System.UIntPtr, ref uint)-Methode hat einige ungültige Argumente.
4-Argument: Kann nicht von "int" in "System.UIntPtr" konvertiert werden.
5-Argument: Kann nicht von "out int" in "ref uint" konvertiert werden.
danke schonmal
UZI
😁 schonmal was vom casten gehört? [Hinweis] Wie poste ich richtig? Punkt 1.1
Wir erwarten schon ein wenig Eigeninitiative und das man weiß, mit welchen argumenten eine Methode korrekt aufgerufen wird.
Siehe: [Hinweis] Syntaxfehler selbst lösen (Compilerfehlermeldungen)