Speedhack programmieren

01/15/2011 20:11 0rc#1
Hallo wie wird generell vorgegangen wenn man einen Speedhack programmieren will ?

Sucht man sich mit einem Debugger die Stelle raus wo im Programm festgellegt wird wie schnell die Spielfigur laufen soll und verändert dann einfach den Wert ?

Pseudocode:
set_speed ( 200 );


Oder wie läuft das würde mich echt mal interessieren.

Ich würde so etwas mal gerne für einen alten Einzelspieler Shooter programmieren.

Programmierkenntnisse hab ich in: C , C++ und Assembler naja und etwas Reverse Engineering Erfahrung.
01/15/2011 20:20 black'coockie#2
Nein! Der weis ja nnicht bei welchen Prozess bzw bei welchen Fenster oder so er den Speed hoch machen sollte ich möchte es auch habe habe den code auch schon probiert aber dann ist mir aufgefallen der weis ja nicht bei welchen er den speed erhöht habe schon set_speed(1800) on Process ("Metin2") probiert aber ging auch net :P Also der geht sicher nicht!
01/15/2011 20:30 0rc#3
O_o

Ehm ich hab geschrieben Pseudocode das dass z.b. im Programm steht und man einfach den Funktionsparameter verändert.

Naja hier hab ich gerade noch was zu dem Thema gefunden.

[Only registered and activated users can see links. Click Here To Register...]


QueryPerformanceCounter
[Only registered and activated users can see links. Click Here To Register...]

Ich experimentier mal etwas rum.



Auf einen bestimmten Prozess zu zugreifen ist nicht das Problem.^^

FindWindow
OpenProcess

da gibts genug möglichkeiten ...
01/15/2011 20:34 black'coockie#4
Ok wenn du was hast sags bescheid wie du es gemacht hast :P und wenn ich was finde sage ich bescheid :D
01/16/2011 12:37 .BritainAndy#5
Quote:
Originally Posted by xxxcuneytxxx View Post
Nein! Der weis ja nnicht bei welchen Prozess bzw bei welchen Fenster oder so er den Speed hoch machen sollte ich möchte es auch habe habe den code auch schon probiert aber dann ist mir aufgefallen der weis ja nicht bei welchen er den speed erhöht habe schon set_speed(1800) on Process ("Metin2") probiert aber ging auch net :P Also der geht sicher nicht!
In metin2 einen Speedhack zu erstellen ist das simpleste was es gibt.

Es geht TAUSEND tutorials wie man die Bewegungsmemoryaddress findet mit CheatEngine auf Youtube.
Schuhe ausziehen, den Wert (weiß ihn nicht mehr ausm kopf, 16256 oder so) scannen. Schuhe anziehen, da der bew. speed erhöht worden ist "has increased" einstellen und wieder nach 16256 suchen. Bis du nurnoch eine oder ich sage imme rmaximal 3 addressen hast. Dann suchst du den pointer für eine Addresse, und legst in deinem Source eine Variable für die addresse an (kp welche sprache du benutzt), und dann schreibst du halt in den Pointer und ersetzt die alte addresse 16256 mit ner neuen 16456 , schon ist dein speed höher.

Autoit Codeschnippsel von mir damals:

PHP Code:
Dim $Offset[3] = [00x1280x5B6]
SetPrivilege("SeDebugPrivilege"1)
$openmem _MemoryOpen(WinGetProcess("METIN2"))
$baseadress _MemoryModuleGetBaseAddress(WinGetProcess("METIN2"), "immortal2.bin")

Dim $zustand

case $Button1
$zustand 
True

case $Button2
$zustand 
False


If $zustand Then
    $Awert 
=_MemoryPointerRead($baseadress+0x21C4A4$openmem$Offset"short")
        
_MemoryPointerWrite($baseadress 0x21C4A4$openmem$Offset"16656""dword")

Else
    
$Awert =_MemoryPointerRead($baseadress+0x21C4A4$openmem$Offset"short")
        
_MemoryPointerWrite($baseadress 0x21C4A4$openmem$Offset"16256""dword")
EndIf 
01/16/2011 13:43 black'coockie#6
Quote:
Originally Posted by .BritainAndy View Post
In metin2 einen Speedhack zu erstellen ist das simpleste was es gibt.

