CS 1.6 - kleiner hack

Code:
#include <iostream.h> 
#include <windows.h> 

using namespace std; 

int geld; 

int main() 
{ 
    cout << "Counter-Strike Trainer" << endl << "coded by 'nookstar'" << endl << endl;
    HWND fenster = NULL; 
    
    while(fenster == NULL) 
    { 
                  fenster = FindWindow(NULL, "Counter-Strike"); 
                  Sleep(100); 
    };
    
    cout << "Counter-Strike found !" << endl << endl;
     
    DWORD prozessid; 
    GetWindowThreadProcessId(fenster, &prozessid); 
    
    HANDLE handleprozess; 
    handleprozess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, prozessid);
     
    DWORD puffer = NULL; 
    
    ReadProcessMemory(handleprozess,(void*)(0x1A1FD4C),&money,sizeof(money),&puffer); 
    
    cout << "Actual Money: " << money << endl << "New Money: "; 
    cin >> money; 
    
    WriteProcessMemory(handleprozess,(void*)(0x1A1FD4C),&money,sizeof(money),&puffer); 
    WriteProcessMemory(handleprozess,(void*)(0x436B88C),&money,sizeof(money),&puffer); 
    
    CloseHandle(handleprozess); 
    
    return 0; 
}

Offline klappt das wunderbar nur leider nicht online , auf nem Server werden mir zwar die z.B. 16000 angezeigt aber ich habe diese nicht also wird wohl eine Speicheradresse nicht überschrieben.
Aber woran liegt das ?
An den Server Einstellungen ?


MfG
 
im online modus wird geld etc. vom server gehandelt.

ist also nicht möglich diese zu verändern
 
[spaßverderber] naja... cheaten im onlinemodus heißt eigentlich bann^^ und CS mit cheats macht nach ner zeit weniger spaß X( [/spaßverderber]

noch ne dumme frage: das ist doch c++ oder?
 
Wie gesagt, das Geld wird vom Server gemanaged. Und da kannst du nichts daran ausrichten.

Der Server hat intern eine Liste und weiss immer genau wieviel Geld jeder Spieler hat.
Der Server ist sogar so nett und schreibt dir eine Nachricht und teilt dir mit wieviel du hast.
Das sind die sogenannten UserMessages der Half-Life Egine.
Die 'Money' Message sieht so aus:
'Money'

int32 money;
int8 unknown1;

Man kann sich das ungefähr so vorstellen:
Die Bank sendet dir Kontoauszüge auf denen steht, wieviel Geld du noch auf der Bank hast. Zuhause nimmst du dann einen Kugelschreiber und überschreibt den Wert mit der gewünschten Summe. Klappt das? Nicht wirklich oder? :D

Also, was kann man denn noch manipulieren? Man macht auf dem Client ja seine Spielzüge und schickt das Ergebnis zum Server. Gleichzeitig kann man alle Informationen, die einen der Server schickt zu seinem Vorteil auswerten.

Nun muss man herausfinden, welche Daten man als Client an den Server schicken kann und was der Server noch annimmt.

Angenommen der Client verwertet das Töten der Gegner und das abziehen von Healthpoints der Gegner. Dann könnte man als Client allen möglichen Mist schicken, von wegen man hat alle Gegner getötet. Damit das nicht funktioniert, werden nur primitive Daten geschickt.
Daten wie:
In welche Richtung laufe ich?
Wohin gucke ich?
Schiesse ich?

Der Server nimmt diese Daten, z.B "Schiesse Ich?" und "Wohin gucke Ich?" und berechnet mit der Engine auf der Serverseite einen Schuss und entscheidet dann ob der Gegner tot ist oder nicht. Wenn das der Fall ist, sendet er wieder eine Nachricht an alle Spieler, nämlich, dass der Spieler gestorben ist. Diese Nachricht kann man wie im Geldbeispiel nicht verändern, bzw. es würde keinen Unterschied machen.

Gleichzeitig wird auf dem Client aber auch ein Schuss berechnet. Aber diese Berechnung dient ALLEIN der Animation des Schusses und das Anzeigen des Einschussloches. Diese Berechnung hat keinen wirklichen Einfluss auf den Spielverlauf.
Es kann also sein, dass der Client einen Schuss berechnet, der theoretisch den Gegner töten würde, der Server jedoch berechnet, dass der Schuss daneben geht.

Wie kann das sein? Das liegt zum einen an der schwierigen Aufgabe der Synchronisation des Spiels. Jede Engine macht das da ein bisschen anders. Denn man muss bedenken die Daten wandern mit Verzögerung über das Internet. (Latency auch "Ping" genannt).

Aber nicht immer ist der Server so vorsichtig. Die sogenannten "Speedhacks" machen es in sehr vielen Engines möglich sich mit ungeahnten Geschwindigkeiten zu bewegen ohne, dass der Server meckert.

Was könnn wird aber darüber hinaus noch manipulieren? Damit unsere Grafikkarte die gegnerischen Spieler rendern kann, müssen wir Informationen vom Server bekommen, wo sich die Spieler gerade befinden. Oder wenn gegnerische Spieler Geräusche machen, dann muss der Client wissen von wo der Sound kommt, damit die Soundengine möglichst real eine räumliche Geräuschkullisse erzeugen kann.

Das verrät uns wo sich die Gegner in der Spielewelt befinden und können diese durch die Wand markieren. Wir können auch unseren Blickwinkel genau auf die Gegner ausrichten und automatisch Zielen und dann auch Schiessen.
Denn diese Tätigkeiten hätten wir theoretisch genauso auch ohne Hilfsmittel tun können. Wir schicken nun unsere Daten zum Server "Wo gucke ich hin?" und "Schiesse ich?" und der Server berechnet den Schuss und wenn unsere Latenz (Ping) nicht zu hoch ist bzw. die clientseitige Interpolation der Spielerpositionen gut funktioniert haben wir sicherlich einen Treffer gelandet. ;)
 
