Vllt hilft dem einen oder anderen die ausführliche Erklärung weiter um vllt irgendwelche anderen Änderungen zu machen, naja hf
Quote:
Zuerst müsst ihr natürlich eure game file vom Server laden.
Dann braucht ihr noch IDA. Ich benutze die v5.5, aber in der v4.9 sollte das genau so gehen.
Jetzt öffnet ihr die game file mit IDA (bei Format sollte "ELF" schon gewählt sein, den Rest einfach so lassen).
Sobald IDA fertig analysiert hat, sucht ihr oben nach dem Text "CInputMain::Analyze()".
Hier solltet ihr den String "CInputMain::Analyze() ==> Header [%d] " finden (siehe Screen). Dort geht ihr auf den DATA XREF (rot markiert) um in die Analyze Funktion zu kommen.
Das ist jetzt die Funktion, die die eingehenden Packets von den Clients, die in der Game Phase sind (sprich, wenn man rumlaufen kann, ect.).
Wer die v5.5 hat, kann jetzt mit F5 den Pseudocode erzeugen, aber ich zeigs einfach mal ganz normal in der IDA Ansicht.
Hier scrollt ihr in der Funktion runter, bis zum Aufruf (Call) der Funktion CInputMain::ItemDrop2 kommen (rot markiert). Die CInputMain::ItemDrop Funktion ist wohl die ältere, die garnicht verwendet wird, der Client hat ja auch 2 ItemDropPacket Funktionen, wobei da auch immer nur die 2. benutzt wird.
In diese Funktion geht ihr jetzt einfach mit einem Doppelklick rein.
In dieser Funktion wird überprüft welche Parameter gesetzt sind und je nach dem wird dann die DropGold oder die DropItem Funktion aufgerufen.
Wir ersetzen dann einfach den Jump zur DropGold Funktion mit einem Jump an das Ende der Funktion. Außerdem nop'en wir die 3 Zeilen vor dem Jump (Parameter für die DropGold Funktion, ect.) einfach aus. Da wir schonmal dabei sind, können wir uns auch schon gleich die nötigen Adressen für den neuen Jump notieren (dazu komme ich gleich). Das wäre einmal die Adresse zu der wir wollen (Zieladresse), also hier die 080FE3C7 und die Adresse, an der der Jump gemacht wird, also 080FE3AB.
Jetzt markiert ihr die obere der 3 Zeilen über dem Jump und wechseln zur Hex-View.
Das sind die Bytes des Jumps und der 3 Zeilen darüber. Diese kopiert ihr euch einfach und öffnet die game file mit einem HexEditor.
Jetzt sucht ihr nach den Bytes (falls ihr mehrere Stellen findet, kopiert euch noch ein paar Bytes aus IDA, die davor sind.
Da wir ja die 3 Zeilen über dem Jump aus nop'en wollen (nop = no operation = nichts tun) überschreiben wir sie einfach mit 0x90 (ASM Wert für NOP).
Jetzt fehlt nurnoch der Jump.
Dieser wird folgendermaßen berechnet:
Zieladresse - JumpAdresse - 5
Die 5, da der Jump ja 5 Bytes lang ist (1 Byte für E9 und 4 bytes für den Jumpwert).
Jetzt kommen unsere zuvor notierten Adressen ins Spiel:
080FE3C7 - 080FE3AB - 5 = 17
Das heißt wir springen 23 Bytes (da die 17 ja HEX ist) weiter (und ja, man hätte die Bytes auch einfach abzählen können, ich weiß).
Nun können wir die 17 hinher den Jump schreiben. Aber in LittleEndian schreibweise, d.h. die Bytes werden umgedreht. Aus z.B. 12 34 56 78 wird 78 56 34 12. In unserem Fall ist der Wert ja 00 00 00 17, also wird 17 00 00 00 daraus.
So sollte es dann am Ende aussehen.
Ich hoffe ihr konntet das "kleine" HowTo verstehen