MemoryEdit mittels DLL injection

01/24/2008 15:42 reijin#1
Soo...
ich will mittels dll injection den Memory eines programmes verändern.
Das tolle ist ja, dass die dll dank der dll injection zugriff auf den speicher des programms hat. Die injection an sich ist kein problem...
allerdings, wenn ich nun den wert für eine variable ändern lasse, scheint es sowas wie nen overflow zu geben. Jedenfalls ist die Zahl, die die variable eig enthalten sollte
bsp: eig sollte 250 drin sein und cheatengine sagt: 371287391.
habe also die adresse der variable im vorraus bestimmt. und nach der injection ändert sich der wert dann in diesen riesigen.
Was mach ich denn falsch?
atm sieht mein code so aus:
PokeF(4302896, 250)

wobei die erste zahl die von HEX nach Dez konvertierte zahl ist - also die speicheradresse, die mir auch cheatengine ausgegeben hat^^.

hoffe ich hab halbwegs verständlich beschrieben und danke schonmal ;)

//reijin
01/24/2008 18:31 emjay#2
imho solltest erstmal lernen was du da machst, deine frage hört sich echt komisch an.

ich würde sagen dein speicherbereich wird irgendwoher neubeschrieben.. liegt evtl zwischen 2 werten... was auch immer. nen writebreakpoint auf den bereich sollte dir genauere info geben.
01/24/2008 19:25 reijin#3
stimmt... aber meine methode ist im grunde:
learning by doing mittels der trial and error methode... hat bisher gut funktioniert
01/25/2008 22:07 reijin#4
Quote:
Originally Posted by qhr4s3 View Post
Nullus te prohibit.
Es ist dir keineswegs verboten auf den Speicher auch von außerhalb zuzugreifen.

Edit: Achja, du hattes ja noch eine Frage..
Naja, ist mir nun auch egal.
zum ersten teil: das weiß ich
zu deinem edit:
was soll das jetzt heißen? :rolleyes:
01/27/2008 16:15 emjay#5
erklärs mal genauer...

du legst eine variabel an......? also in dem speicherbereich deiner dll oder hast du dir eine codecave im targetprocess gesucht und speicherst dort deine werte? bist du dir sicher, dass, falls du im targetprocess arbeitest, den richtigen wert manipulieren willst oder bist du gar im codesegment?

ich verstehs nicht ganz, du willst einen einfach wert verändern aber dafür injectest du?
hast du noch vor irgendwelchen code zu hooken oder wieso dieser weg?

ka ich stell mir das so vor:
targetprocess starten
codecave suchen (mit sheeps array of sunshine z.b.)
wert/code in die codecave speichern
fertig :/
01/27/2008 19:21 reijin#6
Quote:
Originally Posted by emjay View Post
erklärs mal genauer...

du legst eine variabel an......? also in dem speicherbereich deiner dll oder hast du dir eine codecave im targetprocess gesucht und speicherst dort deine werte? bist du dir sicher, dass, falls du im targetprocess arbeitest, den richtigen wert manipulieren willst oder bist du gar im codesegment?

ich verstehs nicht ganz, du willst einen einfach wert verändern aber dafür injectest du?
hast du noch vor irgendwelchen code zu hooken oder wieso dieser weg?

ka ich stell mir das so vor:
targetprocess starten
codecave suchen (mit sheeps array of sunshine z.b.)
wert/code in die codecave speichern
fertig :/
joa
alles klar... ^^
03/11/2008 12:31 Bot_interesierter#7
Wenn du Code im Speicher bereich eines anderen Prozesses ausführst, dann hast du auf seine Variablen den Zugriff den du von deinem Prozess erwarten würdest, sprich du kannst über eigene Pointer ohne probleme auf Adressen zugreifen
typ *meinhackpointer;
meinhackpointer=Adressewoichwasändernwill;
*meinhackpointer=geänderterwert;
so würde das aussehen in c++, wenn der code im zielprozess läuft dan macht er folgendes, er erstellt einen Pointer auf die Adresse die du ändern magst, dann kannst du sie einfach über den Pointer beschreiben oder auslesen, du musst das natürlich an das was du machst anpassen, wenn du bsp weise einen StatischenPointer kennst von dem Prozess und die willst die adresse auf die er Zeigt ändern, dann sieht das so aus
typ *pointeraufdenpointer;
pointeraufdenpointer=Pointeradresse;
//jetzt hast nen pointer auf den Pointer, imba ne :-9?
typ *nochnpointer;
nochnpointer=*pointeraufdenpointer; */hier wird die adresse auf die der StatischePointerzeigt noch einem pointer zugewiesen*/
*nochnpointer=250;
Du solltest dir immer im klaren sein mit was für Variablen Typen du arbeitest und was Pointer sind und wie sie in deiner sprache verwendet werden.
für deine spezielle adresse würde das so aussehen
typ *meinzeiger;
meinzeiger=0x41A830; //schreib Adressen in hex
*meinzeiger=250
Dieses kurze code stück wird genau das machen was du willst, vorrausgesetzt der Typ stimmt und es wird auch ausgeführt.