Laden...

Variable in anderem Prozess ändern

Erstellt von UZI vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.980 Views
Thema geschlossen
U
UZI Themenstarter:in
189 Beiträge seit 2011
vor 13 Jahren
Variable in anderem Prozess ändern

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

1.044 Beiträge seit 2008
vor 13 Jahren

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

U
UZI Themenstarter:in
189 Beiträge seit 2011
vor 13 Jahren

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

1.130 Beiträge seit 2007
vor 13 Jahren

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

Projekte:Jade, HttpSaver
Zum Rechtschreiben gibts doch schon die Politiker. Aber die bauen auch nur mist!

U
UZI Themenstarter:in
189 Beiträge seit 2011
vor 13 Jahren

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

1.361 Beiträge seit 2007
vor 13 Jahren

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

U
UZI Themenstarter:in
189 Beiträge seit 2011
vor 13 Jahren

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

1.130 Beiträge seit 2007
vor 13 Jahren

😁 schonmal was vom casten gehört? [Hinweis] Wie poste ich richtig? Punkt 1.1

Projekte:Jade, HttpSaver
Zum Rechtschreiben gibts doch schon die Politiker. Aber die bauen auch nur mist!

Hinweis vor 13 Jahren

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)

Thema geschlossen