frage wegen hack^^

10/26/2012 16:07 janix99#1
soweit ich weis werden hacks meist nur gepatcht, weil programmpfäde im spiel verändert wurden. wäre es nicht möglich, eine veränderte version des spiels zu machen die mit variablen funzt? is nur ne frage xD wäre lustig^^
10/26/2012 17:09 Nightblizard#2
Quote:
Originally Posted by janix99 View Post
soweit ich weis werden hacks meist nur gepatcht, weil programmpfäde im spiel verändert wurden. wäre es nicht möglich, eine veränderte version des spiels zu machen die mit variablen funzt? is nur ne frage xD wäre lustig^^
Da ändern sich nicht irgendwelche Pfade, sondern die Adressen können sich ändern. Lass mich das kurz mit wen wenig Pseudocode veranschaulichen.

Code:
function foo()
    //hier passiert irgendwas, was genau spielt keine Rolle
end
Nach dem Erstellen erhält diese Funktion eine Adresse, an der sie später in den Arbeitsspeicher geladen wird. Nehmen wir einfach mal an 0x00080085.

Nun erstellen die Entwickler einen neuen Patch und fügen eine neue Funktion hinzu.

Code:
function bar()
    //auch hier ist egal was passiert
end

function foo()
    //hier passiert irgendwas, was genau spielt keine Rolle
end
Nun steht die Funktion "bar" vor "foo", dadurch verschiebt sich die Adresse der Funktion "foo" vom Ursprungswert auf einen anderen.

Wenn man sein Programm also so eingestellt hat, dass es die Funktion an der Adresse 0x00080085 aufruft, dann wird das nach dem Patch nicht mehr funktionieren, da sie nun nicht mehr dort ist.

So kannst du dir das prinzipiell vorstellen, auch wenn das ein wenig vereinfacht wurde.

Jedoch verstehe ich nicht was du mit "eine veränderte version des spiels zu machen die mit variablen funzt" meinst. Das solltest du vielleicht ein wenig genauer ausführen, falls du darauf eine Antwort erhalten möchtest.
10/26/2012 19:40 マルコ#3
Wahrscheinlich meint er, dass der Hack selbstständig nach der Funktion sucht, und dann die so gefundene Adresse nutzt. Also könnte der Hack nicht weggepatcht werden, allein indem sich die Adressen ändern.
10/26/2012 21:03 RunzelEier#4
ja das geht ohne probleme.
mit byte patterns ;)
10/26/2012 21:18 Nightblizard#5
Jo, das ist möglich. Auf verschiedene Arten.
Eine ist z.B. ein sogenannter "Patternscan".
Die obigen Funktionen werden in Machinencode übersetzt. Das sind einfach jede Menge Bytes, die der CPU sagen, was zu tun ist.
Z.B. ist folgendes der Machinencode [Only registered and activated users can see links. Click Here To Register...] (nicht optimiert).
Code:
55
8B EC
51 
C7 45 FC 00 80 0B 00 
0F B7 05 38 58 10 00
8B 4D FC
8A 55 08
88 14 41
0F B7 05 38 58 10 00
8B 4D FC
8A 55 0C
88 54 41
01 66 A1 38 58 10 00
66 83 C0 01
66 A3 38 58 10 00
8B E5
5D
C2 08 00
Wenn du jetzt z.B. die ersten 20 Bytes der Funktion nimmst und danach im Arbeitsspeicher suchst, dann wirst du sie wahrscheinlich nur ein mal finden.
Das Problem dieser Methode ist jedoch, dass sie auch nicht von dauerhafter Natur ist. Wenn sich hier etwas am Anfang der Funktion ändert, dann ändert sich auch der Machinencode und deine Suche findet nichts.

Gibt noch ein paar andere Methoden, die sind aber ein wenig zu komplex, als dass man sie in diesem kleinen Kasten umschreiben kann.
10/27/2012 09:37 janix99#6
danke für alle guten antworten^^ ist es denn möglich das patchen wegzulassen? es gibt ja i-wo ein code der sagt, lass ihn nur ins spiel rein wenn er gepatcht hat kann man den einfach wegmachen?
10/27/2012 10:44 Nightblizard#7
Jo, sowas lässt sich durchaus entfernen, jedoch ist das nicht besonders sinnvoll.
Mit einem Patch kommen gerne neue Spielinhalte, Bugfixes oder andere wichtige Änderungen.
Wenn sich z.B. die Struktur der Pakete, mit denen Client und Server untereinander kommunizieren, ändert und du nicht patchen tust, dann ist dein Spiel nicht mehr mit dem Server kompatibel und somit unspielbar.
Die Idee ist zwar nicht schlecht, aber leider kannst du das Spiel dann nicht mehr (richtig) spielen.