Grundlegende Farge zu Variablen

11/09/2010 21:16 Missing No#1
Also ich hab schon gegooglet und hab nix gefunden :

wenn man mit CE einen wert eines progs herausgefunden hat ändert er sich ja beim neustart des programms kann man das ändern oder muss man dann mit zeigern arbeiten? o.O


freue mich auf antworten

mfg

MN
11/09/2010 21:46 MrSm!th#2
Den Wert kannst du nur ändern, indem du ihn statisch im Programmcode änderst, sofern er denn statisch im Programm gespeichert ist und nicht zur Laufzeit erst berechent o.Ä. wird.
Zeiger helfen in dem Falle überhaupt nicht weiter.
11/09/2010 21:54 Missing No#3
d.h. wenn ein wert am anfang festgelegt wird und nicht im laufe des "runnen" entsteht ist er nicht statisch? und was mache ich dann um diesen wert bei jedem start des programms direkt wiederzufinden?
Und was tue Ich wenn er nicht statisch ist?

mfg

MN
11/09/2010 22:00 MrSm!th#4
D.h., WENN er beim Start schon festgelegt wird, eher gesagt, schon beim Compilevorgang, dann kannst du ihn permanent ändern, ansonsten, wenn er zur Runtime erst erstellt wird, musst du ihn jedes Mal ändern oder einen etwas komplizierteren Codepatch durchführen.

Einen statischen Wert könnte man zb. recht einfach patchen:

Code:
mov eax, 5
mov [some_address], eax
zu
Code:
mov eax, dein_wert
mov [some_address], eax
Würde der Wert erst später berechnet werden, müsstest du genau den Teil finden (und das ist das schwierigere daran (es ist auch nichts extrem schweres, aber eben schwerer als das obere Beispiel)) und dann mit dem Code ersetzen.

Wenn da zb. irgendwo der Code
Code:
mov eax, [adresse_des_ergebnisses_irgendeiner_rechnung]
mov [some_address], eax
steht, müsste man es genau wie oben aussehen lassen:
Code:
mov eax, dein_wert
mov [some_address], eax
Die Patches kannst du übrigens mit einem Debugger (oder auch direkt einem Codepatcher) deiner Wahl durchführen, am einfachsten wäre es wohl, direkt den CE Debugger zu nehmen.
Da kannst du auch direkt Find out what writes to this Address auswählen, um den Code zu finden, der den Wert schreibt, falls er nicht statisch ist.
11/09/2010 22:03 Missing No#5
also wenn die variable von anfang an feststeht dann wird die speicheradresse auch bei mehrmaligem starten nicht geändert und wenn sie dann erst berechnet wird muss man sie jedes mal neu suchen oder einen programmpacht durchführen..

der programmpatch fällt dann als umschreiben des scripts aus oder wie? / gibt es dafür einen namen für dieses patcheno.O
11/09/2010 22:08 MrSm!th#6
Quote:
Originally Posted by Missing No View Post
also wenn die variable von anfang an feststeht dann wird die speicheradresse auch bei mehrmaligem starten nicht geändert und wenn sie dann erst berechnet wird muss man sie jedes mal neu suchen oder einen programmpacht durchführen..

der programmpatch fällt dann als umschreiben des scripts aus oder wie? / gibt es dafür einen namen für dieses patcheno.O
Quote:
Einen statischen Wert könnte man zb. recht einfach patchen:

Code:
mov eax, 5
mov [some_address], eax
zu
Code:
mov eax, dein_wert
mov [some_address], eax
Würde der Wert erst später berechnet werden, müsstest du genau den Teil finden (und das ist das schwierigere daran (es ist auch nichts extrem schweres, aber eben schwerer als das obere Beispiel)) und dann mit dem Code ersetzen.

Wenn da zb. irgendwo der Code
Code:
mov eax, [adresse_des_ergebnisses_irgendeiner_rechnung]
mov [some_address], eax
steht, müsste man es genau wie oben aussehen lassen:
Code:
mov eax, dein_wert
mov [some_address], eax
Die Patches kannst du übrigens mit einem Debugger (oder auch direkt einem Codepatcher) deiner Wahl durchführen, am einfachsten wäre es wohl, direkt den CE Debugger zu nehmen.
Da kannst du auch direkt Find out what writes to this Address auswählen, um den Code zu finden, der den Wert schreibt, falls er nicht statisch ist.
^da

Die Speicheradresse ändert sich bei statischen Werten nicht, ganz genau.

Die Adresse der Variable kann auch statisch sein und der Wert dynamisch, d.h. der Wert ist nicht schon beim Programmstart drin, sondern wird erst im Laufe des Programms reingeschrieben.
Auch in dem Falle müsste man eben den Code patchen, der die Variable beschreibt, damit der Wert immer dein gewünschter Wert ist und du es nicht immer per CE machen musst.
11/09/2010 22:12 Missing No#7
Code:
mov eax, dein_wert
mov [some_address], eax

also den wert unter die adresse bewegen....

