07.10.2011, 23:32
Geht leider nicht, oder wie würdet hier so ein Pointer schreiben?
Pointer Schreiben?
|
07.10.2011, 23:32
Geht leider nicht, oder wie würdet hier so ein Pointer schreiben?
07.10.2011, 23:40
(07.10.2011, 23:32)chesar schrieb: Geht leider nicht, oder wie würdet hier so ein Pointer schreiben?Hey, ich würde das folgendermaßen machen (Ist nur ein Konzept, Syntax u.s.w musst du natürlich anpassen): ReadProcessMemory, BaseAddress, EndAddress (also die erste Adresse - in deinem Beispiel 0x01E7604C) Das ganze wird dann in EndAddress gespeichert. Dann addierst du auf die EndAddress dein erstes Offset und machst wieder das gleiche. ReadProcessMemory, EndAddress, EndAddress Dann wieder add EndAddress, offset2 und ReadProcessMemory, EndAddress, EndAddress u.s.w bis du das letzte Offset auch durch hast. In MASM sieht das so: [code=ASM] invoke ReadProcessMemory, hProcess, lpAddress, addr Buffer, 4, 0 mov eax, offset Buffer mov eax, [eax] add eax, nOffset1 invoke ReadProcessMemory, hProcess, eax, addr Buffer, 4, 0 mov eax, offset Buffer mov eax, [eax] add eax, nOffset2 invoke ReadProcessMemory, hProcess, eax, addr Buffer, 4, 0 mov eax, offset Buffer mov eax, [eax] add eax, nOffset3 invoke ReadProcessMemory, hProcess, eax, addr Buffer, 4, 0 mov eax, offset Buffer mov eax, [eax] add eax, nOffset4 invoke ReadProcessMemory, hProcess, eax, addr Buffer, 4, 0 mov eax, offset Buffer mov eax, [eax] add eax, nOffset5 mov lpAddress, eax [/code]
"Auf dieser Welt gibt es mehr Scheisse als auf Festivalklos"
08.10.2011, 00:55
(07.10.2011, 22:50)fr33k schrieb: evtl. so: Ich code zwar in Delphi und verstehe eigentlich so gut wie garnichts von VB, aber Entschuldigung das kann meines Erachtens auch nicht funktionieren. Die Sache mit den Pointern ist ja die das man einen "Startpunkt" hat. Das wäre in seinem Falle die Aussage "Homefront.exe++016D8F70". Siehe Beitrag 20. Ausgehend vom Startpunkt ließt man den Speicher ein, dem eingelesenen Wert der ebenfalls eine Adresse darstellt addiert man ein Offset hinzu und ließt diesen Wert (diese Addy) ebenfalls wieder ein. Und je nachdem wieviele Pointer man braucht macht man das mehrere Male. @chesar Ob das Beispiel von Acubra so funktioniert kann ich Dir auch nicht sagen, aber ich kann Dir zeigen wie so eine Codecave aussehen könnte. Die könntest Du dann wenigstens nachvollziehen und so hättest Du erstmal ne Grundlage wie das überhaupt funktioniert. [code=ASM] push eax mov eax, [01E7604C] mov eax, [eax+224] mov eax, [eax+4B0] mov eax, [eax+5C] mov eax, [eax] mov eax, [eax+1D8] Nun steht in EAX die/der Addresse/Wert die/den Du suchst... Abschließend darfst Du auch folgenden Befehl nicht vergessen pop eax[/code] Wie Du siehst... Eine Code Injection mittels Pointern zu realisieren ist nicht der Hit. Sicher wird das für dich nicht großartig hilfreich sein aber ich zeige Dir mal wie da unter Delphi aussehen könnte... [code=Delphi]ReadProcessMemory (ProcOpen, pointer ($01E7604C), @AmmoAddy, 4, ReadWert); AmmoAddy:= AmmoAddy + $224; ReadProcessMemory (ProcOpen, pointer (AmmoAddy), @AmmoAddy, 4, ReadWert); AmmoAddy:= AmmoAddy + $4B0; ReadProcessMemory(ProcOpen, pointer (AmmoAddy), @Ammo, 4, ReadWert); ... ... ...[/code]
Irren ist menschlich. Aber wer richtigen Mist bauen will, braucht einen Computer !!!
Traineranfragen per PM werden prinzipiell gelöscht...
08.10.2011, 02:35
bekomme leider nichts gebacken :(
Wir oder was würdet ihr denn bei solch einer Pointer Adresse machen? Es darum die Munni zu freezen.
08.10.2011, 02:54
(Dieser Beitrag wurde zuletzt bearbeitet: 08.10.2011, 03:19 von iNvIcTUs oRCuS.)
@sILeNt heLLsCrEAm
ja mitlerweile weiss ich auch was er wollte, und ich habe Beitrag Nr. 20 nicht gelesen. ...................... Ich weiss meine Signatur ist zu groß
08.10.2011, 03:19
@fr33k
Schwamm drüber... War ja auch nicht böse gemeint. Wieder lieb??? @chesar Wenns ums freezen eines Wertes geht, würde ich in jedem Fall ne Codecave mit Pointern schreiben so wie ich es aufgezeigt hatte... Genauso funktionieren auch Teile meines Lara Croft Trainers. Das ist die simpelste und einfachste Methode eine Adresse zu manpulieren. Würde ich das ganze vom Trainer aus freezen müsste ich das in eine Timer Prozedur schreiben. Funktioniert zwar auch, ist für mich aber keine saubere Lösung. An dieser Stelle nenne ich immer gerne das Beispiel mit der Health. Wenn man die Health durch den Trainer freezen lässt und der Trainer grade den Wert nicht freezt (also der Timer grade nicht gesetzt ist) und man einen Freien Fall versucht der unweigerlich zum "Tode" der Spielfigur führt, nützt die Timerfunktion des Trainer nicht viel. Und deshalb ist das keine saubere Lösung. Und es gibt auch Möglichkeiten sowas zu umgehen bzw. das dass nicht immer in einem Spiel funktionieren muss. Ich hab es z.b. auch schon bemerkt das ich einen Wert gefunden hab, nehmen wir z.b. wieder die Health, dann versucht man diesen Wert mit Cheat Engine zu freezen und was passiert...? Der Wert nimmt dennoch ab...
Irren ist menschlich. Aber wer richtigen Mist bauen will, braucht einen Computer !!!
Traineranfragen per PM werden prinzipiell gelöscht...
08.10.2011, 03:28
(08.10.2011, 03:19)sILeNt heLLsCrEAm schrieb: Würde ich das ganze vom Trainer aus freezen müsste ich das in eine Timer Prozedur schreiben. Funktioniert zwar auch, ist für mich aber keine saubere Lösung. Hey, @chesar: Lies dich mal in die VB Programmierung ein und du wirst sehr schnell selber eine Lösung finden. sILeNt heLLsCrEAm und ich haben da denke ich etwas Licht ins Dunkel gebracht. @sILeNt heLLsCrEAm: Mal ne Frage, wenn ich via CodeCave eine Addresse "freeze" also immer den gleichen Wert schreibe, geht das dann theoretisch auch "schneller" als über einen Trainer? Ich meine die ReadProcessMemory Aufrufe und dann der WriteProcessMemory Befehl dauern doch länger, als wenn das im Programm selber über die Register geschieht, oder?
"Auf dieser Welt gibt es mehr Scheisse als auf Festivalklos"
08.10.2011, 03:53
(Dieser Beitrag wurde zuletzt bearbeitet: 08.10.2011, 03:53 von iNvIcTUs oRCuS.)
(08.10.2011, 03:28)Acubra schrieb: Mal ne Frage, wenn ich via CodeCave eine Addresse "freeze" also immer den gleichen Wert schreibe, geht das dann theoretisch auch "schneller" als über einen Trainer? Ich meine die ReadProcessMemory Aufrufe und dann der WriteProcessMemory Befehl dauern doch länger, als wenn das im Programm selber über die Register geschieht, oder?Theoretisch, Ja. Praktisch, glaub ich das weniger. Oder hast Du irgendwo noch einen 286er/386er rumgurken? Aber ich glaube das Du damit nicht in den Genuss von Rage, Skyrim und alle "neumodischen" Spiele kommen würdest. Aber das wäre wohl dieselbe Frage wie - Was ist besser? Xor oder Mov? Konkret gesagt... Was ist besser [code=ASM]XOR EAX, EAX // oder MOV EAX, 0[/code] Theoretich ist XOR schneller da es nur 2 Bytes beansprucht. MOV EAX, 0 hingegen beansprucht ganze 5 Bytes und braucht somit mehr Taktzyklen. Aber dem entgegen stehen ja die modernen Chips bzw. Prozessoren von Heute jenseits der 2GHz Grenze. Um konkret auf Deine Frage zurückzukommen. Definitiv Ja. Die ganzen Read Aufrufe brauchen zeitlich gesehen länger. Und wenn Du einen Wert via Codecave freezt kannst Du auch beeinflussen wann dieser gefreezt werden soll bzw. wann dieser gefreezt wird. Die Ammo bräuchte ja z.b. nur gefreezt werden wenn diese auch wirklich nur abnehmen würde. Also irgendwo im Code die Stelle finden von wo aus dieser Wert geschrieben wird und da die Codeinjection machen. Würdest Du den Wert durch den Trainer freezen würde dieser ja permanent manipuliert auch wenns nicht nötig ist.
Irren ist menschlich. Aber wer richtigen Mist bauen will, braucht einen Computer !!!
Traineranfragen per PM werden prinzipiell gelöscht...
08.10.2011, 12:04
Hier ist eine Pointer-Schreib-Funktion
[code=VB] Public Sub Write_Pointer(ByVal WhatToWrite As Int32, ByVal address As Int32, ByVal Offset1 As Int32, Optional ByVal Offset2 As Int32 = Nothing, Optional ByVal Offset3 As Int32 = Nothing, Optional ByVal Offset4 As Int32 = Nothing, Optional ByVal Offset5 As Int32 = Nothing) address = Read_4Byte(address) Dim address1 As Int32 = Read_4Byte(address + Offset1) If Not Offset2 = Nothing Then Dim address2 As Int32 = Read_4Byte(address1 + Offset2) If Not Offset3 = Nothing Then Dim address3 As Int32 = Read_4Byte(address2 + Offset3) If Not Offset4 = Nothing Then Dim address4 As Int32 = Read_4Byte(address3 + Offset4) If Not Offset5 = Nothing Then Write_4Byte(address4 + Offset5, WhatToWrite) Else Write_4Byte(address3 + Offset4, WhatToWrite) End If Else Write_4Byte(address2 + Offset3, WhatToWrite) End If Else Write_4Byte(address1 + Offset2, WhatToWrite) End If Else Write_4Byte(address + Offset1, WhatToWrite) End If End Sub[/code] Obiges einfach in das Trainermodul einfügen und folgendermaßen vom Programmcode aus aufrufen [code=VB]Write_Pointer(999, &H1e7604c, &H224, &H4b0, &H5c, &H0, &H1d8)[/code]
ACHTUNG: Lesen gefährdet die Dummheit
08.10.2011, 14:14
du meinst Write_Byte oder? und nicht Write_4Byte?
Der Name "write_4Byte" wurde nicht deklariert |
Share Thread:
|
Benutzer, die gerade dieses Thema anschauen: |
4 Gast/Gäste |