Read/WriteProcess Memory

06/28/2013 18:58 [uLow]NTX?!#1
Guten tag, ich möchte bei einem spiel Via Read/writeprocessmemory dei value einer Addresse auf 1 bzw 0 abändern

Ich habe dazu auch die Pointer, jedoch will es nicht funktionieren und ich weiß nicht warum.

ich habe es auch schon mit VirtualprotectEx probiert.

Code:
PHP Code:
void Wallhack(bool enable){
    
DWORD dw;
    
DWORD addy1;
    
DWORD addy2;
    
DWORD addy3;
    
DWORD a 0;
    if(
enable){ 1; }
    
ReadProcessMemory(GetCurrentProcess(),(void*)0x7E3E20,(void*)addy1,4,&dw);
    
ReadProcessMemory(GetCurrentProcess(),(void*)(addy1+0x8),(void*)addy2,4,&dw);
    
ReadProcessMemory(GetCurrentProcess(),(void*)(addy2+0x680),(void*)addy3,4,&dw);
    
ReadProcessMemory(GetCurrentProcess(),(void*)addy3,(void*)addy3,4,&dw);
    
WriteProcessMemory(GetCurrentProcess(),(void*)addy3,(void*)a,4,&dw);

Ich wäre sehr über Hilfe erfreut!

Mfg

NTX
06/28/2013 19:32 Padmak#2
Quote:
Originally Posted by NTX?! View Post
jedoch will es nicht funktionieren und ich weiß nicht warum.
Das wissen wir auch nicht. Könntest du deinen Fehler bitte *etwas* weiter ausholend beschreiben, als nur "geht nicht"

€:
Probier mal statt (void*)(addy1 + 0x08) einfach (void*)((*(DWORD*)addy1) + 0x08) aus

Padmak
06/28/2013 19:40 snow#3
1) Ist es Absicht, dass du GetCurrentProcess() nutzt? Hast du eine Dll oder eine Konsolenanwendung?
2) Dein Code mit dem ReadProcessMemory ist doch recht unübersichtlich, evtl. kannst du das ja mal in Assembly-Notation oder so aufschreiben, dann fallen einem meistens die Fehler eher auf.
3) Deine Adresse ist sicher gültig? Ist sie evtl. ein Offset, das du auf die BaseAddress aufrechnen musst?
4) Okay, VirtualProtectEx spricht für "von außen" modden. Joa, da brauchst du ein Handle zum Prozess. :/

Quote:
Probier mal statt (void*)(addy1 + 0x08) einfach (void*)((*(DWORD*)addy1) + 0x08) aus
Da schmiert ihm im schlimmsten Falle das Programm ab, da wir hier mit den vielen Infos auch nicht sagen können, ob er jetzt in der Zielanwendung ist oder nicht. :/
06/28/2013 19:43 Padmak#4
Wo du auch wieder Recht hast. Auf das GetCurrentProcess() hab ich gar nicht geachtet, ich dachte der wird schon wissen was er da tut :D
Bitte einfach mal sagen ob du eine DLL nutzt oder nicht, falls dem so wäre könntest du auch einfach memcpy nehmen

Padmak
06/28/2013 19:58 [uLow]NTX?!#5
Quote:
Originally Posted by snow911 View Post
1) Ist es Absicht, dass du GetCurrentProcess() nutzt? Hast du eine Dll oder eine Konsolenanwendung?
2) Dein Code mit dem ReadProcessMemory ist doch recht unübersichtlich, evtl. kannst du das ja mal in Assembly-Notation oder so aufschreiben, dann fallen einem meistens die Fehler eher auf.
3) Deine Adresse ist sicher gültig? Ist sie evtl. ein Offset, das du auf die BaseAddress aufrechnen musst?
4) Okay, VirtualProtectEx spricht für "von außen" modden. Joa, da brauchst du ein Handle zum Prozess. :/



Da schmiert ihm im schlimmsten Falle das Programm ab, da wir hier mit den vielen Infos auch nicht sagen können, ob er jetzt in der Zielanwendung ist oder nicht. :/
Zu 1) ja ist ein DLL, ist also absichtlich so.
Zu 2) Assembly-Notation ? Sorry höre ich das erste mal :D
Zu 3) Ja sie ist Gültig in CheatEngine Klappt alles Wunderbar
Zu 4) Ich weiß, nur war des "mein letzter" versuch

In übrigen versuche ich einen Wallhack auf Shrio2 (metin2 ) umzusetzen. Klappt in Ce auch wunderbar, nur an der Umsetzung in Code scheitert es.


€: Der obige "code"-Ausschnitt ging auch nicht.

