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
x64 dbg
Cutter (Radare2)
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).
Die Adresse der Funktion erhalten wir über GetModuleBaseAddress + RVA
Spleißfunktionen
Ergebnis
Injizieren Sie DLL in den Spielprozess (ich habe CE verwendet).
Wir autorisieren das Spiel und genießen.