Es geht TAUSEND tutorials wie man die Bewegungsmemoryaddress findet mit CheatEngine auf Youtube.
Schuhe ausziehen, den Wert (weiß ihn nicht mehr ausm kopf, 16256 oder so) scannen. Schuhe anziehen, da der bew. speed erhöht worden ist "has increased" einstellen und wieder nach 16256 suchen. Bis du nurnoch eine oder ich sage imme rmaximal 3 addressen hast. Dann suchst du den pointer für eine Addresse, und legst in deinem Source eine Variable für die addresse an (kp welche sprache du benutzt), und dann schreibst du halt in den Pointer und ersetzt die alte addresse 16256 mit ner neuen 16456 , schon ist dein speed höher.

Autoit Codeschnippsel von mir damals:

PHP Code:
Dim $Offset[3] = [00x1280x5B6]
SetPrivilege("SeDebugPrivilege"1)
$openmem _MemoryOpen(WinGetProcess("METIN2"))
$baseadress _MemoryModuleGetBaseAddress(WinGetProcess("METIN2"), "immortal2.bin")

Dim $zustand

case $Button1
$zustand 
True

case $Button2
$zustand 
False


If $zustand Then
    $Awert 
=_MemoryPointerRead($baseadress+0x21C4A4$openmem$Offset"short")
        
_MemoryPointerWrite($baseadress 0x21C4A4$openmem$Offset"16656""dword")

Else
    
$Awert =_MemoryPointerRead($baseadress+0x21C4A4$openmem$Offset"short")
        
_MemoryPointerWrite($baseadress 0x21C4A4$openmem$Offset"16256""dword")
EndIf 
Bei mir kommt bei Case ein Fehler!
01/16/2011 13:55 omer36#7
Quote:
Originally Posted by xxxcuneytxxx View Post
Bei mir kommt bei Case ein Fehler!
Quote:
Autoit Codeschnippsel
durch C&P kommste nicht weit
01/16/2011 18:07 0rc#8
Naja aber so einfach geht das ja nicht bei jedem Spiel.

Wie kann man den z.b. bei einem anderen Spiel die "Speed Variable" finden ?

Dadurch das man bei Meltin 2 die Schuhe ausziehen kann und in Zahlen sehen kann wie sich die Laufgeschwindkeit verändert ist das ganze ja recht simpel.
01/16/2011 21:17 DNA-Trainer#9
Dieses Thema kann man leider nicht verallgemeinern...
Bei einigen Spielen geht es relativ einfach, bei anderen wiederum nicht.

Bei Spielen mit der Unreal Engine ist es "oft" die gleiche vorgehensweise...
Man finde die Koordinaten der Spielfigur und schaut sich die Memory Region an.
In der Nähe der Koordinaten steht der "Speed Modifier", meistens FLOAT 1.
Wenn man den erhöht, erhöht sich auch die Geschwindigkeit ;)

Dabei ist aber auch auf einiges zu achten ... unter umständen teilen sich
der Gegner und die eigene Spielfigur den "Speed Modifier", was
bedeuten würde, dass der Gegner genauso schnell laufen kann, wie man
selbst.
Dann könnte man z.B. per codeinjection einen vergleich machen ob
die Spielfigur die Speedrutine durchläuft, oder der Gegner.

Mit so einem Vergleich kann man sogar 2 Fliegen mit einer Klappe schlagen...

Pseudocode
Wenn Spielfigur Dann
Speed * 2
OderWenn Gegner Dann
Speed = 0,1
Ende Wenn

Damit hätte man dann eine Super Speed und Slow Enemies Funktion in einem;)


~DNA
01/16/2011 22:40 0rc#10
Na gut mit den Infos von DNA-Trainer kann man ja schon etwas anfangen.
Nur wie krieg ich z.b. die Koordinaten einer Spielfigur ?

Ich denke mal nur durch aufwendiges Reverse Engineering oder ?

Aber eine andere Sache noch wie macht Cheat Engine so etwas?