Wenn niemand weiter einen Lösungsweg weiß, werde ichs einfach in ASM machen.
06/28/2013 20:18 Padmak#6
Probier es mal so:
Code:
void Wallhack(bool enable)
{ 
    DWORD addy1; 
    DWORD addy2; 
    DWORD addy3; 
	
    addy1 = *(DWORD*)0x7E3E20;
    addy2 = *(DWORD*)addy1 + 0x08;
    addy3 = *(DWORD*)addy2 + 0x680;
    *(DWORD*)addy3 = (DWORD)enable;
}
Ich hab in Metin noch nie Wallhacks gemacht, ob es so stimmt kann ich also nicht sagen (ist btw Browsergeschrieben & ungetestet)

Padmak
06/28/2013 20:19 Dr. Coxxy#7
im eigenen prozess rpm und wpm, bei euch hakts aber noch, oder?
Code:
void Wallhack(bool enable)
{
	*(**(DWORD***)((*(DWORD*)((*(DWORD*)0x7E3E20) + 0x8)) + 0x680)) = enable ? 1 : 0;
}
der fehler ist btw. dass du in rpm nix in einen buffer ausgibst, sondern den INHALT der variablen als void* castest (nein, ich weiß auch net wieso das noch keinem vorher aufgefallen ist....).
06/28/2013 20:44 Padmak#8
Bei uns? Der einzige der es so machen wollte, war er selbst.
Den Code am Anfang hat sich glaub ich keiner so richtig angesehen, weil er offensichtlich falsch ist. Außerdem ist doch dein Code im Prinzip exakt der gleiche wie meiner, oder nicht?

Padmak
06/28/2013 20:57 Dr. Coxxy#9
Quote:
Originally Posted by Padmak View Post
Bei uns? Der einzige der es so machen wollte, war er selbst.
jö, war vllt nen bissle blöd ausgedrückt, aber ihr habt ihn auch net wirklich direkt korrigiert ;)

Quote:
Den Code am Anfang hat sich glaub ich keiner so richtig angesehen, weil er offensichtlich falsch ist.
nö, falsch ist der nicht unbedingt, sollte auch theoretisch funzen wenn ers mitm buffer fixt.

Quote:
Außerdem ist doch dein Code im Prinzip exakt der gleiche wie meiner, oder nicht?
nein, du hast einmal dereferenzieren vergessen, oder op hats 1x zuviel gemacht, bin mir da nicht so sicher, ob er weiß, was er da eigtl tut. (außerdem war dein post noch net da, als ich auf antworten geklickt habe, sonst hätte ichs korrigiert).

@Topic:
Ein screenshot von dem CE pointer wäre nett, dann könnten wir dir korrekten code geben, ansonsten einfach mal meinen code ausprobieren, wenn der nicht funzt, dann einmal
Code:
*(*(DWORD**)((*(DWORD*)((*(DWORD*)0x7E3E20) + 0x8)) + 0x680)) = enable ? 1 : 0;
06/28/2013 21:01 Padmak#10
Ich hab eigentlich nur seinen Code "umgeschrieben", in Ermangelung eines CE-Screenshottes bzw. eigener Erfahrungen mit Wallhacks in Metin konnte ich ihn nicht weiter korrigieren.
Außerdem stünde dem TE immer noch Debugging als Unterstützung zur Seite, davon könnte er auch Gebrauch machen, um zu identifizieren bis zu welchem Level was funktioniert etc.

Padmak
06/28/2013 21:09 Dr. Coxxy#11
Quote:
Originally Posted by Padmak View Post
Ich hab eigentlich nur seinen Code "umgeschrieben",
wenn mein hirn von dem pointermist nicht schon vollkommen verkocht ist (was gut sein kann), hast du die zeile
Code:
ReadProcessMemory(GetCurrentProcess(),(void*)addy3,(void*)addy3,4,&dw);
vergessen.
06/28/2013 21:13 Padmak#12
Ähm.. kann natürlich sein, dass ich mich vertu, aber ist das nicht "*(DWORD*)addy3"?
Kann natürlich absolut sein, dass das falsch ist.. so sonderlich gut kann ich das au nich :D

Padmak
06/28/2013 21:23 [uLow]NTX?!#13
nagut soweit hat bisher nix geklappt :/ ich werde des dann über ASM lösen..

Damals wo ich mit C# gearbeitet habe möchte ich ASM nie, jeze mag ich des Pointer gedönse nicht xd
06/28/2013 21:27 Dr. Coxxy#14
Quote:
Originally Posted by NTX?! View Post
nagut soweit hat bisher nix geklappt :/ ich werde des dann über ASM lösen..

Damals wo ich mit C# gearbeitet habe möchte ich ASM nie, jeze mag ich des Pointer gedönse nicht xd
poste einfach einmal nen screenshot vom CE pointer, dann können wir dir auch helfen...
06/28/2013 21:35 [uLow]NTX?!#15
[Only registered and activated users can see links. Click Here To Register...]