Pointer Problem

07/04/2011 17:49 Ludder231#1
Hi,

ich hab die Adresse für die Chatfunktion in dem Spiel "Diablo II" mit Cheatengine rausgefunden.

Jetzt will ich die Adresse halt als Pointer(Wie dieses TuT auch so schön zeigt [Only registered and activated users can see links. Click Here To Register...] ab ca. 1:40.)

Aber wenn ich das alles gemacht hab mit "what writes to this adress" finde ich die Adresse nicht wenn ich sie suche(Hab Hex an)
07/04/2011 18:12 lolkop#2
so sachen wie chat laufen natürlich im normalfall anders ab.

da der chat aus mehreren einträgen besteht, werden adressen in der regel individuell berechnet. dies geschiet in der regel einmalig, sodass man im nachhinein per breakpoints nichtmehr nachvollziehen kann, was denn auf eine bestimmte adresse zugreift

es könnte zb so aussehen:
Code:
mov eax, [edx + edi * 4]
wobei edi in diesem falle der index der jeweiligen textzeile ist...

wie genau das in diablo2 ist kann ich dir nicht sagen. in der regel läuft das ganze jedoch so ab.

um hier die ablaufreihenfolge nachvollziehen zu können, muss man schonmal eine codeanalyse durchführen...
07/04/2011 18:23 Ludder231#3
Quote:
Originally Posted by lolkop View Post
so sachen wie chat laufen natürlich im normalfall anders ab.

da der chat aus mehreren einträgen besteht, werden adressen in der regel individuell berechnet. dies geschiet in der regel einmalig, sodass man im nachhinein per breakpoints nichtmehr nachvollziehen kann, was denn auf eine bestimmte adresse zugreift

es könnte zb so aussehen:
Code:
mov eax, [edx + edi * 4]
wobei edi in diesem falle der index der jeweiligen textzeile ist...

wie genau das in diablo2 ist kann ich dir nicht sagen. in der regel läuft das ganze jedoch so ab.

um hier die ablaufreihenfolge nachvollziehen zu können, muss man schonmal eine codeanalyse durchführen...

Also ich kann in Diablo II in ein Spiel beitreten. Wenn ich dann Enter drücke kommt ein Fenster und ich kann eine Message senden wenn ich erneut Enter drücke. Also gibs keine individuellen Zeug darin oder??

Wenn ich "what writets to this adress" mache kommt in der Extra Info in rot: mov[ordinal10001+97f74],eax
Und dariner die einzufügende Adresse lautet: 00097f74
07/04/2011 18:32 lolkop#4
Quote:
Originally Posted by Ludder231 View Post
Also ich kann in Diablo II in ein Spiel beitreten. Wenn ich dann Enter drücke kommt ein Fenster und ich kann eine Message senden wenn ich erneut Enter drücke. Also gibs keine individuellen Zeug darin oder??

Wenn ich "what writets to this adress" mache kommt in der Extra Info in rot: mov [ordinal10001+97f74],eax
Und dariner die einzufügende Adresse lautet: 00097f74
naja in diesem falle wäre doch
Code:
[ordinal10001+97f74]
die adresse in der sich dein gefundener wert/string befindet, und eax beinhaltet die zu pushende adresse, welche du benötgst.

wenn du jetzt rücklaufend den code analysierst siehst du doch wie eax zustande kommt.

alternativ könntest du natürlich auch einfach genau an dieser stelle eine codecave platzieren, welche den wert aus eax in eine von dir vorher freigegebene speicherregion kopiert.

diesen könntest du dann einfach per readprocessmemory statisch auslesen.
07/04/2011 18:38 Ludder231#5
Quote:
Originally Posted by lolkop View Post
naja in diesem falle wäre doch
Code:
[ordinal10001+97f74]
die adresse in der sich dein gefundener wert/string befindet, und eax beinhaltet die zu pushende adresse, welche du benötgst.

wenn du jetzt rücklaufend den code analysierst siehst du doch wie eax zustande kommt.

alternativ könntest du natürlich auch einfach genau an dieser stelle eine codecave platzieren, welche den wert aus eax in eine von dir vorher freigegebene speicherregion kopiert.

diesen könntest du dann einfach per readprocessmemory statisch auslesen.
Übertreib doch nicht! :D Ich bin anfänger :D Noch nie davon gehört, haste ne erklärung bzw. TuT ?? :D
07/04/2011 19:04 lolkop#6
ich denke wenn du dich weder mit asm noch mit speichernutzung des pcs auskennst, macht es wenig sinn mit dem speicher arbeiten zu wollen :s

nicht falsch verstehen, dies soll keine beleidigung sein, sondern einfach nur der hinweis, dass es sinnvoll wäre dich doch erstmal mit den genannten problemen zu befassen, bevor du versuchst aus einer scriptsprache heraus auf sehr hardwarenaher ebene rumzupfuschen =)
07/04/2011 19:14 Ludder231#7
Also mit memoryread kenn ich mich bisschen aus hab schon was damit gescriptet :)
07/04/2011 19:18 lolkop#8
eine adresse auslesen ist eine sache, komplexe vorgänge auf systemebene verstehen eine ganz andere...

den pointerbaum von gesuchten werten zu untersuchen ist in der regel nur vergeudete zeit, da man mit codecaves dieses vorgang komplett umgehen kann...
07/04/2011 19:19 Ludder231#9
Okay, wenn du meinst mach ich lieber was anderes, trozdem danke für die mühe ;)
07/04/2011 19:24 lolkop#10
schaue dir das ganze doch einmal in einem vernünftigen debugger an, und versuche dir eine einfache codecave dort einzufügen =)

falls du nicht weist was eine codecave ist, dabei handelt es sich lediglich um eine einfache umleitung auf deinen eigenen code =)