Weil da kann man ja auch einen Speedhack einschalten.
01/17/2011 09:47 -AmA-#11
Quote:
Originally Posted by 0rc View Post
Ich denke mal nur durch aufwendiges Reverse Engineering oder ?
Nein!
Die sind in Float oder Double abgespeichert und verändern sich immer beim laufen... Dadurch findest du sie mit den Einstellungen "Unknow Value","Increase", "Decrease"...

Auserdem findest du mit der fast gleichen Methode auch den Speed...
Den wenn du dich ingame bückst, verändert sich die Variable (wird kleiner)

Dies trifft überigens auf die meisten Shooter zu
01/17/2011 16:34 DNA-Trainer#12
Der Speedhack von CE erhöt die komplette Prozessgeschwindigkeit,
d.h. dass ALLES schneller läuft.

Die Koordinaten werden bei heutigen Spielen zu 99% als FLOAT gespeichert
(will ich jetzt einfach mal behaupten)


Kurzanleitung zum finden der richtigen KoordAddis bei Egoshootern:
1. Suche
Unknown initial Value
Type: FLOAT

2. Suche
Springen und in der Luft das Spiel pausieren
Increased Value

3. Suche
Zurück zum Spiel, den Spieler wieder auf den Boden kommen lassen
Decreased Value

Schritt 2 und 3 so oft wiederholen, bis nur noch wenige Adressen über bleiben (zwischendurch auch mal unchanged, wenn man sich nicht bewegt hat)

Danach heißt es rumprobieren und auf folgende Merkmale achten:

* Es kommen "eigentlich" nur adressen in frage, welche mit 0,4,8 oder C enden!
("eigentlich" heißt hier, dass man zu 99% davon ausgehen kann, dass die Addis mit 0,4,8 oder C enden. Dies ist aber nicht zu 100% gewährleistet!)
* Werte die sich ständig wiederholen
* Werte die am Ende ein Exx haben, können ignoriert werden! (xx steht hier für eine zahl)


Man holt sich also nach und nach immer so 10-20 addis in die Cheattabel, welche die oben genannten kriterien erfüllen.
Diese werden dann alle eingefroeren und man versucht dann im Spiel zu springen.
Das wiederholt man, bis man im Spiel nicht mehr springen kann und quasi am Boden fest klebt ^^

Damit hätte man dann die Z-Koordinate.
X und Y sind dann ein leichtes Spiel ... man zieht von der Z-Koordinaten Addi einfach 4 Bytes für die Y-Koord ab und
von der Y-Koord nochmal 4 Bytes für die X-Koord.

BEISPIEL
Z-Koord-Addi = 500008
Y-Koord-Addi = 500004
X-Koord-Addi = 500000
--------------------------------------------------------------------

Im übrigen gibt es [Only registered and activated users can see links. Click Here To Register...] ein ausführliche VideoTut zum finden
der KoordAddis mit einer anderen Methode, als die oben genannte.
01/17/2011 16:50 -AmA-#13
Quote:
Originally Posted by DNA-Trainer View Post
Der Speedhack von CE erhöt die komplette Prozessgeschwindigkeit,

d.h. dass ALLES schneller läuft.
krass... damit beschleunige ich in Zukunft den Systemprozess :p
so nach dem moto: 4 Kernen x 2,2 GHz x CE Speedhack 500 :cool:

Quote:
Originally Posted by DNA-Trainer View Post
("eigentlich" heißt hier, dass man zu 99% davon ausgehen kann, dass die Addis mit 0,4,8 oder C enden. Dies ist aber nicht zu 100% gewährleistet!)
Erklär mir warum 4 bytes Variablen nicht mit 0,4,8,C enden...

Sonst ists n nice Tut
01/17/2011 16:59 DNA-Trainer#14
Quote:
Originally Posted by -AmA- View Post
Erklär mir warum 4 bytes Variablen nicht mit 0,4,8,C enden...
Diese Frage müsstest du mir bitte genauer erklären
01/17/2011 17:12 .BritainAndy#15
du sagtest das FLOAT variablen mit 0,4,8,C enden.

Aber 4Byte Variablen (DWORD) können auch mit 0,4,8,C enden, oder?


So ähnlich meint es -AmA-