Analyse des World of Tanks-Protokolls

Hallo, heute werden wir das Protokoll der Panzer (mobil) analysieren

Der Autor ist nicht verantwortlich für das in diesem Artikel bereitgestellte Material. Alles, was Sie gelesen oder gesehen haben, war in einem Traum. Während des Protokollanalyseprozesses geschriebene Tools werden niemals für die Öffentlichkeit freigegeben.





Die Werkzeuge, die wir brauchen

  1. x64 dbg





  2. Cutter (Radare2)





  3. C ++ 4. WireShark





Start (Protokoll)

Ich begann die Analyse mit der Definition des Protokolls, das das Spiel für die Kommunikation verwendet (TCP / UDP).





Wir öffnen procmon (wir versuchen, im Spielclient zu autorisieren).





UDP ( ) 12 ( ping / pong), , 273 30 . "loginapp_wot.pubkey" - RSA-2048 ( )





 ( )

WireShark - UDP .









( ) (273 ) . , :









(  1-2 ) :





HEADER => [0x01, 0x00, 0x00, 0x04, 0x01, 0x31, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02]
BODY => [? ? ? ? ?]
FOOTER => [0x02, 0x00]
      
      







 256  * 8 = 2048  ( RSA-2048)





x64dbg 2 ws2_32 [send / sendTo]





( ) . call stack,  0x100:





Json .







body .





?

(RSA-2048) .





.





 ( )

, .













 (caller)

.





Splice  ist eine Methode zum Abfangen von API-Funktionen durch Ändern des Zielfunktionscodes. Stattdessen wird ein Übergang zu einer vom Programmierer definierten Funktion eingefügt.





Zuerst müssen wir die ursprüngliche Entschlüsselungsfunktion aufrufen.

Dann lesen Sie [ptr * dest]





Ich habe beschlossen, meine DLL in C ++ zu schreiben, um ein Trampolin der Funktion zu

erstellen. Vergessen Sie nicht, die Konvention beim Aufrufen zu beachten (__cdecl / __fastcall / __thiscall).





  1. Die Adresse der Funktion erhalten wir über GetModuleBaseAddress + RVA





  2. Spleißfunktionen





Ergebnis

Injizieren Sie DLL in den Spielprozess (ich habe CE verwendet).

Wir autorisieren das Spiel und genießen.












All Articles