Original von b4ck
hi,
mich würde intressieren wie du die speicheradressen rausgekriegt hast?
Das macht man normalerweise mit Tools wie CheatEngine, TSearch oder Artmoney. Natürlich wäre es auch mit einem Debugger möglich, was aber sehr viel schwieriger ist.

Bei Spielen die sich gegen Trainer und MemorySearcher schützen (Double Checking, Verschlüsselung von Speicherbereichen wie Geld, Leben etc.), kann ein Debugger/Disassembler trotzdem notwendig werden.

Auf http://forum.cheatengine.org/ gibt es übrigens ein Forum zu dem Thema.
 
Ui das beantwortet mein Frage :)
Naja sowas ähnliches habe ich mir da schon gedacht ^^
Ich denke bis ich online etwas manipulieren kann muss ich noch weiter mein Buch lesen,
aber danke für die ausführliche Antwort.

@b4ck

Ich habe ein Tool (Tsearch) benutzt um die Variablen zur Laufzeit heraus zusuchen,
somit kriegst du die Speicheradresse der Variable angezeigt und kannst dann deinen eigenen Senf dazu geben :x

Und ja das ist C++

//edit

Genau, auf der Seite in Eydeet's Post gibt es gute Tutorials dadrüber.
 
Für MemorySearcher empfehle ich L. Spiros MemHack [1].
Unter den Features zählen auch diverse Methoden, sich vor Anti-Cheat Software zu verstecken.

In der Tat ist jedoch "Reverse Engineering" das Wichtigste, wenn es darum geht Spiele zu hacken. Darum haben viele Memory Searcher schon Debugger Extensions, die aber meistens einen herkömmlichen Debugger nicht ersetzen bzw. die Fülle an Funktionalität nicht besitzen.

[1] http://www.memoryhacking.com/
 
ich kann nur nochmal das sage was die anderen gesagt haben:

das geld wird vom server verwaltet, es gab / gibt noch einige bugs mit denen man 16000 geld hat, aber die kenne ich ned...

also wenn du die cs sourcecodes hättest, dann würde es gehen. ich hatte mir mal einen god mode hack für das alte quake2 geschrieben.. war super! ;)
 
Auch wenn du weisst wie der Server arbeitet ist es als Client nicht möglich das Geld oder etwa die HP zu ändern da dies vom Server ausgeht. (das schließe ich aus ++ATHO's Post)
Die einzige Möglichkeit wäre demzufolge den Server zu hacken :x
 
Das einzige was mich daran reizt ist es den Hack selbst zu programmieren wer meint seinen Skill durch Cheats zu faken soll es machen.
Ich spiele seit ca. 6 Jahren Counter Strike und davon 4 in der ESL, naja, 12 pps musste ich noch nie befürchten.
Ich finde dieses Theman nur sehr interessant.
 
Zurück
Oben