[HELP] Find a pointer in League of Legends

02/02/2014 14:14 nerdsupreme#1
--------------------------
02/02/2014 19:11 Mostey#2
Was ist da so schwer? Finde eine statische Base für den Pointer und dann hast du's doch?
02/03/2014 15:13 nerdsupreme#3
----------------
02/03/2014 18:44 Mirco'#4
Für mich sieht es einfach so aus als ob du Random einen Pointer auswählst. Ich meine du findest noch 158 andere Ergebnisse und pickst dann einfach den Obersten. Wieso du dies tust weiß ich nicht, vielleicht weil er so toll aussieht. Hast du überhaupt eine Idee was du anfangen willst oder Scannst du einfach drauflos? Klar, man sagt das man mit Probieren "weit" in GameHacking kommt bzw. was neues Herausfinden kann, dies ist mir aber etwas zu gewagt. Vielleicht solltest du erstmal "leichtere" Spiele nehmen und dort versuchen einfache Memory Hack's zu Programmieren. Am besten Offline Spiele.
Es kann sein das ich mich Irre, da ich selber ein Anfänger bin.
02/03/2014 20:02 nerdsupreme#5
----------------------
02/04/2014 06:22 th0rex#6
Und was bringt dir das ? Musst du dann nicht so große Zahlen zur Base drauf rechnen ?
02/04/2014 08:22 Mostey#7
Quote:
Originally Posted by nerdsupreme View Post
Der erste pointer ist am nächsten an dem base pointer.
Das spielt hier aber keine Rolle.

Grundsätzlich kann man erkennen, das du hier von den 150 gefundenen Adressen eine dynamische auswählst, und darüber versuchst, etwas zu finden. (hab ab da nicht mehr weiter geschaut)

Setz dir erstmal Hotkeys, die machen es dir nämlich viel leichter und unkomplizierter. Da du hier anscheinend nur einen bool suchst, der angibt ob du in der Charakterauswahl bist, kannste den natürlich schlecht ändern um wirklich sicher zu gehen, das es sich auch wirklich um die gesuchte Adresse handelt. Du könntest zwar den Wert ändern, das würde aber in den meisten Fällen keinen Effekt haben.

Von so einer Ausgangslage würde ich so lange suchen, bis ich wirklich nur etwa 5 Adressen übrig habe. Die kann man dann auch mal einzelnd durchgehen und checken, wo die Assembleranweisungen (s. Rechtsklick -> What writes/accesses this address) am naheliegendsten sind.

Allerdings würde ich so erst gar nicht anfangen. Erstmal was simples suchen (wie beispielsweise die HP oder Mana) und dann von dort aus die statische Base suchen. Je nachdem könnte es hier schon sein, das man die Playerbase gefunden hat und einfach das zu addierende Offset auf die Playerbase weglässt. Ist aber von Game zu Game unterschiedlich, bisher hatte ich aber fast nur (CSS ausgenommen) Fälle, in denen die Base der Spieler immer gleich geblieben ist.

Mit der Playerbase könntest du deine Resultate dann dementsprechend validieren.
02/04/2014 16:18 nerdsupreme#8
-----------------------
02/04/2014 21:15 ​Tension#9
Was gibt es daran nicht zu verstehen?
zumal der code normalerweise so lauten müsste:
mov eax, [eax+E8]
Nun setzt du einfach einen BreakPoint auf die Adresse darüber und du kannst sehen welchen Wert EAX hat, somit hast du die Adresse und das Offset.
02/04/2014 21:43 nerdsupreme#10
-------------------
02/04/2014 21:58 Padmak#11
Vielleicht kann ich auch mitkonstruieren:
Die Anweisung oben accessed nicht EAX mit sich selbst, sondern liest den Wert in EAX aus und rechnet 0xE8 drauf -> Offset
EAX könnte also EIN Basepointer sein, 0xE8 ist das Offset dazu.

Dass du aber bei Pseudocode korrigiert wirst ist ganz logisch, wenn du nicht dazuschreibst dass es Pseudocode ist^^

Padmak
02/04/2014 22:06 nerdsupreme#12
ich habe auch nicht gesagt dass eax irgendetwas accessed ;)
02/04/2014 23:53 ​Tension#13
Quote:
Originally Posted by nerdsupreme View Post
ich habe mich scheinbar falsch ausgedrückt.

eax ist der gleiche wert wie der pointer. also der pointer 'accessed' sich quasi selber mit der instruction seine eigene addresse + E8 zu rechnen.

Edit:// tut mir leid aber ich muss dir einfach mal sagen dass klugscheißerei und damit meine ich die korrektur der klammern meines pseudocodes einfach bisschen kindisch ist. das nervt(mich).
Er sagt dir das EAX den Wert hat, da die Adresse schon "ausgeführt" worden ist.
Wie gesagt setz einen Breakpoint davor, guck dir den Wert von EAX an und du hast die Adresse mit dem Offset E8.

Und nein finde ich nicht, es war auch nicht böse gemeint nur ein Hinweis da die Klammen bewirken das du den Wert aus der Adresse von EAX+E8 holst was in deinem Fall 08820960 entspricht.

Hier ist ein Beispiel:
Code:
invoke GetProcessHeap
invoke HeapAlloc, eax, HEAP_ZERO_MEMORY, 0FFh //Reserviere 255 Bytes ( Die Adresse dazu ist nun in EAX und sie ist Dynamisch )
mov dword ptr ds:[eax+0E8h], 600 //Schiebe den Wert 600 in die Adresse von EAX+E8 
mov eax, dword ptr ds:[eax+0E8h] //Schiebe den Wert von EAX+E8 in EAX ( was nun deinem Fall entspricht.
Ich hab CheatEngine an das Programm geheftet und mir das angeguckt und hab nach 600 gesucht, anschließend hab ich "what access this address" gemacht und da kam die Zeile mit
Code:
mov eax, dword ptr ds:[eax+0E8h]
und EAX hatte den Wert 0x258 , dann hab ich einfach einen BreakPoint vor die Instruction gesetzt und EAX hatte die Adresse zum Speicher.