aber wenn ich jetzt etwas habe ein tutorial von hier und ich einen solitär hack geschrieben habe der aber immer umgeschrieben werden muss wenn solitär neugeöffnet wird muss ich solitär dann patchen damit es immer geht oder?


Ach eins noch:

"Damit der wert immer den gewünschten wert hat.."

wärs nicht eig damit der wert immer die gewünschte adreese hat?
11/09/2010 22:18 black0utCpp#8
Ich bin auch nur ein Noob aber ich glaube du solltest mal offsets googeln?
11/09/2010 22:21 Missing No#9
Quote:
Originally Posted by black0utCpp View Post
Ich bin auch nur ein Noob aber ich glaube du solltest mal offsets googeln?
ich hab doch am anfang nach nem namen gefragt^^



EDIT:

aua bas tut weh wenn man wikipedia liest dann musst du nicht nur das googlen was du gegoogelt hast sondern noch viel mehr ._.
11/09/2010 22:30 black0utCpp#10
Auch auf die Gefahr dass ich mich völlig blamiere
Also du hast eine Adresse ,deren Wert du verändern willst
nachdem du das gemacht hast wirst du herausfinden , dass dein hack nur 1mal funktioniert ,da sich ja die Adresse ändert was du jetzt brauchst ist der
wert um den sich die adresse Ändert zum beispiel adr=adr + 3 hier wäre drei der offset.kann sein dass ich nur müll erzähle aber naja...
Edit ich hab schon gesehe. Wie man das in ce macht habs aber leider vergessen wo auf jeden fall brauchst du assembly kentnisse die du ja zu besitzen scheinst
11/09/2010 22:38 black0utCpp#11
Quote:
Originally Posted by Missing No View Post
ich hab doch am anfang nach nem namen gefragt^^



EDIT:

aua bas tut weh wenn man wikipedia liest dann musst du nicht nur das googlen was du gegoogelt hast sondern noch viel mehr ._.
xD ja wiki erklärt ein Fremdwort mithilfe dreier anderer
11/09/2010 22:45 Missing No#12
Quote:
Originally Posted by black0utCpp View Post
Auch auf die Gefahr dass ich mich völlig blamiere
Also du hast eine Adresse ,deren Wert du verändern willst
nachdem du das gemacht hast wirst du herausfinden , dass dein hack nur 1mal funktioniert ,da sich ja die Adresse ändert was du jetzt brauchst ist der
wert um den sich die adresse Ändert zum beispiel adr=adr + 3 hier wäre drei der offset.kann sein dass ich nur müll erzähle aber naja...
Edit ich hab schon gesehe. Wie man das in ce macht habs aber leider vergessen wo auf jeden fall brauchst du assembly kentnisse die du ja zu besitzen scheinst
ja die besitze ich.. ein wenig

so etwas habe ich auch gelsen aber um es mal zu verallgemeinern hier eine frage:


Ich habe beim scripten eines progs eine variable erstellt nun weise ich ihr den wert 1 zu kompiliere das org und starte es
benutze CE und finde den wert 1 kann ihn verändern, tiefkühlen, usw.

wenn ich das prog schliesse bleibt der wert auf der selben speicheradressen wenn ich es neu starte?




Nun habe ich ein prog wo es eine var1 var2 und var3 gibt var1 ist 1- var 2 ist 2
nun will ich den wert var3 (var1 x var2) haben , der dann auch letztendelich angezeigt wird nun suche ich diesen wert und finde ihn. ich veränder ihn usw.

nun starte ich das prog neu und der wert befindet sich nciht an der selben stelle wieder, oder?
11/09/2010 22:58 black0utCpp#13
Puh also wissenswert ist erstmal,dass jede Variable ,die du deklarierst
automatisch eine Speicheradresse im RAM zugeordnet bekommt.Den RAM kann man sich wie eine rießige Bibliothek vorstellen.Deiner Variable wird dann ein Fach in dieser Bibliothek (.was für ein Metapher) sein und dieses fach findest du über die überschrift /Speicheradresse.

So nun zu deinen Fragen

Dass kannst du alles selber rausfinden deklariere einfach deine variablen
zb int intvar;
dann tippst du ein
cout<<"Speicheradresse von imtvar:"<<&intvar
(&=unärer speichoperator aber das sollte ja klar sein :D)
jetzt führst du das programm mehrmals aus und schaust ob sich die Speicheradresse
ändert

Sorry ich tippe das mit meinem Ipod :(
11/09/2010 23:02 Missing No#14
ich hab es ausgetestet sie tuen es nicht beim 2. mal starten hatt ce nur noch fail angezeigt (auch bekannt als ??) d.h. eig muss man das bei jeder varable umschreiben man jz bin ich verwirrt xD

edit:

achso und bei einer festplatte kann man sich das vorstellen wie ein buch- WTF? die festplatte steckt im ram ich muss meinen PC umbauen ^^
11/09/2010 23:05 black0utCpp#15
Hm darüber muss ich schlafen xD