2009-04-22 9 views
4

Ich habe diesen Code, der Adressen in einem Spiel bearbeitet, um unbegrenzte Munition zu bekommen, und was nicht, und ich fand heraus, dass die Adressen für jeden Computer unterschiedlich sind, manchmal jedes Mal, wenn Sie das Spiel neu starten obwohl sie sich ändern.Behalten Adresse in C++ Hacking-Spiel-Code?

Antwort

7

Wenn Sie die Adresse suchen, die Sie suchen, und suchen Sie nach dieser Adresse im Speicher, um die Adresse des Zeigers zu finden, und suchen Sie dann nach Adresse im Speicher, damit Sie die Adresse finden können des Pointers und so weiter, können Sie schließlich eine Adresse finden, die sich nicht ändert. Dann können Sie dies zur Laufzeit als Ausgangspunkt verwenden und es dereferenzieren, um den gesuchten Ort zu finden. Das hängt natürlich davon ab, wie die Daten intern angelegt sind. Es kann sehr kompliziert werden.

+1

Alles, was ich mir vorstellen kann, ist, wenn Zeichendaten in einem Hash gespeichert werden (z. B. hat jeder Spieler eine Runtime-zugewiesene GUID als Hash-Schlüssel), werden Sie _lots_ Spaß haben, zu finden, welche Schaufel zu gehen. :-P –

+1

Wenn die Daten, die Sie suchen, auf einer Struktur/Klasse basieren, die lokal an einem bestimmten Punkt instanziiert wird, aber niemals eine globale oder statische Variable, suchen Sie _nicht_ nach einem statischen Zeiger. Sie müssen einen Code finden, der auf die Daten zugreift, die Sie zu dem Zeitpunkt benötigen, zu dem Sie ihn benötigen, und diesen Code einhängen und ihn auf Ihren eigenen injizierten Code umleiten, der an einer bestimmten Stelle im Heap zugewiesen ist. Dies ist nicht immer möglich, da gehärtetes Betriebssystem die Einführung von neuem Code nicht erlaubt. Wenn du viele statische Zeiger findest, könnte es sein, dass das Programm schlecht geschrieben wurde :) –

1

Sie werden entweder aufgeben oder sehr gut mit einem Disassembler arbeiten.

+0

Warum ist dies nicht eine Möglichkeit, nur die Adresse in dem Spiel zu finden, einen Scharfschützen und Chaos mit dem Wert der Adresse kann sagen, dass die Munition – H4cKL0rD

+0

Der Disassembler (oder ein spezialisiertes Werkzeug wie ein Speicher hält Scanner - schau dir die Antwort auf deine andere Frage an) * ist * wie du "nur die Adresse findest". Eine Sache, die es leichter machen könnte, ist, dass das Spiel wahrscheinlich immer die gleichen Offsets haben wird (obwohl sie einige Anti-Cheat-Algorithmen haben, die Dinge bewegen, aber ich wäre überrascht). Wenn Sie die Basisadresse des Spielprozesses finden können, sind Sie eingestellt. –

+3

Vergessen Sie nicht, dass verschiedene Sequenzen von Operationen mit unterschiedlichen Dingen zu unterschiedlichen Zeiten und einer unterschiedlichen Anzahl zugeordneter Dinge enden können, so dass die Adressen davon abweichen können. Wenn es irgendeine Randomisierung im Spiel gibt, könnte das auch ein Faktor sein - und das ist bevor Sie eine willkürliche Randomisierung der Ladeadressen für gemeinsam genutzte Bibliotheken (die von den o/s bereitgestellt werden) erhalten. –

8

Signatur, die für den Datensatzinhalt im Heap übereinstimmt. Vielleicht mit Bearbeitungsabstand zu bestimmten bekannten Inhalten.

Kein Problem, ich antworte, da Sie fragen mussten, haben Sie wahrscheinlich nicht die Koteletts, um es abzuziehen.

+8

Harsch, aber wahr. – ojrac

2

Der beste Weg ist, nach Mustern im Speicher zu suchen und sie mit Offsets zu berechnen. Es wird nicht einfach sein, einfach weil dies die Art von Dingen ist, die Spieleentwickler stoppen wollen.

So werden sie nicht eine nette Zeichenfolge haben, die sagt "Ammo gespeichert 27 Bytes vor dem Start dieser Zeichenfolge".

Wenn sie wie bewegend es schwierig Sachen tun das Spiel um jedes Mal ausgeführt wird (und ich würde, weil ich bin verschlagen), müssen Sie ihren Code zerlegen, um herauszufinden, wie sie den Speicher lokalisiert .

Dann machen Sie das Gleiche. Ich weiß, klingt einfach und es ist. Aber aufgrund Ihrer letzten Fragen bin ich mir nicht sicher, ob "H4cKL0rD" ein geeigneter Spitzname ist :-), zumindest in diesem Fall.

Wenn Sie sich mit Disassemblern, Hex-Editoren und dergleichen unwohl fühlen, gibt es mit ziemlicher Sicherheit ein Programm, das es für Sie erledigt.

1

Wenn Sie nur die Arbeit erledigen wollen und nicht daran interessiert sind, es selbst zu programmieren, können Sie ein Programm verwenden, das speziell für diese Aufgabe entwickelt wurde, wie zB T-Search.

+0

ich bin ok mit denen, die einfach IDK, was ich suche, habe ich Cheat-Engine wissen Sie, wie Sie den Kern mit dem – H4cKL0rD

+1

finden Grundsätzlich können Sie sie verwenden Suchen Sie nach einem Wert und ändern Sie diesen Wert, indem Sie etwas im Spiel ausführen, die Suche einschränken usw., bis nur noch ein möglicher Speicherort im Speicher vorhanden ist, und Sie können ihn dann ändern. –

+0

Nein, ich weiß, wie man das macht, aber die Adresse ändert sich mit jedem Computer manchmal bei jedem Start des Spiels – H4cKL0rD

0

Ich würde sagen, laden Sie einige benutzerdefinierte Speicherzuordner und versuchen Sie herauszufinden, welche malloc() Größe Sie suchen.

Da die Daten, die Sie versuchen zu hacken, sehr wahrscheinlich in einer Struktur mit anderen Parametern gespeichert werden, können Sie aufgrund der Strukturgröße besondere Maßnahmen ergreifen, wenn Sie eine Zuweisung dieser Größe bestehen.

typedef struct { 
    int ammo; 
    int damage; 
    int fire_distance; 
} Sniper_AWP_T; 

void *my_custom_malloc(int size){ 
    void *ret = malloc(size); 
    if(size == sizeof(Sniper_AWP_T)){ 
     hack_address = ret; 
    } 
    return ret; 
} 

// later on 

hack_address->ammo = 999;